分布式爬虫


分布式:
什么是分布式爬虫?

​ 基于多台电脑组建一个分布式机群,然后让机群中的每一台电脑执行同一组程序,然后让他们对同一个网站的数据进行爬取

为什么要使用分布式?

​ 提升爬取数据的效率

如何实现分布式爬虫

​ 基于scrapy+redis的形式实现分布式

​ scrapy结合scrapy-redis组件实现分布式

原生scrapy框架为什么无法实现分布式

​ 调度器和管道无法被分布式机群共享

1628088554059.png

scrapy-redis组件的作用:

​ 提供可以被共享的调度器和管道

​ 环境安装:

​ redis

pip install scrapy-redis

​ 编码流程:
​ 创建一个工程

​ 创建一个爬虫文件:可以基于CrawSpider也可以是普通文件

​ 修改当前爬虫文件:

​ 导包:from scrapy_redirs.spider import RedisCrawlSpider普通类导:RedisSpider

​ 将start_urls替换成redis_key = ‘xxx’ #表示的是可以被共享调度器中队列名称

​ 编写爬虫类爬取数据操作(此时没有起始url)

​ 对settings进行配置:

​ 指定管道:

​ #开启共享管道

​ ITEM_PIPELINES = {

​ ’scrapy_redis.pipelines.RedisPipeline‘:400

​ }

​ 指定调度器:

​ #增加了一个去重容器类,作用使用Redis的set集合来存储请求的指纹数据,从而实现请· 求去重

​ DUOEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter’

​ #使用scrapy-redis组件自己的调度器

​ SCHEDULER =”scrpay_redis.scheduler.Scheduler”

​ #配置调度器是否要持久化,也就是当爬虫结束后要不要清空Redis中请求队列和去重指 纹的set

​ SCHEDULER _PERSIST = True

​ 指定redis服务(在settings.py):

​ REDIS_HOST=’redis服务的ip地址’

​ REDIS_PORT = 6379

​ redis的配置文件进行配置:redis.windows.conf

​ 56行:#bind 127.0.0.1

​ 75行:pritected-mode no

​ 携带配置文件启动redis服务

​ ./redis-server redis.windows.conf

​ 启动redis的客户端

​ redis-cli

​ 执行当前工程:

​ 进入到爬虫文件对应的目录:scrapy runspider xxx.py

​ 向调度器队列中扔入一个起始url:

​ 队列在哪里呢?答:在redis中

​ 1push redis_key www.xxx.cm

​ #redis_key是在爬虫文件中定义的


文章作者: Kexuan Shi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kexuan Shi !
评论
  目录