前言
我电脑上现在已经安装的redis服务器,如果没有安装请先百度。
在实际开发中,我们一般先scrpay项目编写好,然后再把它改造成scrapy-redis
scrapy-redis是什么
scrapy-redis是scrapy框架的基于redis的分布式组件,它在scrapy的基础上实现了更多,更强大的功能,具体体现在通过持久化请求队列和请求的指纹集合来实现:
- 断点续爬
- 分布式快速抓取
安装scrapy-redis
1 | pip install scrapy-redis |
如何使用?
单机增量式爬虫
复制以下内容到setting.py
文件中
1 | DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" |
搞定,,就是这么简单,再运行你之前的scrapy爬虫即可实现断点续爬的功能,此时是一个单机增量式的爬虫,之前爬取过的url不会在请求了,每次运行只会爬取最新的内容。
分布式爬虫
RedisSpider
在上面的基础上,把父类scrapy.Spider
改成RedisSpider
,然后添加属性redis_key
,参考实例代码:
1 | from scrapy_redis.spiders import RedisSpider |
注意:
RedisSpider类 不需要写allowd_domains
和start_urls
:
- scrapy-redis将从在构造方法
__init__()
里动态定义爬虫爬取域范围,也可以选择直接写allowd_domains
。 - 必须指定redis_key,即启动爬虫的命令,参考格式:
redis_key = 'myspider:start_urls'
- 根据指定的格式,
start_urls
将在 Master端的 redis-cli 里 lpush 到 Redis数据库里,RedisSpider 将在数据库里获取start_urls。
执行方式:
通过runspider方法执行爬虫的py文件(也可以分次执行多条),爬虫(们)将处于等待准备状态:
scrapy runspider myspider_redis.py
在Master端的redis-cli输入push指令,参考格式:
$redis > lpush myspider:start_urls http://www.dmoz.org/
Slaver端爬虫获取到请求,开始爬取。
RedisCrawlSpider
操作和上面的代码是一样的,只是继承的父类不同,从CrawlSpider->RedisCrawlSpider,实例代码如下:
1 | from scrapy.spiders import Rule |
__END__

文章出处:scrapy-redis的使用
作者签名:简单地活着, 肆意又精彩.
关于主题:Hexo - Live For Code
版权声明:文章除特别声明外,均采用 BY-NC-SA 许可协议,转载请注明出处