分布式爬虫

分布式部署就是实现多台电脑共同爬取数据

安装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) 

你可能感兴趣的:(分布式爬虫)