修行の場

知人が言っていました。これは修行だと。

Scrapyを使ったクローラ開発

アーキテクチャ

実際のコードの書き方は公式DocやQiitaにたくさん書かれているので省きます。 ここでは主にアーキテクチャや提供されている機能をさらっと見ます。

クローラ作成フレームワークScrapyのアーキテクチャを見ていきます。

Scrapyは下の図のようなアーキテクチャになっています。 クローラを書きたいユーザはSpider, Item Pipelineを定義すると最低限データのクローリングができます。SpiderはHTTPのレスポンスのようなものを受け取り次にたどるべきWebサイトと収集対象の収集をします(Scrapyでは収集対象をItemと呼んでいます)、Item Pipelineはデータに前処理やバリデーションをかけて保存する役割とされています。 ScrapyとItem Pipelineが分離されていることで、保存方法と収集方法を粗結合にできるメリットがありそうです。それすら必要なくて、スケジューラと並列ダウンロードなどの機能だけ使いたければ、Spiderに全部処理を書いてしまえば良いと思います。

arch

機能

ダウンローダ

ドキュメントには明示されていないませんが、設定ファイルの説明から推測するに、少なくともつぎの機能が提供されています。   * 並列ダウンロード * IPごと * ドメイン名ごと * 並列ダウロード制限数 * タイムアウト * 同ドメイン or 同IPに対するダウンロード可能のディレイ * 一様分布で設定値の前後50%から

スケジューラー

  • ダウンロード優先度
    • 深いURL優先(DFS)
    • 浅いURL優先(BFS)
  • キューの実装の変更

その他のライブラリ

フレームワーク以外にも、ライブラリ的な立ち位置で使える

  • Link extractor:  Responseからリンクを抽出してくれるもの
  • Item Loader: XPathでHTMLないのデータと構造データとの関係を定義するためのクラス
  • Feed Exports: JSONcsv形式で保存

なども提供されています。