C#でAngleSharpを使ってHTMLをパースする
こんにちは。中原です。
今回はC#でAngleSharpというのを利用してHTMLをパースしてみました。
HTMLパースすることなんてあまりないかもしれませんが、もしパースする機会があればAngleSharpを使ってみてください。
AngleSharpはこちら。
github.com
AngleSharpをインストールする
まずは、NuGetからAngleSharpを検索・選択して「インストール」。
参照設定に追加されました。
パースするHTMLを用意する
パースするHTMLファイルを用意します。
今回はこんなHTMLを作成しました。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>HTML Parser Sample</title> </head> <body> <p id="id-p">ID=id-pの文字</p> <p class="class-p">class=class-pの文字1</p> <p class="class-p">class=class-pの文字2</p> <p class="class-p">class=class-pの文字3</p> </body> </html>
Program.csに以下のusigを追加して、AngleSharpを使えるようにします。
using AngleSharp.Html.Parser;
それでは簡単なパースをしてみます。
idを指定しタグの値を取得する
// htmlファイルを読み込む var html = File.ReadAllText("html_parser_sample.html", System.Text.Encoding.UTF8); // HTMLParserのインスタンス生成 var parser = new HtmlParser(); // htmlをパースする var doc = parser.ParseDocument(html); // idを指定してElement取得 var idP = doc.GetElementById("id-p"); Console.WriteLine("GetElementByIdを使って[id-p]の値取得 : {0}", idP.TextContent);
実行結果
タグの値が取得できました。
classを指定してタグの値を取得する
// htmlファイルを読み込む var html = File.ReadAllText("html_parser_sample.html", System.Text.Encoding.UTF8); // HTMLParserのインスタンス生成 var parser = new HtmlParser(); // htmlをパースする var doc = parser.ParseDocument(html); // classを指定してElementを取得 var classpList = doc.GetElementsByClassName("class-p"); foreach (var c in classpList) { Console.WriteLine("GetElementsByClassNameを使って[class-p]の値取得 : {0}", c.TextContent); }
実行結果
指定したクラスの値が全て取得できました。
QuerySelectAllを使ってclassを指定してタグの値を取得する
// htmlファイルを読み込む var html = File.ReadAllText("html_parser_sample.html", System.Text.Encoding.UTF8); // HTMLParserのインスタンス生成 var parser = new HtmlParser(); // htmlをパースする var doc = parser.ParseDocument(html); // QuerySelectorAllでclassを指定してElementを取得 var elements = doc.Body.QuerySelectorAll("p.class-p"); foreach (var e in elements) { Console.WriteLine("QuerySelectorAllを使って[class-p]の値取得 : {0}", e.TextContent); }
実行結果
一つ前の実行結果と同じ結果が得られました。
上記以外にも沢山機能はありますが、今回は上記3パターンを実装してみました。
また機会あればご紹介したいと思います。
全体のソースコード一式は以下に置きました。
github.com