scrapy : 一个框架,不能实现分布式爬取
scrapy-redis : 基于这个框架开发的一套组件,可以让scrapy实现分布式的爬取
所以需要安装扩展库 : pip install scrapy-redis
首先进入这个网站获取分布式爬虫样本 : https://github.com/rmax/scrapy-redis
如果你的电脑安装了Github ,
可以直接进入git终端
然后输入 git clone https://github.com/rmax/scrapy-redis
将文件下载下来
打开example-project\example\spiders
dmoz.py : 普通crawlspider,没有参考价值
myspider_redis.py : 分布式的Spider模板
mycrawler_redis.py : 分布式的CrawlSpider模板
打开mycrawler_redis.py
对比
RedisCrawlSpider CrawlSpider
name name
redis_key start_urls
__init__() allowed_domains
注意:__init__()是一个坑,现在还是使用allowed_domains这种列表的形式
存储到Redis:
(1)scrapy-redis组件已经写好往redis中存放的管道,只需要使用即可,默认存储到本机的redis服务中
(2)如果想存储到其它的redis服务中,需要在settings件中配置
REDIS_HOST = 'ip地址'
REDIS_PORT = 6379
进入主题,开始部署:
(1)爬虫文件按照模板文件修改
(2)配置文件中添加
# 使用scrapy-redis组件的去重队列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否允许暂停
SCHEDULER_PERSIST = True
(3)把代码复制到需要的部署的服务器上,服务器数量不限制(随心所欲,不过还是要节制,避免浪费)
(4)开始跑起来 输入指令 : scrapy runspider xxx.py 注意:指令不再是scrapy crawl xx
(5)此时在Redis中添加起始url
lpush 项目类名小写:start_urls "网址" 如:lpush moviesspider:start_urls "http://www.id97.com/movie/"