# 分布式概念:使用多台机器搭建一个分布式机群,在分布式机群中共同运行同一组程序 # 让其对同一个网络资源进行联合数据爬取 # 原生的scrapy框架时无法实现分布式 :1、调度器无法被分布式机群共享 2、管道无法被共享 # 如何实现分布式?使用scrapy结合着scrapy-redis组件实现分布式 # scrapy-redis组件作用:给scrapy提供可以被共享的管道和调度器 pip install scrapy_redis # 实现流程 1、创建工程 # 2、cd工程 # 3、创建爬虫文件——基于crawlspider的爬虫文件 # 4 修改爬虫文件 allowed_domains注释掉 # 导包 修改当前爬虫类的父类 class FbSpider(RedisCrawlSpider) # 注释掉start_urls 添加一个新属性 redis_key='sunQueue'可以被共享的调度器队列的名称 # 基于常规的操作 # 5修改配置文件(setting.py) # 指定调度器 # DUPEFITER_CLASS='scrapy redis.dupefilter.RFPDupeFilter' # SCHEDULER='scrapy redis.scheduler.Scheduler' # SCHEDULER_PERSIST=True # 指定管道 # ITEM_PIPELINES={'scrapy_redis.pipelines.RedisPipeline':400 #指定redis服务器 # REDIS_HOST='' # REDIS_PORT= # 6、对redis的配置文件进行配置(redis.windows.conf) # 取消默认绑定 将bind127.0.0.1注释 # 关闭保护模式 protected-mode yes:将yes改为no # 7、启动redis的服务器和客户端 # -redis服务端的启动:在终端里执行:redis-server.exe redis.window.conf # 启动客户端 # 8、执行程序 # 在日志输出可以看出日志hang住了,为啥会hang住,因为在等待起始的url # 9、向调度器的队列中扔入一个起始的url: # -在redis-cli:lpush sunQueue www.123.com # 10、redis-cli: # -proName:item命名的数据结构 from rom scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider,Rule from scrapy redis.spider import RedisCrawlSpider class SunSpider(CrawlSpider): name='sun' # start_urls=[''] redis_key='sunQueue' link=LinkExtractor(allow=r'type=4&page=\d+') rules=(Rule(link,callback='parse_item',follow=True),) def parse_item(self,response): tr_list = response.xpath('//*[@id="morelist"]/div/table[2]//tr/td/table//tr') for tr in tr_list: title=tr.xpath('./td[2]/a[2]/text()').extract_first() # 使用链接提取器进行详情页的提取 item=CrawlproItem() item['title']=title yield item class CrawlproItem(scray.Spider): title=scrapy.Field()
python分布式爬虫
最新推荐文章于 2024-05-13 16:48:34 发布