活用例

1. 環境準備

1. 参照方法

代表的な実装方法は2種類あります:

  1. 旧方式:HtmlAgilityPack.dllを手動で参照追加
  2. 推奨方式:NuGetパッケージからインストール
Install-Package HtmlAgilityPack
2. よく使う主要クラス
クラス名役割
HtmlDocumentHTMLドキュメントを保持、HTMLソースの読み込みを担当
HtmlWebHTTP通信クラス。URLから直接WebページのHTMLを取得
HtmlNode単一のHTML DOMノード(div/a/pなどのタグ)
HtmlNodeCollectionHtmlNodeのコレクション。複数件の検索結果を格納

2. HTML読み込みの2通りの手段

どちらの方法も最終的に HtmlDocument オブジェクトを取得します

1:ローカルファイル/HTML文字列読み込み
  1. ローカルHTMLファイル読み込み
using HtmlAgilityPack;
using System.Text;

HtmlDocument document = new HtmlDocument();
// 文字コードを指定しローカルファイルを読み込む
document.Load("news.htm", Encoding.UTF8);Code language: JavaScript (javascript)
  1. 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"):条件に合致する最初のノードを返却、戻り値は HtmlNode
  • SelectNodes("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:自身のタグ+内部全体のHTML
  • GetAttributeValue("属性名","デフォルト値"):安全にタグ属性を読み取る

活用例

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です