0

PHP cURL を使用して構築された、mySQL データベースに関連付けられたシーン スクレーパーが既にあります。現在持っているもの (URL/製品を入力して [Go] をクリックするフォーム) ではなく、毎週更新する必要がある製品を保存しました。

私の最初の考えは、PHPファイルで30分ごとに標準のcronを使用することです。

ソース サイトに実際にアクセスする PHP スクリプトの遅延 (つまり 0 ~ 20 分) の 2 つをランダム化したいので、プロセスのタイミングはランダムになります。次に、ターゲットのアイテム/ページにランダムにアクセスしたいのですが、リストを再度循環する前に、それらすべてを毎週および/または一貫して取得してください。

タイマーはかなり簡単で、データを保存する必要はありませんが、この方法でアイテム/URI を追跡するにはどうすればよいですか? データをクリアするために2番目のcronを考えていましたが、最初のcronはインクリメントするだけです。しかし、まだ更新済みのフラグを設定する必要があり、このデータを保存する場所と方法を選択するのに十分な知識がありません。

私はHTML5オプションでmySQLを使用しており、Codeigniterを使用しているため、SQLiteにオプションとしてデータを保持することもできます..それが理にかなっている場合はCookieとともに. この部分についていくつか質問があります。毎回必要なものをデータベース (mySQL) に照会しますか、それとも週に 1 回 JSON ファイルに保存して実行しますか? これは明らかに、すでに処理されたものにフラグを立てる場所に依存および/または決定します。

4

1 に答える 1

0

MySQL データベースにスクレイピングするアイテムのリストがあります。アイテムが最後にスクレイプされた時間を保持するフィールドがあることを確認してください。

次のワークフローで cron ジョブを毎分実行するように設定します。

  1. スクリプトの前回の実行が完了していることを確認します (手順 4 を参照)。そうでない場合は、終了します。
  2. 最後にアイテムをスクレイピングした時間を確認してください。
  3. 十分な時間が経過したことを確認します (手順 9 を参照)。そうでない場合は、終了します。
  4. 処理中であることを示す値をどこかに設定します (したがって、後続の実行のステップ #1 が認識されます)。
  5. スクレイピングするアイテムをランダムに選択します。(時間内にスクレイピングされていないものからn。)
  6. すべてのリクエストが常に正確に行われるわけではないことを確認するために、ランダムな秒間隔を遅らせます。
  7. それをこする。
  8. そのアイテムの最後に取得された更新時刻。
  9. 次の操作の前に待機するランダムな時間を設定します (したがって、後続の実行のステップ #3 が認識されます)。
  10. 処理していないことを示す値を設定します (したがって、後続の実行のステップ #1 が認識されます)。
  11. 終わり。

すべてのアイテムがスクレイピングされたら、変数を設定してバッチが完了した時間を保持しn、ステップ 5 で使用できます。

于 2013-03-18T18:43:31.360 に答える