スクレピングの技術のあれこれ
ここでは主にパース方法の優先度を挙げる
結論
以下の優先度でパースできないかを探る
- JSON
- CSSセレクタ
- XPath
- 正規表現
まずはJSONがあればパースが一番楽
今どきはJavaScriptのフレームワークを使って画面を描画することが多い。
そうするとコンテンツの本体はJSONで降ってくることも多い。
JavaScriptで描画されるから、Seleniumを使わないと駄目だよねという判断もあるのかも知れないけど、実際にはJSONをGETするだけでよいケースは多い。
次にCSSセレクタ
ちゃんとしたデザイナーが入れば、CSSのクラスやIDは「コンテンツの意味に応じてネーミング」している。そしてデザイもCSSセレクタが書きやすいように書いている。なのでCSSセレクタでパースするのが楽になってるはず。
次にXPath
XPathは本来的にはXMLをパースするためのものなので、HTMLをパースするのに使うと、ちょっと表現が冗長になる。ただCSSセレクタに比べるとちょっとだけ機能が多い。テキストノードに含まれるテキストの部分一致で要素を取得したい時にはXPathが便利。
正規表現
テキストから値を部分的に取得するなら正規表現でかける。ただし読みづらい。上記の方法が全部使えなかった時の最後の手段。またパース後のテキストから、部分文字列を取り出す時には当然正規表現で取り出す。