分布式爬虫 - scrapy_redis

Scrapy_redis

  1. 什么是分布式?

    就是指多个系统协同完成一个系统任务的系统,解决了中心化管理,类似多线程

  2. Scrapy 和 Scrapy_redis 的区别

    Scrapy是一个框架,Scrapy_redis是一个组件,让我们更加方便进行分布式爬取

一,RedisSpider

  1. 配置redis桥接端口(img-M2l7k37N-1592034802261)(assets/.png)]

  2. 写好scrapy之后

(img-dVyvAhEP-1592034802264)(assets/.png)]

分析在Spider里面的redis_key代码,这个是指你在redis里面创建的列表名字,列表里面放一个初始的url,其他的和平常scrapy一样

  1. 在redis里面(img-vwmEhJnf-1592034802268)(assets/.png)]

  2. setting.py 的设置里面默认连接是 127.0.0.1 6379

    # 可以自己配置 redis 的ip地址
    REDIS_HOST = '172.56.88.486'
    REDIS_PORT = 6379
    

二,Boss直聘

  1. Spider代码[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIuKY1wH-1592034802272)(assets/.png)]

    # -*- 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
    
  2. setting.py设置[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dn4SQYkK-1592034802275)(assets/.png)]

    
    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
    
  3. 往 redis 里面添加 初始请求[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0qlzUR3-1592034802279)(assets/.png)]

    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=
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值