分布式部署就是实现多台电脑共同爬取数据
安装scrapy-redis
pip install scrapy-redis
自定义spider,settings.py
spider文件
class XcftwoSpider(RedisCrawlSpider):
另一种写法:
class XcftwoSpider(RedisSpider):
name = 'xcftwo'
allowed_domains = ['xiachufang.com']
redis_key = 'xcftwo:start_urls'
settings.py文件
# Configure item pipelines
# 设置DUPEFILTER_CLASS,使用scrapy_redis的去重组件, 不再使用scrapy自带的去重组件了
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 设置SCHEDULER,使用scrapy_redis的调度器组件 不再使用scrapy自带的调度器组件了
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#不清除redis的请求记录(队列), 允许暂停和停止爬取
SCHEDULER_PERSIST = True
#设置请求任务的队列模式#SpiderPriorityQueue 是scrapy_redis框架默认的队列模式(有自己的优先级)SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
# SpiderQueue 是请求的队列模式(FifoQueue),先进先出#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"# SpiderStack 是请求的队列模式(LifoQueue),后进先出
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
#设置redis数据库的ip和端口REDIS_HOST = '118.24.255.219'REDIS_PORT = 6380
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 400,}
其他都不用变
添加起始url
lpush qingspider:start_urls 起始的url
执行
scrapy runspider xxx.py
实现分布式爬虫的关键三点:
如图1.共享队列
2.重写Scheduler,让其无论是去重还是任务都去访问共享队列
3.为Scheduler定制去重规则(利用redis的有序集合类型)
你还需要做这些:
1.将redis数据库的配置文件进行改动: protected-mode no #bind 127.0.0.1(重要!!!!)
下载scrapy-redis
(1).创建工程
(2).创建基于scrawlSpider的爬虫文件
(3).导入RedisCrawlSpider类
(4).将start_urls更换成redis_key属性
(5).在现有代码的基础上进行连接提取和解析操作
(6).将解析的数据值封装到item中,然后将item对象提交到scrapy-redis组件中的管道里('scrapy_redis.pipelines.RedisPipeline': 400,)
(7).管道会将数据值写入到指定的redis数据库中(在配置文件中进行指定redis数据库ip的编写)
(8).在当前工程中使用scrapy-redis封装好的调度器(在配置文件中进行配置)
(9).将起始url扔到调度器队列(redis_key)中#
10.启动redis服务器:redis-server redis.windows.conf
11.启动redis-cli
12.执行当前爬虫文件:scrapy runspider 爬虫文件
13.向队列中扔一个起始url:在redis-cli执行扔的操作(lpush redis_key的value值 起始url)
网友评论