基于redis的分布式爬虫

问题:

(1)为什么原生的scrapy框架不可以自己实现分布式爬虫?

原因有两个:

(1)因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url(调度器不能被共享)

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

(2)scrapy-redis组件的作用是什么?

它提供了可以被共享的调度器和管道

(3)如何使用scrapy-redis组件来实现分布式爬虫?

其一:基于该组件的RedisSpider类

其二:基于该组件的RedisCrawlSpider类

但是这两种实现分布式爬虫的实现流程是一致的

分布式的实现流程:

1 下载scrapy-redis组件:

pip install scrapy_redis

2 创建工程

3 创建爬虫文件:RedisSpider RedisCrawlSpider

- scrapy genspider -t crawl xxx www.xxx.com

4 对爬虫文件中的相关属性进行修改:

  • 导入:from scrapy_redis.spiders import RedisCrawlSpider
  • 将爬虫类的父类修改成基于RedisSpider或者RedisCrawlSpider。注意:如果原始爬虫文件是基于Spider的,则应该将父类修改成RedisSpider,如果原始爬虫文件是基于CrawlSpider的,则应该将其父类修改成RedisCrawlSpider
  • 注释或者删除start_urls列表,切加入redis_key属性。也就是将起始的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地址'# 一般写127.0.0.1REDIS_PORT = 6379

6 在redis数据库的配置文件中修改一些数据

  • 取消保护模式:

    protected-mode no  #表示可以让其他ip操作redis
  • bind绑定:将这一行注释掉 因为只有注释掉了 才能进行分布式

    #bind 127.0.0.1  表示可以让其他ip访问redis
  • 启动redis

开启redis服务端:在终端中输入 redis-server

开启redis客户端: 在开启服务端之后 在终端输入 redis-cli

7 执行分布式程序

  • 进入到项目下的spiders中

    cd 该项目
    cd spiders
  • 在spiders目录下 查看你的爬虫文件存不存在

dir
  • 在执行此命令

    scrapy runspider xxx.py   #xxx.py是你的爬虫文件名

8 向调度器队列中扔入一个url

  • 在redis-cli执行之后,执行此命令

    lpush chouti https://dig.chouti.com/
    #这里要注意的是 chouti是 爬虫文件中redis_key = 'chouti'#调度器队列的名称  后面的地址是你要爬取的网站的地址
  • 在查看redis中是否有存储到数据

    key *

转载于:https://www.cnblogs.com/mlhz/p/10480121.html

python爬虫之基于scrapy_redis的分布式爬虫相关推荐

  1. scrapy 分布式 mysql_Scrapy基于scrapy_redis实现分布式爬虫部署的示例

    准备工作 1.安装scrapy_redis包,打开cmd工具,执行命令pip install scrapy_redis 2.准备好一个没有BUG,没有报错的爬虫项目 3.准备好redis主服务器还有跟 ...

  2. python分布式爬虫及数据存储_分布式爬虫

    爬虫学习使用指南 Auth: 王海飞 Data:2018-07-05 Email:779598160@qq.com github:https://github.com/coco369/knowledg ...

  3. python分布式爬虫系统_三种分布式爬虫系统的架构方式

    分布式爬虫系统广泛应用于大型爬虫项目中,力求以最高的效率完成任务,这也是分布式爬虫系统的意义所在. 分布式系统的核心在于通信,介绍三种分布式爬虫系统的架构思路,都是围绕通信开始,也就是说有多少分布式系 ...

  4. 2个月精通Python爬虫——3大爬虫框架+6场实战+分布式爬虫,包教包会

    2019独角兽企业重金招聘Python工程师标准>>> 阿里云大学在线工作坊上线,原理精讲+实操演练,让你真正掌握云计算.大数据技能. 在第一批上线的课程中,有一个Python爬虫的 ...

  5. 手把手教你搭建一个基于Java的分布式爬虫系统

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

  6. 【通用技术】2个月精通Python爬虫——3大爬虫框架+6场实战+分布式爬虫,包教包会...

    网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取信息的程序或者脚本. 网络爬虫是互联网上进行信息采集的通用手段,在互联网的各个专业方向上都是不可或缺的底层技术支撑.本课程从爬 ...

  7. Python爬虫进阶——Scrapy框架原理及分布式爬虫构建

    1 Scrapy简介 1.1 概念 Scrapy是由Python语言开发的一个快速.高层次的屏幕抓取和web信息抓取框架,用于抓取web站点并从页面中提取结构化的数据. Scrapy用途广泛,可以用于 ...

  8. python队列来做什么_python分布式爬虫中的消息队列是什么?

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...

  9. 基于PyHusky的分布式爬虫原理及实现

    原理 爬虫是我们获取互联网数据的一个非常有效的方法,而分布式爬虫则是利用许多台机器协调工作来加快抓取数据效率的不二途径.分布式爬虫是由访问某些原始网址开始,在获取这些网址的内容后,根据某些规则从中提取 ...

最新文章

  1. 电脑桌面便签小工具_可以直接在桌面上显示内容的便签软件电脑版
  2. Windows2008 组策略应用
  3. nginx php 配置 windows_Windows下配置Nginx使之支持PHP
  4. 浅析ASP.NET的Page.IsPostBack 属性http://www.sina.com.cn 2008年05月06日 11:33 IT168.com
  5. python(16)-列表list,for循环
  6. 《JS权威指南学习总结--6.1原型》
  7. jeecg 3.5.2 新版本4种首页风格 【经典风格,shortcut风格,ACE bootstrap风格,云桌面风格】
  8. STM32F103_EXTI外部中断
  9. win10系统配置服务器地址,win10系统配置服务器地址
  10. 【Python笔记】网络编程
  11. CodeForces 274B Zero Tree :每次选包含1节点的一棵子树,将该子树所有值都+1或者-1最少多少步可以使树值全部为0 :树型dp...
  12. linux 下.bashrc和.profile的区别
  13. bzoj 4826: [Hnoi2017]影魔
  14. 只让类访问, 而不让类的实例来访问某个成员变量
  15. 廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配
  16. 算法动画图解 | 被 “废弃“ 的 Java 栈,为什么还在用
  17. Windows无法ping通百度IP问题
  18. 聊天系统:服务端 + 客户端 + web端
  19. ipad上的人体模型_我拥有哪种iPad模型?
  20. 免费版医疗器械计算机软件,医疗器械软件描述.docx

热门文章

  1. ORACLE安装请注意事项
  2. “+=”消除格式的强转问题
  3. verilog中级别到底是什么?级别的分类是什么???
  4. Oracle11g RAC常用操作 (维护及管理)
  5. Eclipse Juno在ubuntud的安装(SVN)
  6. 人生致命的8个经典问题,你也常常犯傻
  7. Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令]
  8. 键盘录入学生信息,保存到集合中
  9. [转]微信小程序开发需要注意的29个坑
  10. Codeforces - 914F bitset 维护字符串匹配个数