• 分布式爬取


    编辑本随笔

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

    原生scrapy不可以实现分布式爬虫,原因如下:

    1. 调度器无法在多台电脑上共享
    2. 管道无法共享

    分布式爬虫组件:scrapy-redis,该组件可以让scrapy实现分布式。

    1. pip install scrapy-redis

    分布式爬取流程:

    1. redis数据库安装
    2. redis文件配置
      • 将bind 127.0.0.1注销掉
      • 将保护模式改为no,关闭保护模式,即protected-mode no
    3. 基于配置文件启动redis服务器

    代码流程:

    1. 创建scrapy工程,创建基于crawlSpider的项目
    2. 从scrapy_redis.spiders中导入RedisCrawlSpider,并将项目的父类由CrawlSpider改为RedisCrawlSpider
    3. 指定redis_key,指定start_urls在redis数据库中存放的位置
      # -*- coding: utf-8 -*-
      import scrapy
      from scrapy.linkextractors import LinkExtractor
      from scrapy.spiders import CrawlSpider, Rule
      from scrapy_redis.spiders import RedisCrawlSpider
      
      class QiubaiSpider(RedisCrawlSpider):
          name = 'qiubai'
          allowed_domains = ['https://www.qiushibaike.com/imgrank/']
          # start_urls = ['http://https://www.qiushibaike.com/imgrank//']
          #表示start_urls在redis中存放的位置,作用类似start_urls
          redis_key="qiubaispider"
          rules = (
              Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
          )
      
          def parse_item(self, response):
              item = {}
              #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
              #item['name'] = response.xpath('//div[@id="name"]').get()
              #item['description'] = response.xpath('//div[@id="description"]').get()
              return item
      View Code
    4. 配置setting文件,将项目的管道和调度器配置成基于scrapy-redis组件对应提供的功能
      #使用组件封装的管道,不使用原生的管道
      ITEM_PIPELINES = {
         'scrapy_redis.pipelines.RedisPipeline': 300,
      }
      # 使用scrapy-redis组件的去重队列进行去重操作
      DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
      
      # 使用scrapy-redis组件自己的调度器
      SCHEDULER = "scrapy_redis.scheduler.Scheduler"
      
      # 是否允许暂停,即程序意外宕机重启后从上次意外退出的地方重新爬取
      SCHEDULER_PERSIST = True
      
      #Redis服务器地址,代码拷贝到其他服务器后,爬取的数据将保存到如下地址的redis服务器中
      REDIS_HOST="192.168.1.1"
      
      #Redis服务器端口
      REDIS_PORT=6379
    5. 执行爬虫文件,进入爬虫目录scrapy runspider qiubai.py,启动后爬虫就开始监听redis的qiubaispider键对应的内容

    6. 将起始url放入redis中:127.0.0.1:6379> lpush qiubaispider https://www.qiushibaike.com/pic/
    7. 开始爬取内容

    基于RedisSpider实现分布式爬虫

    UA池:user-agent池

    代理池:对代理IP进行批量更换

    selenium如何应用到scrapy框架

  • 相关阅读:
    老杳:2017年中国集成电路产业十大新闻
    RMA退货流程解决方案
    Linux
    vue.js
    NET Core度身定制的AOP框架
    Timeline
    HTTP
    MVC 常用扩展点:过滤器、模型绑定等
    装箱拆箱
    jQuery Tree
  • 原文地址:https://www.cnblogs.com/yaya625202/p/10432038.html
Copyright © 2020-2023  润新知