15.1 分布式爬虫原理与 Redis 的安装
15.1.1 Scrapy 分布式爬虫原理
分布式爬虫也就是集群爬虫。当遇到大型的爬虫任务时,单台计算机是难以满足抓取需求的,毕竟单机有 CPU、IO、带宽等多重限制,这时可以尝试分布式爬虫扩展性能,从而使爬虫更快、更高效。当然可以在不同机器上运行不同网站的爬虫代码,最后把爬取到的数据汇总起来,这种方式虽然不算是分布式爬虫,但确实是爬取多个网站时较好的解决办法。本节所讲的分布式爬虫是一个整体的框架,是多台计算机的联合数据采集,这就涉及爬取任务的分配、URL 的统一去重及数据的统一或分散保存。下面具体看一下,如何用 Scrapy 实现分布式爬虫。
在第 11 章 Scrapy 架构解析中讲过,Scrapy 通过调度器调度待爬取的 URL,调度器可以被看作一个优先级队列,它接受 Request 并将它们入队,Scrapy 引擎从调度器中请求要爬取的任务。要实现分布式爬虫的统一任务调度和 URL 统一去重,一种常见的思路就是多服务器使用同一个调度器,这个处于核心位置的调度器主要完成调度所有其他服务器、URL 统一去重、共享爬取队列等任务。图 15-1 所示为分布式爬虫的架构。
图 15-1 所示的是一个简单的分布式爬虫,调度服务器处于核心位置,需要维护整个的爬取队列并统一去重。调度服务器的爬取队列一般通过 Redis 数据库维护。Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、非关系型、Key-Value 数据库,其结构十分灵活。Redis 是内存中的数据结构存储系统,处理速度快,提供队列集合等多种存储结构,方便队列维护。
图 15-1 分布式爬虫的架构
Redis 提供了集合数据结构,调度服务器借助 Redis 集合实现 URL 去重。用户可以在 Redis 集合中存储每个 Request 的指纹(所谓指纹,就是标志 Request 唯一性的多个特征),从而判断 Reqeust 是否已经加入了队列,如果已经加入,就不再重复添加。
15.1.2 Redis 的安装
要安装 Redis,Linux 和 Mac 操作系统可以从 Redis 官网下载解压后编译安装。对 Windows 系统,Redis 官网并没有提供下载安装版本,可以从其他网站下载。
下载后解压到硬盘根目录,如 C 盘 Redis 目录下。然后在运行中输入 cmd,把目录指向解压的 Redis 目录,输入如下启动命令。
>redis-server redis.windows.conf
如果看到图 15-2 所示的启动页面,说明成功运行了 Redis。
图 15-2 Redis 启动页面
上面虽然启动了 Redis,但是只要关闭 cmd 窗口,Redis 就会停止运行,所以要把 Redis 设置成 Windows 下的服务。把命令行目录指向解压的 Redis 目录,输入如下命令。
>redis-server --service-install redis.windows-service.conf --loglevel verbose
执行命令之后如果没有报错,表示成功添加了服务,可以在 Windows 服务中看到已经添加了 Redis,如图 15-3 所示。
图 15-3 添加 Redis 到 Windows 服务
可以使用如下命令开启 Redis 服务。
>redis-server --service-start
要停止服务,可输入如下命令。
>redis-server --service-stop
运行结果如图 15-4 所示。
图 15-4 开启和停止 Redis 服务
这样就完成了 Redis 的简单安装和部署,更深入的使用请参考 Redis 中文网教程。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论