基于scrapy-redis的分布式爬虫

1、scrapy框架是否可以自己实现分布式?

  答:不可以。原因有二:

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

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

2、基于scrapy-redis组件的分布式爬虫

- scrapy-redis组件中为我们封装好了可以被多台机器共享的调度器和管道,我们可以直接使用并实现分布式数据爬取。

- 实现方式:

1.基于该组件的RedisSpider类

2.基于该组件的RedisCrawlSpider类

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

1.环境安装:pip install scrapy-redis
2.创建工程
   -scrapy startproject proName
3.创建爬虫文件:RedisCrawlSpider  RedisSpider
    - scrapy genspider -t crawl xxx www.xxx.com
4.对爬虫文件中的相关属性进行修改:
    - 导入:from scrapy_redis.spiders import RedisCrawlSpider
    - 将当前爬虫文件的父类设置成RedisCrawlSpider
    - 将起始url列表替换成redis_key = ‘xxx‘(调度器队列的名称)
5.在配置文件中进行配置:
    - 使用组件中封装好的可以被共享的管道类:
        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 = ‘redis服务的ip地址‘
        REDIS_PORT = 6379

6.配置redis数据库的配置文件
     - 取消保护模式:protected-mode no   表示可以让其他ip操作redis
     - 注释bind绑定: #bind 127.0.0.1  表示可以让其他ip访问redis

7.启动redis(指定配置文件启动)

8.执行分布式程序
    scrapy runspider xxx.py

9.向调度器队列中仍入一个起始url
    在redis-cli中执行:lpush 队列名 起始url

原文地址:https://www.cnblogs.com/fengchong/p/10479559.html

时间: 2024-10-10 20:30:27

基于scrapy-redis的分布式爬虫的相关文章

基于requests+redis的分布式爬虫

简单的网络爬虫是对一个url进行请求,并等待其返回响应.在数据量小的情况下很实用,但是当你的数据量很大,显然分布式爬虫就更占优势!关于分布式,一般是使用一台主机(master)充当多个爬虫的共享redis队列,其他主机(slave)采用远程连接master,关于redis如何安装,这里不多做介绍! 以爬虫伯乐在线的python文章为例,我的分布式爬虫由main01 main02 main03三个python文件构成,main01的主要任务是运行在master上,将文章的url爬取下来存入redi

Scrapy框架之基于RedisSpider实现的分布式爬虫

需求:爬取的是基于文字的网易新闻数据(国内.国际.军事.航空). 基于Scrapy框架代码实现数据爬取后,再将当前项目修改为基于RedisSpider的分布式爬虫形式. 一.基于Scrapy框架数据爬取实现 1.项目和爬虫文件创建 $ scrapy startproject wangyiPro $ cd wangyiPro/ $ scrapy genspider wangyi news.163.com # 基于scrapy.Spider创建爬虫文件 2.爬虫文件编写--解析新闻首页获取四个板块的

Redis实现分布式爬虫

redis分布式爬虫 概念:多台机器上可以执行同一个爬虫程序,实现网站数据的爬取 原生的scrapy是不可以实现分布式爬虫, 原因如下: 调度器无法共享 管道无法共享 scrapy-redis组件:专门为scrapy开发的一套组件. 该组件可以让scrapy实现分布式 pip install scrapy-redis 分布式爬取的流程: 1 redis配置文件的配置 将 bind 127.0.0.1 进行注释 将 protected-mode no 关闭保护模式 2 redis服务器的开启:基于

redis之分布式爬虫

分布式爬虫一般最少需要三台机器,一台为主服务器,用于生产爬虫任务,其它服务器用于消费爬虫任务. 准备爬取妹子图,主页地址 主服务器生产爬取任务 getUrlList.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ __Author__ = 'KongZhaGen' import requests import bs4 import redis def creUrlList(): # 连接到redis服务器,需要密码 r = redis.Redis(

【Scrapy框架基于scrapy-redis实现分布式爬虫】 򓮘

原文: http://blog.gqylpy.com/gqy/370 "Scrapy框架无法自己实现分布式,原因有二 多台机器上部署的Scrapy各自拥有各自的调度器,这样就使得多台机器无法分配 start_urls 列表中的url,即多台机器无法共享同一个调度器. 多台机器爬取到的数据无法通过同一个管道进行统一的持久化存储,即多台机器无法共享同一个管道. ___ 基于 scrapy-redis 组件的分布式爬虫 安装 :pip install scrapy-redis scrapy-redis

CK21144-Python分布式爬虫必学框架Scrapy打造搜索引擎

随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了.对于学习有困难不知道如何提升自己可以加扣:1225462853进行交流得到帮助,获取学习资料. 下载地址:http://pan.baidu.com/s/1jI05TPW 单机爬虫(Scrapy)到分布式爬虫(Scrapy-Redis)的完美实战 不怕你和别的爬虫课程比较,随便去看,你会明白,慕课网的情怀从来不是

基于Python使用scrapy-redis框架实现分布式爬虫 注

注:本文是在http://www.111cn.net/sys/CentOS/63645.htm,http://www.cnblogs.com/kylinlin/p/5198233.html的基础上加以改动的!版权归alex.shu,kylinlin所有. 1.首先介绍一下:scrapy-redis框架 scrapy-redis:一个三方的基于redis的分布式爬虫框架,配合scrapy使用,让爬虫具有了分布式爬取的功能.github地址: https://github.com/darkrho/s

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

redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url.(多台机器无法共享同一个调度器) 其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储.(多台机器无法共享同一个管道) 2.基于scrapy-redis组件的分布式爬虫 - scrapy-redis组件中为我们封装好了可以被多台机器共享的调度器和管道,我们可以直

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

redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url.(多台机器无法共享同一个调度器) 其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储.(多台机器无法共享同一个管道) 2.基于scrapy-redis组件的分布式爬虫 - scrapy-redis组件中为我们封装好了可以被多台机器共享的调度器和管道,我们可以直