1

PHP での Web ページのクロールについて、ちょっとした質問があります。1 つの大きな e ショップで約 90,000 の製品をクロールする必要があります。PHPで試してみたのですが、1つの製品に2〜3秒かかり、それは悪いです。ヒント、より速く行う方法はありますか?たぶん C++ マルチスレッド版?しかし、HTTP リクエストの時間はどうでしょうか? つまり、PHPの制限ですか?ヒントをありがとう。

4

4 に答える 4

2

それは非常に漠然とした質問です。あなたが持っているコードのベンチマークを行ったとき、最も遅い部分はどこでしたか? ネットワーク転送時間でしたか?別の言語 (または複数のスレッド) を使用しても、それは変わりません。

ページの解析に時間がかかりましたか? どうやってやってるの?XML ライブラリを使用して DOM 全体を解析している場合、キーワード (または正規表現) を探すだけで済みますか? これは精度が低くなります (そして、ある意味では正確ではありません) が、おそらく高速です。

分析にどのアルゴリズムを使用していますか? 他のデータ構造はより良いパフォーマンスを提供しますか? 簡単な例の 1 つとして、配列の反復処理に多くの時間を費やす場合は、おそらくハッシュ マップの方が適切です。

PHP は複数のプロセスで実行できます。スクリプトの複数のインスタンスを一度に (異なるページで) 開始するとどうなりますか? 合計時間は減りますか?

最終的に、あなたは非常に一般的な問題を説明したので、非常に具体的な解決策を提供することはできませんが、PHP がこのタスクに不適切であるという固有の理由はありません。(使用している言語に関係なく)何が遅いのかを特定したら、それを修正する方法をより正確に説明できるはずです。

于 2012-07-07T20:25:35.690 に答える
1

PHPの問題ではないと思いますが、接続速度/コンピューターの速度に依存している可能性があります。ただし、PHP/cURL で速度の問題が発生したことはありません。

複数のスレッド (つまり、一度に複数の接続) を実行するだけです。cURL を使用することをお勧めしますが、それは私がそれに慣れているからです。

cURLでスクレイピングするために複数のスレッドに使用したガイドは次のとおりです。

スクリプトで誤ってサービス拒否の状況を引き起こさないように十分注意してください。しかし、あなたはすでにその可能性から離れていると確信しています。

于 2012-07-07T20:25:27.137 に答える
0

PHP が問題ではない可能性は 99%です。むしろ、eshop Web サーバーまたはその他のネットワーク遅延です。

私はこれを何ヶ月もやっているので、確かに知っています。コードに正規表現がたくさんある場合でも、PHP ではデータのスクレイピングが非常に高速です。

これを高速化するソリューションは?ディスク容量が少ないため、コマンド ライン クローラーを使用してすべての Web サイトを事前にキャッシュします。curl はこれを行うことができ、httrackも同様です。クロールを行う PHP よりもはるかに高速で安定しています。

次に、PHP に単独で解析を行わせます。うまくいけば、PHP が 1 分間に数十ページをむさぼり食うのを見るでしょう。これが役に立てば幸いです :)

于 2012-07-07T20:46:40.267 に答える
0

プログラムの実行速度が遅い場合は、プロファイラーを実行して、実行速度が遅い理由を分析することをお勧めします。

このアドバイスはどの言語にも当てはまりますが、PHP の場合、必要なプロファイラー ソフトウェアはxDebugと呼ばれます。

これは PHP 拡張機能であるため、サーバーにインストールする必要があります。ISP のサーバーで実行している場合は、これを行う権限がない可能性がありますが、いつでもローカル PC に PHP と共にインストールして、そこでテストを実行できます。

xDebug をインストールしたら、PHP.ini でプロファイリング機能を有効にし (手順については xDebug のドキュメントを参照)、プログラムを実行します。次に、プロファイラー ファイルを生成します。これを使用して、プログラムの実行内容を分析できます。

KCacheGrindをダウンロードして分析を実行します。これにより、コール ツリー情報が生成され、プログラムの実行時に何が起こったか、および各関数呼び出しにかかった時間が正確に示されます。

この情報を使用して、実行速度が遅い関数呼び出しを探し、何が起こっているのかを突き止めることができます。通常、コードが遅くなる理由は、何かが書かれた方法におけるある種の非効率性です。xDebug はそれを見つけるのに役立ちます。

それが役立つことを願っています。

于 2012-07-07T20:34:14.930 に答える