Scrapy_redis
-
什么是分布式?
就是指多个系统协同完成一个系统任务的系统,解决了中心化管理,类似多线程
-
Scrapy 和 Scrapy_redis 的区别
Scrapy是一个框架,Scrapy_redis是一个组件,让我们更加方便进行分布式爬取
一,RedisSpider
-
配置redis桥接端口
-
写好scrapy之后
分析在Spider里面的redis_key代码,这个是指你在redis里面创建的列表名字,列表里面放一个初始的url,其他的和平常scrapy一样
-
在redis里面
-
setting.py 的设置里面默认连接是
127.0.0.1 6379
# 可以自己配置 redis 的ip地址 REDIS_HOST = '172.56.88.486' REDIS_PORT = 6379
二,Boss直聘
-
Spider代码
# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from scrapy_redis.spiders import RedisCrawlSpider from ..items import BossItem class BossSpiderSpider(RedisCrawlSpider): name = 'boss.spider' # start_urls = ['https://www.zhipin.com/job_detail/?query=%E4%BC%9A%E8%AE%A1&city=101210100&industry=&position='] redis_key = "boss_spider:start_urls" rules = ( Rule(LinkExtractor(allow="/job_detail/.*?~\.html"), callback='parse_item', follow=True), Rule(LinkExtractor(allow="/c101210100/\?query=.*?=\d+"), follow=True), # 默认调用parse方法 ) def parse_item(self, response): """ 详情页,解析符合allow规则的response :param response: :return: """ item = BossItem() item['job'] = response.xpath('//h1/text()').extract_first() item['salary'] = response.xpath('//span[@class="salary"]/text()').extract_first() item['address'] = response.xpath('//div[@class="job-primary detail-box"]//p/text()').extract()[0] item['experience'] = response.xpath('//div[@class="job-primary detail-box"]//p/text()').extract()[1] item['degree'] = response.xpath('//div[@class="job-primary detail-box"]//p/text()').extract()[2] item['content'] = '\n'.join(response.xpath('//div[@class="detail-content"]/div[1]/div/text()').extract()) yield item
-
setting.py设置
DOWNLOAD_DELAY = 1.5 # 请求延时 ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline': 400, # 默认使用scrapy_redis的pipilines设置,可以自己写,把数据写入mongoDB或者本地 } # scrapy_redis 需要的配置 DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' SCHEDULER = 'scrapy_redis.scheduler.Scheduler' SCHEDULER_PERSIST = True
-
往 redis 里面添加 初始请求
lpush boss_spider:start_urls https://www.zhipin.com/job_detail/?query=%E9%87%91%E8%9E%8D&city=101210100&industry=&position=www.zhipin.com/job_detail/?query=%E9%87%91%E8%9E%8D&city=101210100&industry=&position=