Scrapy学习-18-去重原理

Posted 陈乾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy学习-18-去重原理相关的知识,希望对你有一定的参考价值。

Scrapy去重原理
scrapy本身自带一个去重中间件
  scrapy源码中可以找到一个dupefilters.py去重器
 
源码去重算法
# 将返回值放到集合set中,实现去重

def request_fingerprint(request, include_headers=None):
    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]

 

以上是关于Scrapy学习-18-去重原理的主要内容,如果未能解决你的问题,请参考以下文章

scrapy暂停和重启,及url去重原理

Python Scrapy爬虫(上)

面试题

Scrapy的日志信息与配置

爬虫的一些题目

去重配置和调度器配置代码优先级