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

    概念:我们需要搭建一个分布式的集群,让其对一组资源进行分布联合爬取

    作用:提升爬取数据的效率

    如何实现分布式:

    安装一个scrapy-redis的组件

    原生的scrapy是不可以实现分布式爬虫的,必须要让scrapy结合着scrapy-redis组件一起实现分布式爬虫

    scrapy-redis组件作用:

    可以给原生的scrapy框架提供可以被共享的管道和调度器


     

    实现流程:

    一、 创建一个工程

    二、创建一个基于CrawlSpider的爬虫文件

    三、修改当前的爬虫文件:

    导包:from scrapy_redis.spiders import RedisCrawlSpider

    将allowed_domains和start_urls注释掉

    添加一个新属性:redis_key = 'sun' 可以被共享的调度器队列的名称

    编写数据解析相关的操作

    将当前爬虫类的父类修改成RedisCrawlSpider

    四、修改配置文件settings:

    1、指定使用可以被共享的管道:

    ITEM_PIPELINES = { 

    'scrapy_redis.pipelines.RedisPipeline': 400

    }

    2、指定调度器:

    # 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    # 使用scrapy-redis组件自己的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
    SCHEDULER_PERSIST = True

    3、指定redis服务器:

    #指定redis服务器
    REDIS_HOST = '127.0.0.1' # redis远程服务器的ip
    REDIS_PORT = 6379
    
    
    # 指定管道
    ITEM_PIPELINES = {
        'scrapy_redis.pipelines.RedisPipeline': 400
    }
    # 指定调度器
    # 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    # 使用scrapy-redis组件自己的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
    SCHEDULER_PERSIST = True
    
    #指定redis服务器
    REDIS_HOST = '127.0.0.1'  # redis远程服务器的ip
    REDIS_PORT = 6379
    
    

    五、redis相关操作配置:

    1、配置redis的配置文件

    linux或者mac:redis.conf

    windows:redis.windows.conf

    2、打开配置文件修改:

    将bind 127.0.0.1进行删除

    关闭保护模式:protected-mode yes改为no

    3、结合着配置文件开启redis服务:

    redis-server 配置文件

    4、启动客户端:

    redis-cli

    六、执行工程

    scrapy renspider xxx.py

    七、向调度器的队列中放入一个起始的url

    调度器的队列在redis的客户端中

    指令:lpush xxx(redis_key) www.xxx.com(起始的url)

    八、爬取到的数据存储在了redis的proName:items这个数据结构中



  • 相关阅读:
    Django之admin
    Django之CSRF(跨站请求伪造)
    Django之Cookie
    Django之Session
    Django|第一部
    简单的udp消息收发
    .net core里使用ado.net访问sqlserver数据库
    CentOS8中安装SQLServer
    CentOS里配置.net core运行环境(含后台运行,附ssh长连接)
    发布"dotNet core"到CentOS8
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/13025255.html
Copyright © 2011-2022 走看看