码迷,mamicode.com
首页 > 其他好文 > 详细

Scrapy学习-18-去重原理

时间:2018-05-23 17:11:11      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:print   一个   body   中间   can   one   code   update   ade   

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-去重原理

标签:print   一个   body   中间   can   one   code   update   ade   

原文地址:https://www.cnblogs.com/cq146637/p/9077500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!