分布式使用
首先必须安装scrapy_redis组件
pip install scrapy_redis
1、scrapy和scrapy_redis的区别
scrapy是一个通用的爬虫框架,不支持分布式
scrapy_redis就是为实现scrapy的分布式而诞生的,它里面提功了redis的组件,通过这些redis组件,就可以实现分布式
2、官网案例
http://github.com/rmax/scrapy-redis
三个样本
dmoz.py 传统的CrawlSpider,目的就是把数据保存在redis,运行方式 指令:scrapy crawl dmoz
myspider_redis.py 继承自RedisCrawlSpider,start_url被redis_key给取代了,其他地方不变
分布式爬虫开发的步骤:
把原来普通的部署在分布式的系统上运行,就构成了分布式爬虫
1、环境部署
scrapy: 爬虫运行的基础 (如果服务端不参与分布式的爬取可以不装)
scrapy_redis :组件(也可以认为是scrapy和redis交互的中间件),用于把scrapy爬虫和redis数据库联系起来
redis服务器:用于存储分布式爬虫爬取到的数据,一般情况下我们将redis服务器部署在Linux系统上,Windows上也可安装(但是这个服务不能用于生产环境);无论是在Linux上还是在Windows上,都必须配置其能够远程访问
2、测试redis服务器是否联通
如果ping了不PONG
1)服务器没有配置远程连接
2)服务器崩溃
3)服务器出现冲突 config set stop-writes-on-bgsave-error no
4)其他意外情况:http://www.baidu.com
3、在普通的scrapy爬虫框架下去爬取,保证爬虫爬取的数据没有错误再去分布式系统上部署
测试数据格式是否正确
先测:json 目的主要是看代码是否有误 【比如:用xpath的时候路径写错等】
再测redis 目的主要是看一下有木有系统级的错误 【如:redis服务器崩溃】
4、部署分布式
服务器端(master端):
可以用某一台主机作为redis服务器的运行方(即服务端),也称为master
客户端(slaver端):
1)把普通爬虫修改成分布式,去掉start_urls(不让slaver随意的执行),替换成redis_key(为了让master能够控制slaver的爬去)