2

私の状況を説明させてください。

1,000 万ページの URL のリストがあります。これらのページをスクレイピングして、生の html としてデータベースに保存します。

今のところ、私はそれらのページを破棄するために CURL を使用しています。にアクセスするたびにindex.php、1 ページの URL が破棄され、データベースに保存されます。

今思えばindex.phpブラウザで1000万回アクセスするのは無理だと思います。

使えdo while loopました。しかし、そのタスクを完了するには、とてつもなく時間がかかると思います。そしてメモリの問題も。

それで、誰かが私を正しい方向に向けて、この作業を楽にすることができます.

私は Linux VPS サーバー1GB RAMと WHM/cPanel を所有しています。

PS:CRONを検討しました。しかし、cronで時間を定義する必要があります。cron を使用して 1 分ごとにスクリプトを実行しても、完了することしかできません1440 urls in 24 hoursatleast 100,000では、cron を使用して 1 日で URL を完成させるアイデアを教えてもらえますか?

4

2 に答える 2

4

必要なのは、高速フェッチ ライブラリのようなものwgetか、面倒なcurl作業を行うためのものです。PHP は、これらのプログラムが処理する作業のリストを作成できますwget。特に、ファイルに指定されたリストから URL のコンテンツを取得して保存するオプションがあります。

ブラウザーから実行される PHP スクリプトは、妥当な時間内に終了する必要があります。そうしないと、タイムアウトになります。通常、このようなバックグラウンド プロセスには使用されません。

crontab新しい作業を確認し、新しいwgetプロセスを起動するために使用できます。一度に 1 つの URL だけを取得する必要がある理由はありません。リストされたファイルにある数だけ実行できます。

たとえば、cron ジョブは次のようなスクリプトを開始できます。

#!/bin/sh

for list in "/tmp/*.urls"
do
  wget -i $list -b
end

もちろん、wget微調整できるオプションはたくさんあります。

PHP アプリが確実に保護されている場合cronは、後でバックグラウンドで実行されるシェル スクリプトを作成することもできます。このようにして、各ファイルの正確な宛先を指定できます。

于 2013-05-03T03:51:59.533 に答える
3

良いブロードバンド プランがあることを願っています。=)

を使用した簡単な答えcronは、少なくとも 70 個の URL をスクレイピングするシェル スクリプトを実行することです。これは、1 日あたり少なくとも 100,000 という目標を達成します (cron が毎分起動する場合)。

このwgetコマンドは、おそらくページを取得するために必要なものです。

また、頻度の低いタイムスケールで IP アドレスを解決する別のプロセスを用意することをお勧めします。ページにアクセスするたびに名前の検索を行う必要はありません。 wgetIPアドレスを与えると、もっと幸せになります。

[編集] ただし、単なる考えです。順番に行う場合、各ページを 1 秒未満でスクレイピングできる可能性はほとんどありません。そのため、URL ごとに新しいプロセスをフォークしたい場合があります。&これは、wget呪文を使ってジョブをバックグラウンドにするのと同じくらい簡単です。ある種の健全性を提供するために、一度に 10 個のバッチを生成してから 5 秒間スリープさせます。

于 2013-05-03T03:43:29.710 に答える