0

これは非常に単純なことのように思えますが、その方法を実際に説明している議論は見つかりません。

と でスクレーパーを構築していMongoDBますNode.js。1 日 1 回実行され、数百の URL とレコードがデータベースにスクレイピングされます。例:

  1. スクレイパーは、「スタック オーバーフロー」のこの Google 画像検索ページに移動します
  2. Scraper は、このページから上位 100 個のリンクを取得します
  3. リンクのurlimg srcpage titleの記録がdomain nameMongoDB に保存されます。

これが私が達成しようとしていることです:

  • スクレイピングされた100のリンクに画像がなくなったら、データbqseから削除したい
  • mongodb画像がスクレイピングされた 100 個のリンクに残っているが、詳細が変更されている場合 (新しいページ タイトルなど)、レコードを見つけて更新したいと考えています。
  • 画像がまだ存在しない場合は、新しいレコードを作成したい

私が少し問題を抱えているのは、スクレイピングされていないエントリを削除することです。これを達成するための最良の方法は何ですか?

これまでのところ、私のコードはエントリが存在するかどうかを正常にチェックし、それらを更新します。私が問題を抱えているのは、関連性がなくなったレコードを削除することです。ペーストビンのリンクはこちら:

http://pastebin.com/35cXcXzk

4

2 に答える 2

1

アイテムにタイムスタンプを付ける (そしてスクレイプごとに更新する) 必要があり、しばらく更新されていないアイテムを定期的に削除するか、アイテムを特定のクエリに関連付ける必要があります。後者の場合、以前にクエリに関連付けられていたすべての項目を収集し、新しい結果が得られたときにマークを付けます。最後にリストからマークされていない項目は削除する必要があります。

于 2013-06-06T04:18:14.663 に答える
0

もう 1 つの可能性は、mongodb 2.4 で新しい TTL インデックス オプションを使用して、ドキュメントの存続時間を設定できるようにすることです。

http://docs.mongodb.org/manual/tutorial/expire-data/

これにより、サーバーは時間の経過とともに期限切れになり、コストのかかる大量の削除を実行する必要がなくなります。

もう 1 つの最適化は、コレクションに 2 の累乗オプションを使用して、書き込み、削除サイクルの作成によるメモリの高度な断片化を回避することです。

http://docs.mongodb.org/manual/reference/command/collMod/

于 2013-08-12T14:04:55.157 に答える