scrapy中request的指纹生成

    if include_headers:
        include_headers = tuple(to_bytes(h.lower())
                                 for h in sorted(include_headers))
    cache = _fingerprint_cache.setdefault(request, {})
    if include_headers not in cache:
        fp = hashlib.sha1()
        fp.update(to_bytes(request.method))
        fp.update(to_bytes(canonicalize_url(request.url)))
        fp.update(request.body or b'')
        if include_headers:
            for hdr in include_headers:
                if hdr in request.headers:
                    fp.update(hdr)
                    for v in request.headers.getlist(hdr):
                        fp.update(v)
        cache[include_headers] = fp.hexdigest()
    return cache[include_headers]

第一步:在调用该函数的时候,只传来一个request, 建立一个字典的弱引用

第二步:运用sha1加密, 将请求方法(get, post) 转为为字节,再调用update方法,

第三步:运用canonicalize_url函数,将url进行格式化,具体这个函数是做什么的。可以参照下面的链接:点击打开链接

第四步:将请求参数字节话,最后进行加密。

经过这四步就生成了该request的指纹

因为include_headers是默认的,所以如果你在判断是不是重复的request的时候,需要用到部分headers中的东西,你可以定义一个include_headers。以达到更好的判重的目的。

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值