1. 環境準備
1. 参照方法
代表的な実装方法は2種類あります:
- 旧方式:
HtmlAgilityPack.dllを手動で参照追加 - 推奨方式:NuGetパッケージからインストール
Install-Package HtmlAgilityPack
2. よく使う主要クラス
| クラス名 | 役割 |
|---|---|
HtmlDocument | HTMLドキュメントを保持、HTMLソースの読み込みを担当 |
HtmlWeb | HTTP通信クラス。URLから直接WebページのHTMLを取得 |
HtmlNode | 単一のHTML DOMノード(div/a/pなどのタグ) |
HtmlNodeCollection | HtmlNodeのコレクション。複数件の検索結果を格納 |
2. HTML読み込みの2通りの手段
どちらの方法も最終的に HtmlDocument オブジェクトを取得します
1:ローカルファイル/HTML文字列読み込み
- ローカルHTMLファイル読み込み
using HtmlAgilityPack;
using System.Text;
HtmlDocument document = new HtmlDocument();
// 文字コードを指定しローカルファイルを読み込む
document.Load("news.htm", Encoding.UTF8);Code language: JavaScript (javascript)
- HTMLテキスト文字列読み込み
string htmlStr = "<html>...</html>";
document.LoadHtml(htmlStr);Code language: HTML, XML (xml)
2:Web上のページを読み込む
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://example.com");Code language: JavaScript (javascript)
3. ノード検索
// 1. ドキュメントオブジェクト作成
HtmlDocument document = new HtmlDocument();
// 2. ローカルhtmlファイル読込
document.Load("news.htm", Encoding.UTF8);
// 3. ドキュメントルートノード取得
HtmlNode rootNode = document.DocumentNode;
// 4. XPathで一括検索、ノードコレクションを返却
HtmlNodeCollection newsList = rootNode.SelectNodes(
@"//html/body/div[@class='content']/div/div[@class='left']/div[1]/div[@class='blk12']/div[@class='blk122']/a"
);Code language: JavaScript (javascript)
主要メソッド解説
SelectSingleNode("XPath"):条件に合致する最初のノードを返却、戻り値はHtmlNodeSelectNodes("XPath"):条件に合致する全てのノードを返却、戻り値はHtmlNodeCollection- 教材サンプルは完全な絶対パスを記載しています。実務ではグローバル相対検索を活用しXPathを簡略化、ページ改変によるXPath崩れリスクを抑えるのが推奨です:
//div[@class='blk122']/aCode language: JSON / JSON with Comments (json)
4. 走査しコンテンツ取得するサンプル
if(newsList != null)
{
foreach(HtmlNode aNode in newsList)
{
string title = aNode.InnerText; // タグ内テキスト取得
string link = aNode.GetAttributeValue("href",""); // href属性取得
}
}Code language: PHP (php)
5. よく使うプロパティ早見表
.InnerText:タグ内部のプレーンテキスト.InnerHtml:子タグを含む内部HTMLソース.OuterHtml:自身のタグ+内部全体のHTMLGetAttributeValue("属性名","デフォルト値"):安全にタグ属性を読み取る
活用例
Previous: XPath
Next: ドキュメントコンテンツを取得する