1

次のような構造の Web サイトをスクレイピングしています。

Archive
    Article 1
        Authors
            Author 1
            Author 2
        Title
        Body
        Comments
            Comment 1
            Comment 2
    ...

の各著者にAuthorsは、独自のプロフィール ページがあります。問題は、著者が複数の記事を書いていることです。そのため、スパイダーがサイトをクロールするたびに、同じ著者のプロファイルを何度もスクレイピングすることになります。

Scrapy で作成者プロファイルをキャッシュするにはどうすればよいですか?

4

2 に答える 2

1

新しいキャッシュポリシーを実装する必要があると思います。ここを参照してください

HttpcacheMiddlewareも見てください

なぜそれが再び訪問したページに行くのか私はまだ混乱しています。彼らのドキュメントはデフォルトのポリシーのためにこれを言います

このポリシーは、HTTPCache-Controlディレクティブを認識していません。すべてのリクエストとそれに対応するレスポンスがキャッシュされます。同じリクエストが再度表示されると、インターネットから何も転送せずにレスポンスが返されます。

于 2013-01-25T05:24:36.520 に答える
1

次の例のように、重複フィルターを追加する必要があります。

from scrapy import signals
from scrapy.exceptions import DropItem

class DuplicatesPipeline(object):

    def __init__(self):
        self.author_ids_seen = set()

    def process_item(self, item, spider):
        if item['author_id'] in self.author_ids_seen:
            raise DropItem("Duplicate item found: %s" % item)
        else:
            self.ids_seen.add(item['author_id'])
            return item

ITEM_PIPELINES リストでその DuplicatesPipeline をアクティブにします。

ITEM_PIPELINES = [
    'myproject.pipeline.DuplicatesPipeline',
]
于 2013-01-27T03:32:29.037 に答える