Visual StudioでのC#プログラミング入門【Webスクレイピング】
Webから自動で情報を取ってこれると、何かと捗ります。そこでC#でスクレイピングする方法について調べました。
関連記事
スクレイピングライブラリ
スクレイピングライブラリの種類
C#のスクレイピングライブラリは以下の2つが有名なようです。
- AngleSharp
- Html Agility Pack
色々調べるとAngleSharpの方が使いやすそうだったので、AngleSharpを使用していきます。
AngleSharpのインストール手順
「プロジェクト」→「NuGetパッケージの管理」を選択します。
※新規プロジェクトの作成方法はこちらをご覧ください。
「参照」タブを選択し、検索ボックスに「AngleSharp」を入力すると、AngleSharpが表示されますのでインストールします。
インストールされると、ソリューションエクスプローラーにAngleSharpが表示されます。
スクレイピング手順
AngleSharpを使用したスクレイピングの手順について説明します。
htmlの取得
はじめにhtmlを取得します。以下、サンプルプログラムです。
using AngleSharp; string strUrl = "https://shimazoh.hatenablog.com/entry/cs-vs-howto-basic/"; var config = Configuration.Default.WithDefaultLoader().WithDefaultCookies(); var context = BrowsingContext.New(config); var document = await context.OpenAsync(strUrl); Console.WriteLine(document.ToHtml());
要素の取得
htmlから要素を取得します。例えばタイトルやh2タグを取得する場合は、以下のようなプログラムになります。
using AngleSharp.Html.Parser; var parser = new HtmlParser(); var doc = parser.ParseDocument(strHtml); //上記で取得したhtml Console.WriteLine(doc.Title); //タイトル var h2Nodes = doc.QuerySelectorAll("h2"); //h2タグ foreach(var h2Node in h2Nodes) { Console.WriteLine(h2Node.TextContent); }
その他の要素の取得方法については、こちらのサイトにプロパティ・メソッドがまとめられています。
サンプルプログラム
以上をまとめると、以下のようなプログラムになります。
using AngleSharp; using AngleSharp.Html.Parser; namespace SampleNS { public class Sample { static void Main() { string strUrl = "https://shimazoh.hatenablog.com/entry/cs-vs-howto-basic/"; Task<string> task = fetchStrHtml(strUrl); var parser = new HtmlParser(); var doc = parser.ParseDocument(task.Result); Console.WriteLine(doc.Title); //タイトル var h2Nodes = doc.QuerySelectorAll("h2"); //h2タグ foreach(var h2Node in h2Nodes) { Console.WriteLine(h2Node.TextContent); } } private static async Task<string> fetchStrHtml(string strUrl) { var config = Configuration.Default.WithDefaultLoader().WithDefaultCookies(); var context = BrowsingContext.New(config); var document = await context.OpenAsync(strUrl); return document.ToHtml(); } } }
実行すると以下のようにタイトルとh2タグのテキストが出力されます。