Scrapy+redis实现分布式爬虫
概述
什么是分布式爬虫
- 需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一网络资源进行联合且分布的数据爬取。
原生Scrapy无法实现分布式的原因
- 原生Scrapy中调度器不可以被共享
- 每一台机器都拥有一个调度器,如果一个机群共享一个调度器就可以了。
- 原生Scrapy中管道不可以被共享
- 每一台机器都拥有自己的管道,如果把Item发送到同一个管道就可以了。
Scrapy_redis组件的作用是什么?
- 提供可以被共享的管道和调度器
分布式的实现流程
实现分布式的重点在于配置
环境的安装
pip install scrapy-redis
创建工程
- 基于Spider:
scrapy genspider crawl spiderName - 基于CrawlSpider:
scrapy genspider -t crawl spiderName
- 基于Spider:
cd 工程
创建爬虫文件
- 基于Spider
- 基于CrawlSpider
修改爬虫文件:
- 导包:
from scrapy_redis.spiders import RedisCrawlSpider基于 CrawlSpider 爬虫文件from scrapy_redis.spiders import RedisSpider基于Spider爬虫文件
- 将父类修改为 RedisCrawlSpider 或 RedisSpider
- 删除 allowed_domains 和 start_urls
- 添加 redis_key = ‘队列名称’ :可被共享的调度器队列的名称,向这个队列中放入起始url
- 根据常规形式编写爬虫文件后续的代码
- 导包:
修改settings配置
指定管道
1
2
3ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 400
}
指定调度器
1
2
3
4
5
6# 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
SCHEDULER_PERSIST = True
指定redis数据库
1
2REDIS_HOST = '192.168.13.254'
REDIS_PORT = 6379
修改redis的配置文件
- 关闭默认绑定
- 56行 注释 bind 127.0.0.1
- 关闭保护模式
- 75行 protected-mode no
- 这样就可以写数据了
- 关闭默认绑定
启动redis的服务端(携带配置文件)和客户端
redis-server.exe redis.windows.conf
启动分布式的程序:
- 启动之后才会有调度器对象和队列
- scrapy runspider xxx.py
- 启动后在等起始url
向调度器的队列中扔入一个起始的url
- 队列是存在于redis中
- redis的客户端中:lpush sun www.xxx.com
在redis中就可以查看爬取到的数据
例子
使用Scrapy + Scrapy-redis 组件实现的分布式爬取(阳光热线问政平台的投诉帖子)的主题、状态和详细内容
地址为:http://wz.sun0769.com/html/top/reply.shtml
①
scrapy startproject fbsPro 创建基于fbsPro的工程
scrapy genspider -t crawl fbs 域名 创建名为fbs的spider文件
1 |
# fbs.py |
②
定义Item
1 |
# items.py |
③
配置settings.py
1 |
#指定管道 |
Scrapy+redis实现分布式爬虫的更多相关文章
- 基于Python,scrapy,redis的分布式爬虫实现框架
原文 http://www.xgezhang.com/python_scrapy_redis_crawler.html 爬虫技术,无论是在学术领域,还是在工程领域,都扮演者非常重要的角色.相比于其他 ...
- scrapy如何实现分布式爬虫
使用scrapy爬虫的时候,记录一下如何分布式爬虫问题: 关键在于多台主机协作的关键:共享爬虫队列 主机:维护爬取队列从机:负责数据抓取,数据处理,数据存储 队列如何维护:Redis队列Redis 非 ...
- scrapy——7 scrapy-redis分布式爬虫,用药助手实战,Boss直聘实战,阿布云代理设置
scrapy——7 什么是scrapy-redis 怎么安装scrapy-redis scrapy-redis常用配置文件 scrapy-redis键名介绍 实战-利用scrapy-redis分布式爬 ...
- 阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis将任务队列push进redis
Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取.但是当我们要爬取的页面非常多的时候,单个服务器的处理能力就不能满足我们的需求了(无论是处理速度还是网络请 ...
- 基于scrapy框架的分布式爬虫
分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...
- 在阿里云Centos7.6上面部署基于Redis的分布式爬虫Scrapy-Redis
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_83 Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取.但是当我们要爬取的页面非常多的 ...
- Python36 使用Redis 构建分布式爬虫(未完)
很长时间未更新了,人懒了. 最近有不少的东西,慢慢写吧,最近尝试了一下python 使用Redis 来构建分布式爬虫: 单体爬虫有很多缺点,但是在学习过程中能够学习爬虫的基本理念与运行模式,在后期构建 ...
- Scrapy 教程(八)-分布式爬虫
scrapy 本身并不是一个分布式框架,而 Scrapy-redis 库使得分布式成为可能: Scrapy-redis 并没有重构框架,而是基于redis数据库重写了框架的某些组件. 分布式框架要解决 ...
- 第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码
第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码 scrapy-redis是一个可以scrapy结合redis搭建分布式爬虫的开 ...
随机推荐
- Java&Selenium自动化测试之数据驱动
一.摘要 本片博文以四个方式展示自动化测试的数据驱动,数组.CSV.Excel.Mysql 二.TestNG&Csv&Driven package testNGWithDataDriv ...
- C#中 委托和事件的关系
首先,委托 是一个好东西.按我的理解,委托 是针对 方法 的更小粒度的抽象.比较interface,他精简了一些代码.使得 订阅-通知 (观察者模式)的实现变得非常简洁. 关于事件,我最初的理解是:事 ...
- Redis数据类型操作说明
List数据操作 lpush 语法:lpush key value [value…] 作用:将一个或多个值 value 插入到列表 key 的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到 ...
- C#新增按钮
代码亲测可用,似乎不需要“ADD”,如下:form_load段:for (int i = 0; i < 10; i++){btn = new Button();btn.Parent = this ...
- Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequences(DP)
题目链接:http://codeforces.com/contest/1058/problem/E 题意:给出 n 个数,对于一个选定的区间,区间内的数可以通过重新排列二进制数的位置得到一个新的数,问 ...
- find(expr|obj|ele)搜索所有与指定表达式匹配的元素。
find(expr|obj|ele) 概述 搜索所有与指定表达式匹配的元素.这个函数是找出正在处理的元素的后代元素的好方法. 所有搜索都依靠jQuery表达式来完成.这个表达式可以使用CSS1-3的选 ...
- Window Service安装不成功
1. 加Winsow Service 2. 加Setup Project Add -> Project Output , 选中Primary output from Winsow Serv ...
- HDU 5527 Too Rich ( 15长春区域赛 A 、可贪心的凑硬币问题 )
题目链接 题意 : 给出一些固定面值的硬币的数量.再给你一个总金额.问你最多能用多少硬币来刚好凑够这个金额.硬币数量和总金额都很大 分析 : 长春赛区的金牌题目 一开始认为除了做类似背包DP那样子 ...
- Python相关分析—一个金融场景的案例实操
哲学告诉我们:世界是一个普遍联系的有机整体,现象之间客观上存在着某种有机联系,一种现象的发展变化,必然受与之关联的其他现象发展变化的制约与影响,在统计学中,这种依存关系可以分为相关关系和回归函数关系两 ...
- Pytest学习笔记(三) 在代码中运行pytest
前面介绍的是在cmd中执行pytest,平常我们一般都是通过编译器(如pycharm)来编写用例的,写完用例后,需要调试看看是否能运行,如果每次都切换到cmd中执行,太麻烦. 因此,这一节来说下怎么在 ...