3


3

Pythonでのマルチプロセススパイダーの設計

私はPythonでマルチプロセススパイダーに取り組んでいます。 リンク用に1ページをスクレイピングし、そこから作業を開始する必要があります。 具体的には、トップレベルのページには、カテゴリのリスト、それらのカテゴリのイベントの第2レベルのページ、イベントへの参加者の最終的な第3レベルのページが含まれます。 カテゴリ、イベント、参加者の数を予測することはできません。

このようなクモをどのように設計するのが最適か、特に、クロールがいつ終了するかを知る方法(関連するすべてのページを検出して取得するまで続けることが予想されます)については、少し迷っています。

理想的には、最初のスクレイプは同期であり、他のすべては非同期であり、並列解析とDBへの追加を最大化しますが、クロールがいつ終了するかを把握する方法に固執しています。

並列プロセス、特に上記の問題に関して、スパイダーをどのように構成することを提案しますか?

2 Answer


2


非同期(http://twistedmatrix.com/trac/[Twisted]に基づく)Webスクレーパーであるhttp://scrapy.org/[Scrapy]を調べてください。 あなたのタスクにとって、クモのXPath記述は非常に簡単に定義できるようです!

がんばろう!

(本当に自分でやりたい場合は、各ページがヒットしたかどうかを追跡する小さなsqlite dbを持つことを検討してください…​ または、適切なサイズであれば、メモリ内で実行してください…​ 一般的に、ツイストはヒットの友達かもしれません。)


1


訪問するアイテムをhttp://docs.python.org/library/queue.html[queue]に配置し、ワーカーでキューを使い果たし、ワーカーが訪問する新しいアイテムを見つけてキューに追加すると仮定します。

すべてのワーカーがアイドル状態になり、訪問するアイテムのキューが空になったら終了です。

ワーカーがキューのhttp://docs.python.org/library/queue.html#Queue.Queue.task_done [task_done()]メソッドを利用すると、メインスレッドはhttp://docs.python.org/ library / queue.html#Queue.Queue.join [join()]空になるまでブロックするキュー。