Help us understand the problem. What is going on with this article?

100サイト以上のクローラ・スクレイパを効率的に作る方法

More than 3 years have passed since last update.

概要

  • 急遽100サイト以上のクローラを作ることになりました。
  • サイトの数だけプログラムを書いていると保守で死ぬ😱ため ソースコードを書かなくても大量のクローラ・スクレイパを作成できる方法 を探しました。
  • といっても、何もせずにクローリングできるわけではなく、要は サイト構成に依存する部分は別ファイルに外出しして、ソースコードは少なくしようぜ! という話です。
  • ハードコーディングを辞めることで、普段ソースコードを書かない人でもクローラ作成できるというメリットもあります👼

1. XPathを使う

XPathとは

  • XML Path Languageの略
  • XML文章の中の特定の要素や属性の位置を指定するためのルール
  • これを使えば、サイトの構成ごとに異なる「どの要素を抽出するか」のルールのみ外部ファイルにもたせて、それを読み込むことで 処理の大部分を共通化できる😊
  • XPath はW3Cで規定されているため、対応しているツールがたくさんありエコシステムに乗れるのも魅力

XPathの記述ルール

お目当ての要素のXPathを取得する方法

XPath Helperを使い2015年の総ストック数を取得するXPathを取得する
* XPath HelperをMacで使うときのショートカットキー | ダーフク.com

XPathを使ったスクレイピング

  • 各言語にXPathに対応したライブラリがあるため、それを使ってXPathで指定した要素を取得します。
  • ハマり所としては、ChromeやFireFoxなどのブラウザのデベロッパーツールでXPathを取得すると、元のソースコードに存在しない<tbody>タグが勝手に挿入されるというブラウザの仕様があります。(たぶん、<tbody>タグが合ったほうが表示上都合が良いのでブラウザが勝手に挿入してる)

2. 正規表現を使う

  • XPathの弱点は、javascriptやメタデータなどブラウザに表示されない要素を取得しにくい点です。
  • この点を補うために、htmlをまるっとただの文字列として扱い、正規表現で取りたい要素を取得します

お目当ての要素を取得できる正規表現を取得する方法

正規表現を使ったスクレイピング

  • こちらも各言語で実装されている正規表現メソッドに従い抽出処理を書きます

3. 外部サービスを使う

  • Kimonoサービス終了しました
    kimono でスクレイパ作成中の画面

    • かんたんにクローラ・スクレイパを作成できるWebサービス。
    • まだbetaだったり、料金体系が不明だったりで今回は採用を見送りました。が、限られた回数しか行わないようなクローリング・スクレイピングだったらこれで十分かもしれません😊

まとめ

  • サイト固有の情報はなるべく外出しして、ソースコードの行数は少なくしたい👼
  • XPathを使えば、特定の要素を一意に記述できる。ツールも充実してる👍
  • 正規表現を使えば、XPathで取得しにくい変数の値も取得できる。
  • 今回は取得した値をDBなどに入れやすい形に変換する部分は省きましたが、枠組みができていれば変換処理も極力共通化できそう。。
  • お気づきの点がございましたら、気軽にコメントください!

参考

ohkawa
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした