C#のスクレイピングライブラリはHtml Agility Packがメジャーですが、昔使った感じだとなんか微妙なので(XPathとかだるい)他のライブラリを探してみたらAngleSharpってのが良さそうなのでこちらを使ってみました。ちなみに僕が運用しているみんなの洋楽ランキングでは、情報の収集と自動化にAngleSharpを使っています。
mygkrnk.com
AngleSharpをダウンロードします。
dotnet add package AngleSharp --version 0.9.10
余談ですが、メジャーバージョンが出ていない理由は.net coreの進みが早くてライブラリが追っついていないようです。作者はこう嘆いています。
One of the greatest killers was Microsoft's ever growing change
最大の殺人者の1人は、マイクロソフトの絶え間ない変化(翻訳ママ)
killersってすげー表現だな、どういうニュアンスで言ってんだろ?
Request for stable release (=version 1.0) · Issue #709 · AngleSharp/AngleSharp · GitHub
htmlをパースする
htmlは適当に取ってきてください。
var parser = new HtmlParser ();
var doc = parser.Parse (html);
属性を取得
今回はみんなの洋楽ランキングのいいね数を取得します。一番最初に取得するいいね数なので10位のいいね数が取得されます。
これ
var likeApp = doc.GetElementsByClassName ("like-app"); var count = likeApp.First().Attributes["react-prop-counts"].Value; // count : "5"
InnerHtmlを取得
せっかくなんで曲名で検索します。
var enrryTitles = doc.GetElementsByClassName ("entry-title"); var title = enrryTitles.Where(x => x.InnerHtml.Contains("In My Feelings")).First().InnerHtml; // title : <a href=\"/music/784\">In My Feelings</a>
HtmlAgilityPackに比べてめちゃめちゃ使いやすくなってるので、スクレイピングを検討している人は試してみてはどうでしょうか。まだまだいろんなやり方はあるので、ドキュメントを見てください。一応、調べてる最中にタラタラ書いたコードをGithubに上げたので参考になれば。個人の趣味ブログなのですげーテキトーにコード書いてますのでご注意を。
github.com