web-dev-qa-db-ja.com

Scrapyをpyspiderに置き換えることはできますか?

私はScrapy Webスクレイピングフレームワークをかなり広範囲に使用してきましたが、最近、 pyspider という別のフレームワーク/システムがあることを発見しました。 githubページに、新鮮で、活発に開発され、人気があります。

pyspiderのホームページには、すぐにサポートされるいくつかの項目がリストされています。

  • スクリプトエディター、タスクモニター、プロジェクトマネージャー、結果ビューアーを備えた強力なWebUI

  • Javascriptページがサポートされています!

  • タスクの優先度、再試行、定期的、およびインデックスページの年齢またはマーク(更新時間など)による再クロール

  • 分散アーキテクチャ

これらはScrapy自体が提供しないものですが、 portia (Web UIの場合)、 scrapyjs (jsページの場合)および scrapyd (APIを介したデプロイと配布)。

pyspiderだけでこれらすべてのツールを置き換えることができるというのは本当ですか?言い換えれば、pyspiderはScrapyの直接の代替手段ですか?そうでない場合、どのユースケースをカバーしますか?

「広すぎる」または「意見に基づく」境界線を越えていないことを願っています。

21
alecxe

pyspiderとScrapyの目的は同じで、Webスクレイピングですが、それを行うことについての見方は異なります。

  • クモはWWWが死ぬまで決して止まるべきではありません。 (情報は変化し、データはWebサイトで更新され、スパイダーは最新のデータをスクレイプする能力と責任を持つ必要があります。そのため、pyspiderにはURLデータベース、強力なスケジューラー、@everyageなどがあります。)

  • pyspiderは、フレームワーク以上のサービスです。 (コンポーネントは分離されたプロセスで実行されています、lite-allバージョンもサービスとして実行されています。Python環境ではなくブラウザで、フェッチまたはスケジュールに関するすべてが必要です。起動パラメータやグローバル設定ではなく、APIを介してスクリプトによって制御され、リソース/プロジェクトはpyspiderなどによって管理されます...)

  • pyspiderはスパイダーシステムです。 (C/C++/Javaまたは任意の言語で開発された場合でも、パフォーマンスを向上させたり容量を増やしたりするために、任意のコンポーネントを置き換えることができます)

そして

  • on_start vs start_url
  • トークンバケット トラフィック制御vs download_delay
  • return json vs class Item
  • メッセージキューとPipeline
  • 組み込みのURLデータベースとset
  • 永続性とメモリ内
  • PyQuery +好きな3番目のパッケージと組み込みのCSS/Xpathサポート

実際、私はScrapyからあまり言及していません。 pyspiderはScrapyとは本当に異なります。

しかし、なぜ 自分で試してみてください ? pyspiderも fast で、使いやすいAPIを備えており、インストールせずに試すことができます。

26
Binux

私はscrapyとpyspiderの両方を使用しているので、次のことを提案したいと思います。

ウェブサイトが本当に小さい/シンプルな場合は、必要なものがほぼすべて揃っているので、最初にpyspiderを試してください

  • Webuiを使用してプロジェクトをセットアップします
  • オンラインコードエディタを試して、解析結果を即座に表示します
  • ブラウザで結果を簡単に表示
  • プロジェクトを実行/一時停止します
  • URLを再処理できるように有効期限を設定します

ただし、pyspiderを試してみて、ニーズに合わないことがわかった場合は、scrapyを使用するときが来ました。 --on_startをstart_requestに移行します-index_pageを解析に移行します-detail_ageをdetail_ageに移行します-self.crawlをresponse.followに変更します

その後、ほぼ完了です。これで、ミドルウェア、アイテム、ピップラインなどのスクラピーズの高度な機能を試すことができます。

4
Kai Huang