3

現在、Mechanize と get() メソッドを使用して各サイトを取得し、各メインページの content() メソッドで何かを確認しています。私は非常に高速なコンピューター + 10Mbit 接続を使用していますが、それでも 11K サイトをチェックするのに 9 時間かかりました。これは受け入れられません。問題は、明らかにページを取得する必要がある get() 関数の速度です。チェックする必要があるのはメインページのhtmlだけなので、何かを無効にするなど、高速化する方法はありますか。

ありがとう、

4

2 に答える 2

14

逐次ではなく並列でクエリを作成します。これを行う必要がある場合は、ページを取得するプロセスをフォークします。Parallel::ForkManager、LWP ::Parallel::UserAgentWWW:Curlなどが役立つ場合があります。私はMojo::UserAgentを好む傾向があります。

于 2010-09-10T07:02:23.403 に答える
7

WWW::Curl(具体的には WWW::Curl::Multi )を使用します。1 日に 1 億以上のページをクロールするために使用しています。このモジュールは 上のシン バインディングであるlibcurlため、少し C っぽい感じがしますが、高速で、libcurl が実行できるほとんどすべてのことを実行します。

LWP::Parallel::UA の使用はお勧めしません。これは少し遅く、モジュール自体がよく考えられていないためです。クローラーを書き始めたとき、最初は LWP::Parallel::UA をフォークすることを考えていましたが、内部を調べたときにそれをやめることにしました。

免責事項: 私はWWW::Curlモジュールの現在のメンテナーです。

于 2010-09-10T13:03:12.540 に答える