scrapy之分布式

mac2022-06-30  105

分布式爬虫

概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取。原生的scrapy是不可以实现分布式爬虫?

    a) 调度器无法共享

    b) 管道无法共享

工具

scrapy-redis组件:专门为scrapy开发的一套组件。该组件可以让scrapy实现分布式。

a) 下载:pip install scrapy-redis

分布式爬取的流程

1)redis文件的配置 bind 127.0.0.1 进行注释 protected-model no 关闭保护模式 2)redis数据库的开启:要基于配置文件进行开启 服务器端redis-server.exe redis.windows.conf 客户端redis-cli 3)创建scrapy工程后,创建基于crawlSpider的爬虫文件 4)导入RedisCrawlSpider类,然后将爬虫文件修改成继承该类的源文件 5)将start_url修改成redis_key 6)将项目的管道和调度器配置成基于scrapy_redis组件的配置 7)执行爬虫文件:进入到爬虫文件目录内,执行scrapy runspider 爬虫文件.py 程序进入监听状态 8)将起始url扔进调度器中 redis数据库客户端执行 lpush 调度器名称 url keys * 》》lrange qiubai:items 0 -1

 代码

# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from redisPro.items import RedisproItem from scrapy_redis.spiders import RedisCrawlSpider from redisPro.items import RedisproItem class QiubaiSpider(RedisCrawlSpider): name = 'qiubai' #allowed_domains = ['https://www.qiushibaike.com/pic/'] #start_urls = ['https://www.qiushibaike.com/pic/'] #调度器队列的名称 redis_key = 'qiubaispider' #表示跟start_urls含义是一样 # 链接提取器 link = LinkExtractor(allow=r'/pic/page/\d+') rules = ( # 规则解析器 Rule(link, callback='parse_item', follow=True), ) def parse_item(self, response): #将图片的url进行解析 div_list = response.xpath('//*[@id="content-left"]/div') for div in div_list: img_url = div.xpath('./div[@class="thumb"]/a/img/@src').extract_first() item = RedisproItem() item['img_url'] = img_url yield item

配置

除了之前的设置外,还需要如下设置

# Configure item pipelines # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { #'redisPro.pipelines.RedisproPipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 300, } .... # 使用scrapy-redis组件的去重队列 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 使用scrapy-redis组件自己的调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 是否允许暂停 SCHEDULER_PERSIST = True

【补充】

#如果redis服务器不在自己本机,则需要在setting中进行如下配置

REDIS_HOST = 'redis服务的ip地址'

REDIS_PORT = 6379

 

然后按流程操作执行就可以了!

转载于:https://www.cnblogs.com/yuliangkaiyue/p/10035282.html

最新回复(0)