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);
}



