• Scrapy_redis介绍


    request对象什么时候入队

    • dont_filter = True
      • 构造请求的时候,吧dont_filter设置为True,该url会被反复抓取。
    • 一个全新的url地址被抓到的时候,构造request请求。
    • url地址在start_urls中的时候,会入队,不管之前是否请求过
      • 构造start_url地址的请求时候,dont_filter = True

    request对象

        def enqueue_request(self, request):
            if not request.dont_filter and self.df.request_seen(request):
            		#dont_filter=False Ture True request指纹已经存在 #不会入队
              	#dont_filter=False Ture False request指纹已经存在全新的url #会入队
                #dont_filter=True False #会入队
                self.df.log(request, self.spider)
                return False
            if self.stats:
                self.stats.inc_value('scheduler/enqueued/redis', spider=self.spider)
            self.queue.push(request)       #会入队
            return True
    

    scrapy-redis去重方法

    • 使用sha1加密,request得到指纹。
    • 把指纹存在redis的集合中。
    • 下一次新来一个request,同样的方式生成指纹,判断指纹是否存在redis集合中。

    生成指纹

    fp = hashlib.shal()                 
    fp.update(to_bytes(request.method))   #请求方法
    fp.update(to_bytes(canonicalize_url(request.url)))    #url地址
    fp.update(request.body or b '')   #请求体
    return fp.hexdigest()
    

    判断数据是否存在redis的集合中,不存在插入

    added = self.server.sadd(self.key,fp)
    return added != 0
    
  • 相关阅读:
    HO引擎近况20210912
    查询超时问题的处理
    ubuntu根据关键词批量杀进程
    创建notebook适用的虚拟环境
    信赖域策略优化(Trust Region Policy Optimization, TRPO)
    强化学习(Reinforcement Learning)
    生成对抗网络(GAN与W-GAN)
    卷积神经网络CNN
    循环神经网络RNN
    PyTorch自动求导
  • 原文地址:https://www.cnblogs.com/i969639/p/11201035.html
Copyright © 2020-2023  润新知