利用scrapy_redis实现分布式爬虫
介绍
Scrapy框架不支持分布式,所以需要将一些关键代码进行修改使之支持分布式。scrapy-redis相当于一个插件,用来替换scrapy中的一些模块,使得scrapy支持分布式。github地址: https://github.com/darkrho/scrapy-redis
redis
redis是一个可基于内存,亦可持久化的key-value数据库,特点是速度快。
原理
在scrapy框架中加入scrapy-redis模块,目的在于将scrapy中的schedule模块替换为scrapy-redis模块。在scrapy-redis中,基于redis数据库构建request队列,所有的爬虫都可以从该redis数据库中获取request,并且所有爬虫产生的request都会送入该redis中。基于此原理实现分布式爬虫功能。
改进
在scrapy-redis中有url判重功能,减少重复爬取。但是其实现比较粗糙,所以可以自定义一个url去重功能,例如使用bloom filter算法 。可以基于redis实现bloom filter算法,既实现了快速判重功能,又能节省内存。此外,可以充分利用redis数据库速度快且可持久化的特点,实现item过滤等等。
Reference
【Bloom Filter原理】
http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html
http://blog.csdn.net/bone_ace/article/details/53107018
【Bloom Filter python实现】
http://blog.csdn.net/bone_ace/article/details/53107018
【scrapy-redis去重优化】
http://blog.csdn.net/bone_ace/article/details/53099042
https://github.com/LiuXingMing/Scrapy_Redis_Bloomfilter
【scrapy-redis种子优化】
http://blog.csdn.net/Bone_ACE/article/details/53306629
【利用redis实现item去重】
https://www.jianshu.com/p/f03479b9222d
https://www.jianshu.com/p/7b6c1754ee73
【yinzm的个人项目:完整的分布式爬虫】
https://github.com/yinzm/XueqiuCrawler
利用scrapy_redis实现分布式爬虫的更多相关文章
- scrapy分布式爬虫scrapy_redis二篇
=============================================================== Scrapy-Redis分布式爬虫框架 ================ ...
- scrapy分布式爬虫scrapy_redis一篇
分布式爬虫原理 首先我们来看一下scrapy的单机架构: 可以看到,scrapy单机模式,通过一个scrapy引擎通过一个调度器,将Requests队列中的request请求发给下载器,进行页 ...
- 第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码
第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码 scrapy-redis是一个可以scrapy结合redis搭建分布式爬虫的开 ...
- 三十六 Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码
scrapy-redis是一个可以scrapy结合redis搭建分布式爬虫的开源模块 scrapy-redis的依赖 Python 2.7, 3.4 or 3.5,Python支持版本 Redis & ...
- scrapy_redis分布式爬虫
文章来源:https://github.com/rmax/scrapy-redis Scrapy-Redis Documentation: https://scrapy-redis.readthedo ...
- python3下scrapy爬虫(第十三卷:scrapy+scrapy_redis+scrapyd打造分布式爬虫之配置)
之前我们的爬虫都是单机爬取,也是单机维护REQUEST队列, 看一下单机的流程图: 一台主机控制一个队列,现在我要把它放在多机执行,会产生一个事情就是做重复的爬取,毫无意义,所以分布式爬虫的第一个难点 ...
- Centos7__Scrapy + Scrapy_redis 用Docker 实现分布式爬虫
原理:其实就是用到redis的优点及特性,好处自己查--- 1,scrapy 分布式爬虫配置: settings.py BOT_NAME = 'first' SPIDER_MODULES = ['fi ...
- Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬虫框架整合
简介:给正在学习的小伙伴们分享一下自己的感悟,如有理解不正确的地方,望指出,感谢~ 首先介绍一下这个标题吧~ 1. Scrapy:是一个基于Twisted的异步IO框架,有了这个框架,我们就不需要等待 ...
- python 全栈开发,Day140(RabbitMQ,基于scrapy-redis实现分布式爬虫)
一.RabbitMQ 队列 在生产者消费模型中,比如去餐馆吃饭的例子.生产者相当于厨师,队列相当于服务员,消费者就是你. 我们必须通过服务员,才能吃饭! 如果队列满了,队列会一直hold住.必须让消费 ...
随机推荐
- 感言&3
- Junit测试中找不到junit.framework.testcase
在使用Junit进行测试时,出现如下问题: 找不到junit.framework.testcase 解决方法: 选中项目->属性->Java构建路径->库->添加外部jar 在 ...
- static成员函数不能调用non-static成员函数
1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-sta ...
- laravel 5.5 《电商实战 》辅助函数
Laravel 提供了很多 辅助函数,有时候我们也需要创建自己的辅助函数. 这里介绍了 tinker,一个laravel内置的php交互式控制台,方便调试php代码 php artisan tinke ...
- 全方位Bindind分析
Binding,音译为绑定,通道捆她想一条数据的高速绑着“源”与“目标”: “源”乃提供数据的一方:“目标”乃接收数据并作出相应反应的一方: 过程感觉就像是,给一个“激励”,就会作出“反应”那样--- ...
- Kubernetes学习之路(二十二)之Pod资源调度
目录 Pod资源调度 1.常用的预选策略 2.优选函数 3.节点亲和调度 3.1.节点硬亲和性 3.2.节点软亲和性 4.Pod资源亲和调度 4.1.Pod硬亲和度 4.2.Pod软亲和度 4.3.P ...
- 升级webpack2
更新:webpack3已经出来了,官方说从2到升级到3不用改一行配置,98%的人没有错误. 项目中用的是webpack1.webpack2已经出来一段时间了.决定升级.其实改动不是很大.修改加测试共花 ...
- L017-linux系统定时任务crond入门小节
L017-linux系统定时任务crond入门小节 oh my god!how old are you? 怎么老是你?没错,我又来了,哈哈哈,今天是我的生日呢,在这么重要的日子里,必须要更一篇学习小节 ...
- 页面弹出全屏浮层或遮罩时,禁止底层body滚动
· 解决方法 针对弹出的浮层的 touchmove事件,添加阻止浏览器默认行为. $('.mask-wrapper').on('touchmove', function (event) { // 监听 ...
- HTML快速入门(一)
一.HTML 是什么? HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (markup language) 标记 ...