• 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
    
  • 相关阅读:
    枚举
    泛型
    装箱和拆箱
    使用TryParse()来执行数值转换
    参数数组
    checked和unchecked转换
    字符串不可变
    TCC : Tiny C Compiler (2018-2-6)
    win10 下 protobuf 与 qt
    QWebView 与Js 交互
  • 原文地址:https://www.cnblogs.com/i969639/p/11201035.html
Copyright © 2020-2023  润新知