Scrapy 教程(八)-分布式爬虫
scrapy 本身并不是一个分布式框架,而 Scrapy-redis 库使得分布式成为可能;
Scrapy-redis 并没有重构框架,而是基于redis数据库重写了框架的某些组件。
分布式框架要解决两个问题
分配爬取任务:为每个爬虫分配不重复的任务
scrapy-redis 使用 redis 数据库存储所有请求,利用 redis 数据库实现请求队列,所有爬虫从该队列中获取任务,并将新产生的请求添加到该队列中;
汇总爬取数据:将所有爬虫的数据汇总到一处
scrapy-redis 使用 RedisPipeline 将数据存储于同一个 redis 数据库中,并用 twisted 框架实现并发存储。
具体实现参考
Scrapy-redis 源码 https://github.com/rmax/scrapy-redis/tree/master/src/scrapy_redis
环境搭建
1. 多台服务器
2. 分别配置 单机爬虫 所需环境
3. 选择一台服务器搭建 redis 数据库
4. 测试集群能否连接 redis
具体实施
1. 创建单机项目
2. 修改配置文件
# 必选项
# =================================================================
# 指定爬虫所使用的Redis数据库(在云服务器116.29.35.201 上)
REDIS_URL = 'redis://116.29.35.201:6379'
# 使用scrapy_redis的调度器替代Scrapy 原版调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 使用scrapy_redis的RFPDupeFilter作为去重过滤器
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 启用scrapy_redis的RedisPipeline将爬取到的数据汇总到Redis数据库
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 300,
}
# 可选项
# =================================================================
#爬虫停止后,保留/清理Redis中的请求队列以及去重集合
# True:保留,False:清理,默认为False
SCHEDULER_PERSIST = True
3. 修改爬虫
from scrapy_redis.spiders import RedisSpider
# 1.更改基类
# class BooksSpider(spider.Spider):
class BooksSpider(RedisSpider): # 2.注释 start_urls
# start_urls = ['http://books.toscrape.com/']
【如何为多个爬虫设置起始爬取点】
单机爬虫 的起始爬取点由 start_urls 确定,但是分布式去掉了 start_urls,然后重写了 start_requests 方法,它尝试从 redis 数据库的某个特定列表中获取起始爬取点,构造request对象,并设置 dont_filter=False,
该列表可通过配置文件设定,REDIS_START_URLS_KEY,默认为 <spider_name>:start_urls;
在分布式爬取时,运行所有爬虫后,需要手动向该列表添加起始爬取点,之后只有其中一个爬虫获取到该起始点,避免重复。
4. 分发代码到其他机器
5. 每台机器上运行爬虫
6. 爬虫处于等待状态,在任一台机器上连接redis,设置爬取起始点
lpush books:start_urls 'http://books.toscrape.com'
其中一个爬虫获取该url,此后整个爬虫开始运转。
参考资料:
《精通scrapy网络爬虫》 pdf
Scrapy 教程(八)-分布式爬虫的更多相关文章
- 基于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分布式爬 ...
- Scrapy+redis实现分布式爬虫
概述 什么是分布式爬虫 需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一网络资源进行联合且分布的数据爬取. 原生Scrapy无法实现分布式的原因 原生Scrapy中调度器 ...
- Python爬虫教程-新浪微博分布式爬虫分享
爬虫功能: 此项目实现将单机的新浪微博爬虫重构成分布式爬虫. Master机只管任务调度,不管爬数据:Slaver机只管将Request抛给Master机,需要Request的时候再从Master机拿 ...
- 基于scrapy框架的分布式爬虫
分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...
- Scrapy分布式爬虫,分布式队列和布隆过滤器,一分钟搞定?
使用Scrapy开发一个分布式爬虫?你知道最快的方法是什么吗?一分钟真的能 开发好或者修改出 一个分布式爬虫吗? 话不多说,先让我们看看怎么实践,再详细聊聊细节~ 快速上手 Step 0: 首先安装 ...
- Python分布式爬虫必学框架Scrapy打造搜索引擎 学习教程
Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 1.创建搜索自动补全字段suggest自动补全需要用 ...
- scrapy简单分布式爬虫
经过一段时间的折腾,终于整明白scrapy分布式是怎么个搞法了,特记录一点心得. 虽然scrapy能做的事情很多,但是要做到大规模的分布式应用则捉襟见肘.有能人改变了scrapy的队列调度,将起始的网 ...
随机推荐
- 上传200G文件
最近遇见一个需要上传百G大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- POJ 1912 凸包
题目: #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib& ...
- JMS学习二(简单的ActiveMQ实例)
下载安装ActiveMQ服务,下载地址当然可以去官网下载 http://activemq.apache.org/download-archives.html ActiveMQ安装很简单,下载解压后到b ...
- Json和XML的一些差别
XML: 扩展标记语言,可以用来标记数据.定义数据类型, 优缺点: 1.格式统一,符合标准: 2.容易与其他系统进行远程交互,数据共享比较方便 3.XML文件庞大,文件格式复杂,传输占带宽,较复杂 J ...
- sqli-labs(26a)
0x01偷偷看一波源码 和26关一样 闭合变成了’)而已 0X01构造语句爆库名 这是百度到的 第一个 ' 首先闭合id='$id' 中的',%a0是空格的意思,(ps:此处我的环境是ubuntu14 ...
- vim编辑器快捷键
光标控制命令 命令 光标移动 h或^h 向左移一个字符 j或^j或^n 向下移一行 k或^p 向上移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开 ...
- mvn deploy上传私服Nexus时遇到的坑--ReasonPhrase: Forbidden.
用maven deploy上传jar包时,遇到了ReasonPhrase: Forbidden 错误,截图如下: 折腾了好久,终于解决,现把步骤简单记录如下: 1.自建仓库eagle-sky: 2.设 ...
- Linux轻量级自动运维工具-Ansible浅析 转
转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...
- eclipse link方式安装插件安装不上
只能要features和plugins两个文件夹,其他文件需要删除
- 安装ubuntu双系统
今天在win7下安装ubuntu14.1双系统,别折磨了一个下午.主要是开机系统引导问题. 引导程序是位于硬盘最前面的一段程序,由于扇区大部分是引导程序,故也成引导扇区.此外包含有硬盘的分区信息,共6 ...