我正在抓取一个结构如下的网站:
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缓存控制指令。每个请求及其相应的响应都被缓存。当相同的时候再次看到请求,返回响应而不传输