使用scrapy-redis搭建分布式爬虫环境

 </h1><div class="clear"></div><div class="postBody">

scrapy-redis简介

scrapy-redis是scrapy框架基于redis数据库的组件,用于scrapy项目的分布式开发和部署。

有如下特征:

 分布式爬取

  您可以启动多个spider工程,相互之间共享单个redis的requests队列。最适合广泛的多个域名网站的内容爬取。

 分布式数据处理

  爬取到的scrapy的item数据可以推入到redis队列中,这意味着你可以根据需求启动尽可能多的处理程序来共享item的队列,进行item数据持久化处理

 Scrapy即插即用组件

  Scheduler调度器 + Duplication复制 过滤器,Item Pipeline,基本spider

scrapy-redis架构

scrapy-redis整体运行流程如下:

1. 首先Slaver端从Master端拿任务(Request、url)进行数据抓取,Slaver抓取数据的同时,产生新任务的Request便提交给 Master 处理;

2. Master端只有一个Redis数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬队列,并且存储爬取的数据。

Scrapy-Redis默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作Scrapy-Redis都已经帮我们做好了,我们只需要继承RedisSpider、指定redis_key就行了。

缺点是,Scrapy-Redis调度的任务是Request对象,里面信息量比较大(不仅包含url,还有callback函数、headers等信息),

可能导致的结果就是会降低爬虫速度、而且会占用Redis大量的存储空间,所以如果要保证效率,那么就需要一定硬件水平。

scrapy-redis安装

通过pip安装即可:pip install scrapy-redis

一般需要python、redis、scrapy这三个安装包

官方文档:https://scrapy-redis.readthedocs.io/en/stable/

源码位置:https://github.com/rmax/scrapy-redis

参考博客:https://www.cnblogs.com/kylinlin/p/5198233.html

scrapy-redis常用配置

一般在配置文件中添加如下几个常用配置选项:

1(必须). 使用了scrapy_redis的去重组件,在redis数据库里做去重

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

2(必须). 使用了scrapy_redis的调度器,在redis里分配请求

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

3(可选). 在redis中保持scrapy-redis用到的各个队列,从而允许暂停和暂停后恢复,也就是不清理redis queues

SCHEDULER_PERSIST = True

4(必须). 通过配置RedisPipeline将item写入key为 spider.name : items 的redis的list中,供后面的分布式处理item 这个已经由 scrapy-redis 实现,不需要我们写代码,直接使用即可

ITEM_PIPELINES = {   'scrapy_redis.pipelines.RedisPipeline': 100 ,}

5(必须). 指定redis数据库的连接参数

REDIS_HOST = '127.0.0.1' REDIS_PORT = 6379

scrapy-redis键名介绍

scrapy-redis中都是用key-value形式存储数据,其中有几个常见的key-value形式:

1、 “项目名:items”  -->list 类型,保存爬虫获取到的数据item 内容是 json 字符串

2、 “项目名:dupefilter”   -->set类型,用于爬虫访问的URL去重 内容是 40个字符的 url 的hash字符串

3、 “项目名: start_urls”   -->List 类型,用于获取spider启动时爬取的第一个url

4、 “项目名:requests”   -->zset类型,用于scheduler调度处理 requests 内容是 request 对象的序列化 字符串

scrapy-redis简单实例

在原来非分布式爬虫的基础上,使用scrapy-redis简单搭建一个分布式爬虫,过程只需要修改一下spider的继承类和配置文件即可,很简单。

原非分布式爬虫项目,参见:https://www.cnblogs.com/pythoner6833/p/9018782.html

首先修改配置文件,在settings.py文件中添加代码:

然后需要修改的文件,是spider文件,原文件代码为:

修改为:

只修改了两个地方,一个是继承类:由scrapy.Spider修改为RedisSpider

然后start_url已经不需要了,修改为:redis_key = "xxxxx",其中,这个键的值暂时是自己取的名字,

一般用项目名:start_urls来代替初始爬取的url。由于分布式scrapy-redis中每个请求都是从redis中取出来的,因此,在redis数据库中,设置一个redis_key的值,作为初始的url,scrapy就会自动在redis中取出redis_key的值,作为初始url,实现自动爬取。

因此:来到redis中,添加代码:

即:在redis中设置一个键值对,键为tencent2:start_urls , 值为:初始化url。即可将传入的url作为初始爬取的url。

如此一来,分布式已经搭建完毕。


感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接
分类: 网络爬虫
标签: scrapy-redis, 分布式
<div id="blog_post_info">
好文要顶 关注我 收藏该文

温良Miner
关注 - 0
粉丝 - 15

+加关注
1
1
<div class="clear"></div>
<div id="post_next_prev"><a href="https://www.cnblogs.com/pythoner6833/p/9110571.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/pythoner6833/p/9110571.html" title="发布于 2018-05-30 15:28">python与redis交互及redis基本使用</a>
<br>
<a href="https://www.cnblogs.com/pythoner6833/p/9157431.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/pythoner6833/p/9157431.html" title="发布于 2018-06-08 20:03">scrapy自动抓取蛋壳公寓最新房源信息并存入sql数据库</a>
posted @ 2018-06-07 13:52  温良Miner 阅读( 8090) 评论( 0) 编辑 收藏
刷新评论 刷新页面 返回顶部
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【活动】京东云服务器_云主机低于1折,低价高性能产品备战双11
【推荐】天翼云双十一提前开抢,1核1G云主机3个月仅需59元
【推荐】阿里云双11活动,热门产品低至一折等你来抢!
【福利】个推四大热门移动开发SDK全部免费用一年,限时抢!
相关博文:
· Python爬虫从入门到放弃(二十)之 Scrapy分布式原理
· python——scrapy-redis分布式组件
· Scrapy+Scrapy-redis+Scrapyd+Gerapy分布式爬虫框架整合
· Scrapy-redis分布式+Scrapy-redis实战
· 分布式爬虫与增量式爬虫
» 更多推荐...
    <div id="google_ads_iframe_/1090369/C2_0__container__" style="border: 0pt none;"><iframe id="google_ads_iframe_/1090369/C2_0" title="3rd party ad content" name="google_ads_iframe_/1090369/C2_0" width="468" height="60" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" srcdoc="" style="border: 0px; vertical-align: bottom;" data-google-container-id="2" data-load-complete="true"></iframe></div></div>
</div>
<div id="under_post_kb">

最新 IT 新闻:
· 雅虎关闭,一个时代的落幕
· AlphaStar冲上《星际争霸II》宗师是因为手速够快吗?
· 半夜准时"下班"的12306 都在干什么?
· 边缘计算:你需要知道的一切
· 爆雷!专家4小时发现百度Apollo、英伟达DriveAV 561 个故障
» 更多新闻...

使用scrapy-redis搭建分布式爬虫环境相关推荐

  1. Scrapy+redis+mongodb分布式爬虫抓取小说《冰与火之歌1-5》

    一年前写了python简单实战项目:<冰与火之歌1-5>角色关系图谱构建的数据库设计和数据可视化共现图谱的构建,中间唯独缺了数据的采集,因为想着只是个小爬虫,应该无关痛痒,后面也觉得这个系 ...

  2. 使用Docker Swarm搭建分布式爬虫集群

    转载自  使用Docker Swarm搭建分布式爬虫集群 在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况.此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运 ...

  3. Beego框架简介准备搭建分布式爬虫

    一.Beego简介 用scaffold脚手架工具搭建框架 每个方法都有@Router注解 Beego是MVC框架:降低耦合,提供复用性 部署 灰度上线:按产品需求优先级,抽出核心需求,在满足用户基本要 ...

  4. scrapy框架之分布式爬虫

    概念:我们需要搭建一个分布式的机群,让其对一组资源进行分布联合爬取 作用:提升爬取数据的效率 如何实现分布式? 安装一个scrapy-redis的组件(使用的是redis数据库) 原生的scrapy是 ...

  5. scrapy——7 scrapy-redis分布式爬虫,用药助手实战,Boss直聘实战,阿布云代理设置...

    scrapy--7 什么是scrapy-redis 怎么安装scrapy-redis scrapy-redis常用配置文件 scrapy-redis键名介绍 实战-利用scrapy-redis分布式爬 ...

  6. [416]使用Docker Swarm搭建分布式爬虫集群

    在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况.此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了,于是又要一个服务器一个服务器登录上去依次更 ...

  7. Redis实现分布式爬虫

    redis分布式爬虫 概念:多台机器上可以执行同一个爬虫程序,实现网站数据的爬取 原生的scrapy是不可以实现分布式爬虫, 原因如下: 调度器无法共享 管道无法共享 scrapy-redis组件:专 ...

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

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

  9. IDEA下搭建分布式开发环境

    1.分布式分类: 1)分布式计算 一项任务由多个服务器共同完成的. 2)分布式系统 将项目按照特定的功能模块及层级进行拆分.从而降低整个系统架构的耦合性问题. 2.为什么使用分布式: 传统项目将所有的 ...

最新文章

  1. 第十八章 MySQL Workbench5.2使用(待续)
  2. 抽取文档主题之gensim实现
  3. 弗洛伊德算法_弗洛伊德算法
  4. laravel数据库相关操作
  5. html form callback,Promise异步编程模式总结初始化Promise对象统一错误处理PromisifyfromCallbackMongoose Promisify...
  6. C#_解决在控制台中输入Ctrl+Z的问题
  7. 使用minidom来处理XML的示例(Python 学习)(转载)
  8. MongoDB笔记(一):MongoDB介绍及Windows下安装
  9. 「PHP 是最好的语言」这个梗是怎么来的?
  10. 名字作诗,拯救诗歌的最后一根稻草
  11. win7计算机未连接网络,教你w7电脑本地连接受限制或无连接的七种解决方法
  12. (干货分享)如何下载网站上的视频
  13. 佛说五百年的回眸才换来今生的擦肩而过
  14. springboot+基于Web的开关柜综合监测信息查询系统的设计与实现 毕业设计-附源码191550
  15. body加背景图片没反应_css设置背景图片不显示问题
  16. JS如何实现多线程?
  17. Docker基础学习笔记( 搭建web漏洞检测环境和容器中运行Django项目)
  18. 读书笔记15:VAIN:Attentional Multi-agent Predictive Modeling
  19. JAVA入门基础(5)—— 流程控制
  20. 微信小程序日历插件 - 极点日历

热门文章

  1. 铅球掷远模型matlab,铅球掷远问题的数学模型.doc
  2. 农产品追溯系统免费源代码分享及下载---第4篇(已开源)
  3. python----------------flake8
  4. 【颜纠日记】百度搜索语法带图教学实操“找文章篇”分享
  5. 利用现有监控如海康威视、大华等实现人体动作姿态识别应用
  6. 如何让新员工快速成长
  7. Kaggle 自行车租赁预测比赛项目实现
  8. 蜘蛛池源码php,PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错...
  9. 1218_整数因子分解
  10. 两家人拉一根电信宽带线入户供日常使用,有问题吗?