Scrapy中的项目缓存



我正在抓取一个结构如下的网站:

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

Authors中的每个作者都有自己的个人资料页面。问题是作者写了多篇文章,所以当我的蜘蛛在网站上爬行时,我最终会一次又一次地抓取同一作者的个人资料。

我如何缓存作者配置文件与Scrapy?

您应该像下面的例子一样添加duplicate过滤器:

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',
]

我认为您需要实现新的缓存策略。看到

还可以查看httpachemmiddleware

我还是不明白为什么它又转到访问过的页面了。他们的文档对默认策略

是这样说的

该策略不知道任何HTTP缓存控制指令。每个请求及其相应的响应都被缓存。当相同的时候再次看到请求,返回响应而不传输

最新更新