5.HtmlAgilityPack (Webスクレイピングライブラリ)

Webスクレイピングライブラリ(HtmlAgilityPack)について説明していきます。

アグリモの製品では、日報データ自動取得システムDT、検索データ自動取得システムDTで、SgmlReader の代用として置き換えることを検討しましたが、現在も置き換えには至っておりません。

用途としては、SgmlReader と同じく、HTMLをXMLにパースするために用います。先にも述べましたが、HTMLは結構記述ミスが多く、そのままXMLとして用いることが出来ませんので、XMLパーサーが必要になります。使ってみた感じでは、生成されたXMLを LINQ to XML を用いて構文解析を行う際にエラーが出て落ちたりすることがあるように思いました。

綺麗なHTMLだと別に問題ありませんが、行儀の悪いHTMLでも落ちないことが重要ですので、アグリモでは今も SgmlReader の方を採用しています。

 

1.新規にソリューションを作成します。

2.パッケージマネージャーコンソールで、「Install-Package HtmlAgilityPack」と入力してEnterキーを押下します。

3.プロジェクトの参照にDLLが追加されます。

 

サンプルソース

WebBrowser browser = new WebBrowser();
            
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(browser.DocumentText);

for(int i = 1; i < 9; i ++)
{
    string name = htmlDoc.DocumentNode
                    .SelectNodes(string.Format("//*[@id=\"contentsBodyKaiinDetail\"]/form/table[2]/tbody/tr/td/table/tbody/tr[2]/td[2]", i))
                    .First()
                    .InnerText;

    MessageBox.Show("name = " + name);
}


var nodes = htmlDoc.DocumentNode.Descendants("input")
    .Select(y => y.Descendants()
    .Where(x => x.Attributes["class"].Value == "box"))
    .ToList();

foreach (var n in nodes)
{
    MessageBox.Show("node = " + n);
}