zoukankan      html  css  js  c++  java
  • Crawlscrapy分布式爬虫

    1.概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取

    2.原生的scrapy是不可以实现分布式式爬虫

      a)调度器无法共享

      b)管道无法共享

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

      a)pip install scrapy-redis

    4.分布式爬取的流程:

      a)redis配置文件配置

        band 127.0.0.1 进行注释

      b)redis服务器开启

      c)创建scrapy工程后,创建基于crawlspider的爬虫文件 

      d)  导入RedisCrawlSpider类,然后将爬虫文件修改成基于该类的源文件

      e)将start_url 修改成 redis_key="xxx"

      f )将项目管道和调度器配置成基于scrapy-redis组件中

      g)执行爬虫文件:scrapy runspider xxx.py

      h)将起始url放置到调度器的队列中:redis-cli,lpush 队列的名称(redis-key)起始url

    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    from redispro.items import RedisproItem
    from scrapy_redis.spiders import RedisCrawlSpider
    
    class QiubaiSpider(RedisCrawlSpider):
        name = 'qiubai'
        # allowed_domains = ['www.qiushibaike.com']
        # start_urls = ['https://www.qiushibaike.com/']
    
        #调度器队列的名称
        redis_key = 'qiubai'   # 表示跟start_urls含义是一样
        link = LinkExtractor(allow=r'/pic/page/d+')
        rules = (
            Rule(link, callback='parse_item', follow=True),
        )
    
        def parse_item(self, response):
            div_list = response.xpath('//div[@id="content-left"]/div')
            for i in div_list:
                img_url = 'http' + i.xpath('.//div[@class="thumb"]/a/img/@src')
                item = RedisproItem()
                item['img_url'] = img_url
    
                yield item

    setting

    #使用scrapy-redis组件的去重队列
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    #使用scrapy-redis组件自己的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    #是否允许暂停
    SCHEDULER_PERSIST = True
    
    
    #如果redis服务器不在自己本机,则需要如下配置
    REDIS_HOST = "112.21.68.59"
    REDIS_PORT = 6379
    ITEM_PIPELINES = {
    #    'redispro.pipelines.RedisproPipeline': 300,
        'scrapy_redis.pipelines.RedisPipeline':400,
    }
  • 相关阅读:
    1029 旧键盘 (20 分)C、Java、python
    1028 人口普查 (20 分)C语言
    1027 打印沙漏 (20 分)C语言
    luoguP2709 小B的询问
    luoguP2709 小B的询问
    bzoj5016 [Snoi2017]一个简单的询问
    bzoj5016 [Snoi2017]一个简单的询问
    luoguP1972 [SDOI2009]HH的项链(莫队)
    luoguP1972 [SDOI2009]HH的项链(莫队)
    Tyvj1091
  • 原文地址:https://www.cnblogs.com/zhuzhiwei-2019/p/10920364.html
Copyright © 2011-2022 走看看