升级普通Scrapy为增量式爬虫(一)

根据一些业务需求,在爬虫的过程中由于一些网络或者人为的原因终止了爬虫流程,下次发起爬虫请求时,会重新开始,导致原来爬虫过的数据会重复爬取。
为了解决重复爬取,同时也是为了对爬取的数据进行一个筛选,就需要用到增量式爬虫。
增量式爬虫的意义在于,当爬虫流程中断后,下次爬虫请求会紧接着上次中断的地方进行爬取,上次爬取的数据,就不会再发送请求,提高爬虫效率。

增量式爬虫的方法:

第一种: 启用scrapy_redis

scrapy_redis分布式爬虫,在settings.py添加对应的配置,即可实现增量式爬虫。
由于redis增量式的局限性以及适用性太差,除非特定的分布式爬虫,普通的scrapy爬虫不推荐。

第二种:使用scrapy-deltafetch插件实现增量式爬虫

scrapy-deltafetch简介
scrapy-deltafetch通过Berkeley DB来记录爬虫每次爬取收集的request和item,当重复执行爬虫时只爬取新的item,实现增量去重,提高爬虫爬取性能。

Berkeley DB简介
Berkeley DB是一个嵌入式数据库,为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。

主要特点:
嵌入式:直接链接到应用程序中,与应用程序运行于同样的地址空间中,因此,无论是在网络上不同计算机之间还是在同一台计算机的不同进程之间,数据库操作并不要求进程间通讯。 Berkeley DB为多种编程语言提供了API接口,其中包括C、C++、Java、Perl、Tcl、Python和PHP,所有的数据库操作都在程序库内部发生。多个进程,或者同一进程的多个线程可同时使用数据库,有如各自单独使用,底层的服务如加锁、事务日志、共享缓冲区管理、内存管理等等都由程序库透明地执行。
轻便灵活:可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种嵌入式实时操作系统之下,已经被好多高端的因特网服务器、台式机、掌上电脑、机顶盒、网络交换机以及其他一些应用领域所采用。一旦Berkeley DB被链接到应用程序中,终端用户一般根本感觉不到有一个数据库系统存在。
可伸缩:Database library本身是很精简的(少于300KB的文本空间),但它能够管理规模高达256TB的数据库。它支持高并发度,成千上万个用户可同时操纵同一个数据库

scrapy-deltafetch插件的使用与安装

scrapy-deltafetch插件的使用是基于Berkeley DB数据库的,所以必须安装好Berkeley DB数据库。

windows下Berkeley DB数据库的安装流程如下:
首先下载好对应操作系统的压缩包压缩包:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#bsddb3 windows系统中python的所有第三方插件网址
找好需要的Berkeley DB压缩包,下载,解压。

将解压好的文件拉入项目中,如下图所示:
在这里插入图片描述
这里使用的是python3.6,windows64位的。

在命令行中进入对应的路径,pip install bsddb3-6.2.6-cp36-cp36m-win_amd64.whl

安装bsddb3

pip install bsddb3

安装scrapy-deltafetch

pip install scrapy-deltafetch

安装scrapy-magicfields
pip install scrapy-magicfields

settings.py设置

SPIDER_MIDDLEWARES = {  ‘scrapy_deltafetch.DeltaFetch’: 100  }  

DELTAFETCH_ENABLED = True

此时爬虫框架已经变成了增量式的爬虫,运行代码进行测试。

第一次:
在这里插入图片描述
第二次:
在这里插入图片描述

通过对比发现,第一次发送过的请求,第二次就不会再次请求,实现了请求url的去重,以及断点续爬。
数据量有限,而且不方便停止,所以断点续爬,有兴趣的童鞋可以自己检测。

重置DeltaFetch
如果想重置某个页面的爬取数据缓存,执行命令:
scrapy crawl spider_name -a deltafetch_reset=1

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值