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]

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

时间: 2024-11-02 21:08:54

Scrapy学习-18-去重原理的相关文章

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

一.scrapy暂停与重启 1.要暂停,就要保留一些中间信息,以便重启读取中间信息并从当前位置继续爬取,则需要一个目录存放中间信息: scrapy crawl spider_name -s JOBDIR=dir/001--spider_name是你要爬取得spider的py文件名,JOBDIR是命令参数,即代表存放位置参数,dir是中间信息要保存的目录,001新生成的文件夹名是保存的中间信息,重启则读取该文件信息.可以将JOBDIR 设置在setting中,或写在custom_settings中

爬虫学习18.增量式爬虫

爬虫学习18.增量式爬虫 增量式爬虫 引言: 当我们在浏览相关网页的时候会发现,某些网站定时会在原有网页数据的基础上更新一批数据,例如某电影网站会实时更新一批最近热门的电影.小说网站会根据作者创作的进度实时更新最新的章节数据等等.那么,类似的情景,当我们在爬虫的过程中遇到时,我们是不是需要定时更新程序以便能爬取到网站中最近更新的数据呢? 一.增量式爬虫 概念:通过爬虫程序监测某网站数据更新的情况,以便可以爬取到该网站更新出的新数据. 如何进行增量式的爬取工作: 在发送请求之前判断这个URL是不是

ndk学习18: JNI之C&C++调用Java

一.Java反射机制 先了解Java反射机制原理 例子网上很多,反射很灵活 二. 在JNI层调Java 用途: Java层逆向比较容易,增加逆向门槛,把调用都写到JNI层,  让Java层无调用关系 注意: C和C++有所不同,这里使用C++作为例子 1. 首先在代码中提供一个ShowLog函数 private void ShowMsg() { Log.d("_BING_", "ShowMsg"); } 2. 在上次的Add例子加入代码 JNIEXPORT jint

scrapy学习2 爬虫中间件,下载器中间件之添加代理

中间件 注意:这些中间件都放在middleware中 下载中间件 作用 实例: 代理被封,添加代理 方式一:内置添加代理功能 import os # -*- coding: utf-8 -*- import os import scrapy from scrapy.http import Request class ChoutiSpider(scrapy.Spider): name = 'chouti' allowed_domains = ['chouti.com'] start_urls =

12.17 Nginx负载均衡;12.18 ssl原理;12.19 生产ssl密钥对;12.20 Nginx配置ssl

扩展: 针对请求的uri来代理 http://ask.apelearn.com/question/1049 根据访问的目录来区分后端web http://ask.apelearn.com/question/920 12.17 Nginx负载均衡 1. 安装dig命令: [[email protected] ~]# yum install -y bind-utils 2. 用dig获取qq.com的ip地址: [[email protected] ~]# dig qq.com 3. 创建ld.co

Scrapy学习笔记

所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这种说法不够专业,更专业的描述就是,抓取特定网站网页的HTML数据.不过由于一个网站的网页很多,而我们又不可能事先知道所有网页的URL地址,所以,如何保证我们抓取到了网站的所有HTML页面就是一个有待考究的问题了.一般的方法是,定义一个入口页面,然后一般一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历一样. Scrapy是一个基于

12.17 Nginx负载均衡;12.18 ssl原理;12.19 生产ssl密钥对;12.20 N

12.17 Nginx负载均衡:12.18 ssl原理:12.19 生产ssl密钥对:12.20 Nginx配置ssl 扩展: 针对请求的uri来代理 : http://ask.apelearn.com/question/1049 根据访问的目录来区分后端的web : http://ask.apelearn.com/question/920 nginx长连接 : http://www.apelearn.com/bbs/thread-6545-1-1.html nginx算法分析 : http:/

12.17 Nginx负载均衡 12.18 ssl原理 12.19 生成ssl密钥对 12.20 N

12.17 Nginx负载均衡 [[email protected] ~]# yum install -y bind-utils[[email protected] ~]# dig www.qq.comANSWER SECTION:www.qq.com. 73 IN A 59.37.96.63www.qq.com. 73 IN A 14.17.42.40www.qq.com. 73 IN A 14.17.32.211[[email protected] ~]# curl -x127.0.0.1:

大数据学习的思维原理(机器懂人原理篇)

我们在上一篇文章中给大家介绍了很多大数据学习的思维原理,对于这些思维原理都是需要大家掌握的,在这篇文章中我们给大家讲解一下机器懂人原理,希望这篇文章能够给大家带来帮助. 首先我们给大家说说什么是机器懂人原理,机器懂人原理就是由人懂机器转变为机器更懂人.这里说的不是让人更懂机器,而是让机器更懂人,或者说是能够在使用者很笨的情况下,仍然可以使用机器.甚至不是让人懂环境,而是让我们的环境来懂我们,环境来适应人,某种程度上自然环境不能这样讲,但是在数字化环境中已经是这样的一个趋势,就是我们所在的生活世界