C#でブラウザを使用しないWebスクレイピング
この記事は以下のような方におすすめです。
- C#を使ってWebスクレイピングしたい
- Webブラウザ無しでスクレイピングしたい
ブラウザ無しのスクレイピングを紹介しようと思った背景
以前VBAとC#でブラウザを使用したスクレイピングを紹介しましたが
ブラウザを使用したスクレイピングはやはり速度の面で劣るので
ブラウザを使用しない方法はないのかと言うことで調査を行い
紹介+自分の備忘録として取り上げてみようと思った次第です。
準備
VisalStudioがインストールされていることを前提に準備から説明していきます。
まず、C#でブラウザ無しのWebスクレイピングをするにあたりAngleSharpというライブラリを使用するので
NuGetパッケージマネージャを使用してパッケージをインストールしましょう。
パッケージのインストールが完了したら次は参照設定です。
今回は以下の2つのライブラリを参照設定してスクレイピングを行います。
- AngleSharp.Html.Parser
- AngleSharp.Html.Dom
バージョンは最新の物を入れておけば問題ないはずです。
AngleSharpで実践Webスクレイピング~スクレイピング用メソッド準備~
さて、準備が終わったところでいよいよスクレイピング用のコードを書いていきたいと思います。
以下のようにまずはスクレイピング用のメソッドを用意します。
今回はとりあえず指定したURLのHTMLを取得する処理を書いてみました。
管理人の用意したメソッド
次はいよいよスクレイピングするサイトの解析です。
今回はリクナビNEXTの求人情報を取得してみましょう。
AngleSharpで実践Webスクレイピング~サイトの解析~
スクレイピングする対象を決めたら次はサイトの解析を行います。
今回はリクナビNEXTの求人情報の取得が目的なのでリクナビNEXTをWebブラウザで解析しましょう。
ここではChromeを使って解析していきます。
Chromeは今選択している箇所のHTMLを表示できたりとかなり便利なのでおすすめです。
F12キーを押し、Webブラウザをデベロッパーモードに切り替えます。
今回は企業名、事業所、企業のホームページURLを抽出して
CSVファイルに最新の50件を出力します。
まずは解析対象はこのページ
まずは各企業の情報が載っているブロックごとに情報を抽出しましょう。
そこからさらに企業情報の詳細へとURLをたどっていきます。
デベロッパーモードで調べていくと各情報に必要なフィールド名は
- 各企業情報テーブル→rnn-jobOfferList__item rnn-group rnn-group–s js-kininaruItem
- 企業名→rnn-sideOfferInfoMain__textWrapper__companyName
- 事業所→moreLine
- ホームページURL→rnn-linkText rnn-linkText–blue js-sendParams
であることがわかります。
※注 2つ目以降は各企業情報テーブルから求人詳細等のボタンを押して表示されるページ
今回はほとんどがclassタグが設定されていますね。
classタグは複数ある可能性もあるためそのあたりに注意してコードを書いていきましょう。
タグを指定して情報を取っていきましょう。
AngleSharpではCSSセレクタを使用して情報を取得することもできますが
ここではオーソドックスにChildrenプロパティをたどって目的の情報を取得する処理とします。
参考コード
このソースコードは管理人が作成したフォームで実行する用のコードの一部ですので適時コピペ等をして
利用してください。
このコードを導入して皆さん無事に求人情報を取得できたでしょうか?
何か不備があればコメント欄で教えていただけると幸いです。
最後に
今回はブラウザを使用しないスクレイピングを紹介しました。
やはり、ブラウザの起動・表示待ちが発生しない分高速に情報が取得できますね。
ページの更新の必要がないなど静的なページからの情報取得はこの方法を採用していこうと思います。
このWebブラウザを使用しないスクレイピングを身に付けてみなさんも楽にWebから情報を仕入れましょう。
それでは今回はこの辺で
