.NETでHTMLをスクレイピングする方法について書きます。
AngleSharp
HTMLスクレイピングするパッケージとしてHtml Agility Packも有名ですが、今回はAngleSharpでやってみることにしました。
NuGetでAngleSharpを入手します。
Htmlファイル
テスト用として以下のHtmlファイルを準備しました。
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div>
<ul id="list">
<li>東京</li>
<li>大阪</li>
<li>名古屋</li>
<li>福岡</li>
<li>札幌</li>
</ul>
</div>
<div>
<p id="contents">ああああああああああああああ</p>
</div>
</body>
</html>
スクレイピング
private void Button_Click(object sender, RoutedEventArgs e)
{
string FilePath = @"D:\test.html";
var html = File.ReadAllText(FilePath, System.Text.Encoding.UTF8);
var parser = new HtmlParser(); // HTMLParserのインスタンス生成
var doc = parser.ParseDocument(html); // htmlをパースする
var items = doc.QuerySelectorAll("ul#list > li");
foreach(var item in items)
{
Console.WriteLine(item.TextContent);
}
//id指定
var h = doc.GetElementById("contents");
if (h != null)
{
Console.WriteLine(h.TextContent);
}
}
8行目:QuerySelectorAllメソッドで、条件に会った要素を取得しています。
15行目:GetElementByIdで指定したID属性値を持つ要素を取得しています。
結果
出力ウインドウに以下のように結果が表示されました。欲しい結果が得られました。
東京
大阪
名古屋
福岡
札幌
ああああああああああああああ