時々、社内で「このサイトに表示されているデータが欲しいんだけど」「毎回サイトを開いて確認するのがしんどくなってきた」と言ったような意見を聞きます。
ここでエンジニアならスクレイピングツールを作って自動化してあげようと考えます、
しかし、サイトのスクレイピングでは以下の問題が発生します。
「サイトの構成が古すぎてデータを上手く取得することができない」
「サイトのレイアウトの更新頻度が多くて取得箇所の指定が大変」
これ以外にも多くの問題が存在しております。
今回は「C#」と「Chrome ブラウザ」を利用した、
簡単に作れるスクレイピングプログラムを紹介したいと思います。
今回の目的は「なるべく簡単に作成する」となっております。
そこで通常のスクレイピングでは
「XPath」(XMLに準拠した文書の特定の部分を指定する言語構文)や
「Selector」(HTML文書内から処理対象とする要素の選択構文)
という構文を自分で書かないといけないのですが、
この作業は「Chrome ブラウザ」に搭載されている「デバッグツール」で自動作成する事が出来るので、
後は作成された構文をソースコードに張り付けるだけで実装できます。
前提知識
必要なステップは大きく分けて2つ
- ChromeでSelector文の作成
- プログラムの実装
プログラムで利用するSelector文の作成
ChromeでSelector文の作成
スクレイピングテストのサイトで対象のデータに対して、
右クリックを行いサブメニューから「検証」を選択します。
「デバッグツール」画面では対象のデータに該当する「HTMLタグ」の行に対して、
右クリックを行いサブメニューから「Copy」の「Copy selector」を選択します。
「Selector文」をメモ帳などにコピーしてください。(プログラムで使います)
プログラムの実装
メインプログラムの作成
メインプログラムを実装していきます。
プログラムを実行する上で必要になるNUGETを追加してください。
AngleSharp
プログラム内の「取得対象の設定」の変数に対しては、
「htmlUrl」にスクレイピング対象サイトの「URL」を指定してください。
「querySelector」にスクレイピング箇所の「Selector文」を指定してください。
まとめ
「AngleSharp」を利用すれば5行のソースコードでスクレイピングを実装することができます。
「Chrome ブラウザ」の「デバッグツール」を利用すれば、スクレイピング対象の「Selector文」を自動生成することができるので構文を書かなくて済みます。
構文を一瞬で作成することが出来るという事は、
サイトが頻繁にレイアウトを変えても、
タグの構造が整理されていなくても、
すぐにプログラムを更新して対応することが可能になります。