3

次のケースを解決するのを手伝ってください:

典型的な分類されたカテゴリ ページを想像してみてください。商品一覧ページです。アイテムをクリックすると、内部ページに着陸します。現在、私のクローラーはこれらすべての URL をスクレイピングし、これらの URL をさらにスクレイピングしてアイテムの詳細を取得し、最初のシード URL が次のページであるかどうかを確認します。ある場合は、次のページに移動して同じことを行います。これらのアイテムをSQLデータベースに保存しています。

3 日後、シード URL に新しいアイテムがあり、新しいアイテムだけを破棄したいとします。考えられる解決策は次のとおりです。

  1. 各アイテムをスクレイピングするときに、データベースをチェックインして、URL が既にスクレイピングされているかどうかを確認します。もしそうなら、私は単に Scrapy にクロールを停止するように依頼します。問題 : 毎回データベースにクエリを実行したくありません。私のデータベースは非常に大きくなり、最終的にクロールが非常に遅くなります。

  2. 最後にスクレイピングした URL を保存して最初に渡すようにしていますが、この last_scraped_url を見つけた瞬間にクローラーを停止させるだけです。クロール URL の非同期性を考慮すると、シード URL から受け取った順序と同じ順序でスクレイピングされないため、不可能です。(整然とした方法ですべての方法を試しましたが、それはまったく不可能です)

誰でも他のアイデアを提案できますか? 私は過去3日間、それについて苦労してきました。

返信ありがとうございます。

4

1 に答える 1