15-scrapy-redis两种形式分布式爬虫

Posted 一知....半解

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15-scrapy-redis两种形式分布式爬虫相关的知识,希望对你有一定的参考价值。

什么叫做分布式爬虫?

  分布式爬虫,就是多台机器共用一个scrapy—redis程序高效爬取数据,

  为啥要用分布式爬虫?

    其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url。(多台机器无法共享同一个调度器)

    其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储。(多台机器无法共享同一个管道)

 

scrapy-redis组件分布式爬虫:

  scrapy-redis为我们封装好了多台机器共用的管道以及调度器,导入包调用链接即可实现分布式爬虫。

 分布式实现的方式:1、基于该组件的RedisSpider类

          2、基于该组件的RedisCrawlSpider类

分布式实现流程:上述两种不同方式的分布式实现流程是统一的。

  1、下载scrapy-redis组件:

pip3 install scrapy-redis

  2、导包:

from scrapy_redis.spiders import RedisCrawlSpider

  3、修改爬虫文件的代码

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

    2)将start_urls删除

    3)添加一个新属性redis_key = "ts":可以被共享调度器中的队列名称

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider

class MoviesSpider(RedisCrawlSpider):#修改爬虫类的文件
    name = Movies
    # allowed_domains = [‘www.xxx.com‘]
    # start_urls = [‘https://www.4567tv.tv/frim/index1.html‘]
    redis_key ="ts"#添加一个新属性,redis_key = "ts":可以被共享调度器中的队列名称

  4、设置管道(settings.py)

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    scrapy_redis.pipelines.RedisPipeline: 400
   # ‘RedisCrawlPro.pipelines.RediscrawlproPipeline‘: 300,
}

  5、设置调度器:(settings.py) 在配置文件中进行相关配置,开启使用scrapy-redis组件中封装好的调度器

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

  6、指定redis服务器(settings.py)在配置文件中进行爬虫程序链接redis的配置:

       REDIS_HOST = 本机IP
           REDIS_PORT = 6379
       REDIS_ENCODING = ‘utf-8’
       REDIS_PARAMS = {‘password’:’123456’}
  

  7、redis配置文件的配置:

#配置redis:
            修改Redis的配置文件:redis.windows.conf
                 #bind 127.0.0.1
                 protected-mode no
        8、携带配置文件启动redis服务:
             redis-server ./redis.windows.conf
        9、启动redis客户端

        10、执行工程:scrapy runspider xxx.py

        11、手动将起始url扔入调度器的队列中(redis-cli):lpush ts www.xxx.com

        12、redis-cli: items:xxx#储存文件

备注终端储存数据: 

scrapy crawl CrawlName -o 文件.csv

 

以上是关于15-scrapy-redis两种形式分布式爬虫的主要内容,如果未能解决你的问题,请参考以下文章

基于scrapy-redis两种形式的分布式爬虫

基于scrapy-redis两种形式的分布式爬虫

17,基于scrapy-redis两种形式的分布式爬虫

19.基于scrapy-redis两种形式的分布式爬虫

网络爬虫作业代码代写代实现代做爬虫程序

通用爬虫模块使用(上)