分布式爬虫

scrapy和scrapy_redis的区别

scrapy是一个通用的爬虫框架,不支持分布式

scrapy_redis就是为实现scrapy的分布式而诞生的,它里面提功了redis的组件,通过这些redis组件,就可以实现分布式

1、环境部署

scrapy: 爬虫运行的基础 (如果服务端不参与分布式的爬取可以不装)

scrapy_redis :组件(也可以认为是scrapy和redis交互的中间件),用于把scrapy爬虫和redis数据库联系起来

redis服务器:用于存储分布式爬虫爬取到的数据,一般情况下我们将redis服务器部署在Linux系统上,Windows上也可安装(但是这个服务不能用于生产环境);无论是在Linux上还是在Windows上,都必须配置其能够远程访问

2、redis安装

1)Linux下安装:

tar  -zxvf  redis-3.2.8.tar.gz
cp  -r  ./redis-3.2.8  /usr/local/redis  (如果被拒绝,用sudo cp ...)
sudo make install 
如果有错,请输入指令:sudo make MALLOC=libc
运行起来服务器:进入src文件 cd  /usr/local/redis/src  运行redis-server文件 ./redis-server
服务器启动以后,该redis数据就可以处理数据了;操作该数据库需要打开其客户端  
另开一个终端  进入src文件 cd  /usr/local/redis/src  运行redis-cli文件 ./redis-cli
127.0.0.1:6379>ping
PONG 说明服务器打开成功

关闭服务器 在客户端输入命令:shutdown  [nosave|save] 

【注意】如果是远程连接的客户端,则不能shutdown

2)远程访问

远程访问:redis-cli -h xxx.xx.xx.xx -port 6379 -a password

# 设置远程访问windows中redis.windows.conf 文件更改  linux中redis.conf文件中更改
# protected-mode后的yes改为no
# 找到bind 127.0.0.1注释掉(或改为0.0.0.0)
# 开放端口6379(防火墙、阿里云安全策略。。。)

redis-cli -h xxx.xx.xx.xx# 设置密码

# 找到requirepass一行,去掉注释 设置密码(requirepass 密码)

然后把服务器重启即可

3、在普通的scrapy爬虫框架下去爬取,保证爬虫爬取的数据没有错误再去分布式系统上部署

测试数据格式是否正确

先测:json 目的主要是看代码是否有误 【比如:用xpath的时候路径写错等】

再测redis 目的主要是看一下有木有系统级的错误 【如:redis服务器崩溃】

4、部署分布式

服务器端(master端):

可以用某一台主机作为redis服务器的运行方(即服务端),也称为master

客户端(slaver端):

1)修改自己配置文件,即在配置文件中加上scrapy_redis的组件

settings.py

ITEM_PIPELINES = {
   'CrawlSpiderDemo.pipelines.CrawlspiderdemoPipeline': 300,
  # 优先级要高于原本的优先级
    'scrapy_redis.pipelines.RedisPipeline': 200,
}
#【redis的组件】用于scrapy
# 使用的是scrapy_redis的去重类
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 调度器使用是scrapy_redis的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 爬取的过程中是否允许暂停
SCHEDULER_PERSIST = True

REDIS_HOST = 'xxx.xxx.xxx.xxx'
REDIS_PORT = 6379

2)把普通爬虫修改成分布式,去掉start_urls(不让slaver随意的执行),替换成redis_key(为了让master能够控制slaver的爬去)

爬虫.py

# 从scrapy_redis.spiders 中 导入 RedisCrawlSpider
from scrapy_redis.spiders import RedisCrawlSpider
# 继承的父类改为RedisCrawlSpider
class DushuSpider(RedisCrawlSpider):
    name = 'dushu'
    allowed_domains = ['dushu.com']
    # 把起始链接注释
    # start_urls = ['http://www.baidu.com']
    # 增加redis_key
    redis_key = "book:start_urls"
    # 这个就是页面的url的匹配规则,我们通过他可以很方便的把我们要爬取的页面匹配出来
    rules = (
        Rule(LinkExtractor(allow=r'/book/1163_\d+\.html'), callback='parse_item', follow=True),
    )
5、爬取数据
# slaver端:首先要运行起来,等待master发出起始地址再开始
进入爬虫文件所在的目录下 执行 scrapy runserver 爬虫.py
# master端:客户端执行完之后redis服务器中放入一个起始地址的列表
lupsh book:start_urls http://www.baidu.com


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值