3

ほとんどの場合、Google で質問の答えを見つけますが、今は行き詰まっています。私は、最初に Web サイトのユーザー名をスクレイピングし、次にユーザーのすべての詳細を取得するスクレイパー スクリプトに取り組んでいます。2 つのスクレイパーが関係しています。最初のスクレイパーはメイン ページを通過し、最初の名前を取得し、次にそのプロフィール ページの詳細を取得してから、次のページに進みます...私がスクレイピングしている最初のサイトの合計は1 つのメイン ページに 64 名が表示され、2 番目のページには 4 ページに 365 名以上の名前が表示されます。

最初のものはうまく機能しますが、2番目のものは500内部エラーが発生し続けます。私はスクリプトを制限して、いくつかの名前だけをスクレイピングしようとしましたが、これは魅力のように機能するので、スクリプト自体は問題ないと確信しています! 私のphp iniファイルのmax_execution_timeは1500に設定されているので、それも問題ではないと思いますが、エラーの原因となる何かがあります...たとえば、10個の名前ごとにスリープコマンドを追加すると状況が解決するかどうかはわかりませんが、さて、私は今それを試しています!

ですから、この状況を解決するのに何が役立つか考えている人がいれば、助けていただければ幸いです!

前もって感謝します、z

4

2 に答える 2

0

サポートによると、メモリを最大 4 ギガバイトまで増やすことができます

典型的なお金ガウジング サポートの回答です。現金を節約し、より良いコードを書くことができます。なぜなら、あなたがしていることは、厳しいリソース制限があっても、無料の Web ホスティング プロバイダーの共有サーバーから簡単に実行できるからです。

最初に 1 つのジョブとしてユーザーのリストを取得/更新してから、別のジョブとして小さなバッチで詳細を抽出します。SQL BULK Insert コマンドを使用して、データベースへの接続を減らします。また、個々の INSERTS をループするよりもはるかに高速に実行されます。

ユーザー名と詳細は基本的に静的リストであるため、すべてのデータをリアルタイムで取得する必要はありません。詳細を取得する cronjob を少しかじるだけで、最終的にはスクリプトが着信リストに追加される新しいユーザー名に追いつき、より高速で無駄のない、より効率的なシステムになります。

于 2012-06-08T01:33:51.490 に答える
0

これは間違いなくメモリの問題です。変数の 1 つが、php.ini で定義したメモリ制限を超えて大きくなっています。大量のデータを保存する必要がある場合は、実行時に結果をすべてメモリに保存するのではなく、結果を定期的にファイルや DB に書き込む (そして変数を解放する) ことをお勧めします。

  1. ユーザーの詳細を取得する
  2. ファイルにダンプ
  3. クリア変数
  4. 繰り返す..

実行時間を無限に設定し、vars を file/db に定期的にダンプすると、php スクリプトは何時間も正常に実行されます。

于 2012-06-07T22:12:50.873 に答える