请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Scrapy中,入队和去重哪个先进行?

老师好,我在分析scrapy的schedule源码中对于一段代码有疑惑,代码如下:

def enqueue_request(self, request):
    """
    Request磁盘入队或者内存入队
    :return: bool
    """
    if not request.dont_filter and self.df.request_seen(request):  # 如果指纹过滤器启动并且request已经被给予指纹 打印日志 等待先去重
        self.df.log(request, self.spider)
        return False
    dqok = self._dqpush(request)
    if dqok:
        self.stats.inc_value('scheduler/enqueued/disk', spider=self.spider)
    else:
        self._mqpush(request)
        self.stats.inc_value('scheduler/enqueued/memory', spider=self.spider)
    self.stats.inc_value('scheduler/enqueued', spider=self.spider)
    return True

我的问题是

  1. Scrapy的指纹过滤器的作用是否等价于去重?
  2. 如果第一个问题答案是确定的。那么,通过第一个if代码块(上述给出的),是否意味着Scrapy去重在前,入队在后?这两个操作的顺序是怎么样的?request到底是先去重还是先入队?

正在回答

1回答

亲 不是先去重,而是先查重, 如果已经存在了并且reqeust中没有设置dont_filter就进入抓取队列, 否则直接返回

0 回复 有任何疑惑可以回复我~
  • 提问者 慕先生0582406 #1
    谢谢老师,我理解了。看来还是要多看看源码。
    回复 有任何疑惑可以回复我~ 2018-12-22 15:04:52
  • bobby 回复 提问者 慕先生0582406 #2
    是的 要多看源码的
    回复 有任何疑惑可以回复我~ 2018-12-24 14:51:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信