【百度云搜寻,搜各种材料:http://www.lqkweb.com】【搜网盘,搜各种材料:http://www.swpan.cn】scrapy-redis是一个能够scrapy联合redis搭建分布式爬虫的开源模块
scrapy-redis的依赖
Python 2.7, 3.4 or 3.5,Python反对版本Redis >= 2.8,Redis版本Scrapy >= 1.1,Scrapy版本redis-py >= 2.10,redis-py版本,redis-py是一个Python操作Redis的模块,scrapy-redis底层是用redis-py来实现的``下载地址:https://pypi.python.org/pypi/...
咱们以scrapy-redis/0.6.8版本为讲
一、装置scrapy-redis/0.6.8版本的依赖
首先装置好scrapy-redis/0.6.8版本的依赖关系模块和软件
二、创立scrapy我的项目
执行命令创立我的项目:scrapy startproject fbshpch
三、将下载的scrapy-redis-0.6.8模块包解压,解压后将包里的crapy-redis-0.6.8\src\scrapy_redis的scrapy_redis文件夹复制到我的项目中
四、分布式爬虫实现代码,一般爬虫,相当于basic命令创立的一般爬虫
留神:分布式一般爬虫必须继承scrapy-redis的RedisSpider类
#!/usr/bin/env python# -*- coding:utf8 -*-from scrapy_redis.spiders import RedisSpider # 导入scrapy_redis里的RedisSpider类import scrapyfrom scrapy.http import Request #导入url返回给下载器的办法from urllib import parse #导入urllib库里的parse模块class jobboleSpider(RedisSpider): # 自定义爬虫类,继承RedisSpider类 name = 'jobbole' # 设置爬虫名称 allowed_domains = ['blog.jobbole.com'] # 爬取域名 redis_key = 'jobbole:start_urls' # 向redis设置一个名称贮存url def parse(self, response): """ 获取列表页的文章url地址,交给下载器 """ # 获取当前页文章url lb_url = response.xpath('//a[@class="archive-title"]/@href').extract() # 获取文章列表url for i in lb_url: # print(parse.urljoin(response.url,i)) #urllib库里的parse模块的urljoin()办法,是主动url拼接,如果第二个参数的url地址是相对路径会主动与第一个参数拼接 yield Request(url=parse.urljoin(response.url, i), callback=self.parse_wzhang) # 将循环到的文章url增加给下载器,下载后交给parse_wzhang回调函数 # 获取下一页列表url,交给下载器,返回给parse函数循环 x_lb_url = response.xpath('//a[@class="next page-numbers"]/@href').extract() # 获取下一页文章列表url if x_lb_url: yield Request(url=parse.urljoin(response.url, x_lb_url[0]), callback=self.parse) # 获取到下一页url返回给下载器,回调给parse函数循环进行 def parse_wzhang(self, response): title = response.xpath('//div[@class="entry-header"]/h1/text()').extract() # 获取文章题目 print(title)五、分布式爬虫实现代码,全站主动爬虫,相当于crawl命令创立的全站主动爬虫
留神:分布式全站主动爬虫必须继承scrapy-redis的RedisCrawlSpider类
#!/usr/bin/env python# -*- coding:utf8 -*-from scrapy_redis.spiders import RedisCrawlSpider # 导入scrapy_redis里的RedisCrawlSpider类import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import Ruleclass jobboleSpider(RedisCrawlSpider): # 自定义爬虫类,继承RedisSpider类 name = 'jobbole' # 设置爬虫名称 allowed_domains = ['www.luyin.org'] # 爬取域名 redis_key = 'jobbole:start_urls' # 向redis设置一个名称贮存url rules = ( # 配置抓取列表页规定 # Rule(LinkExtractor(allow=('ggwa/.*')), follow=True), # 配置抓取内容页规定 Rule(LinkExtractor(allow=('.*')), callback='parse_job', follow=True), ) def parse_job(self, response): # 回调函数,留神:因为CrawlS模板的源码创立了parse回调函数,所以切记咱们不能创立parse名称的函数 # 利用ItemLoader类,加载items容器类填充数据 neir = response.css('title::text').extract() print(neir)六、settings.py文件配置
# 分布式爬虫设置SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 使调度在redis存储申请队列DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 确保所有的蜘蛛都共享雷同的过滤器通过Redis复制ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline': 300 # 存储在redis刮项后处理}七、执行分布式爬虫
1、运行命令:scrapy crawl jobbole(jobbole示意爬虫名称)
2、启动redis,而后cd到redis的装置目录,
执行命令:redis-cli -h 127.0.0.1 -p 6379 连贯一个redis客户端
在连贯客户端执行命令:lpush jobbole:start_urls http://blog.jobbole.com/all-p... ,向redis列队创立一个起始URL
阐明:lpush(列表数据) jobbole:start_urls(爬虫里定义的url列队名称) http://blog.jobbole.com/all-p...
八、scrapy-redis编写分布式爬虫代码原理
其余应用办法和单机版爬虫一样