这是我参与「第四届青训营 」笔记创作活动的第4天
1. 分布式爬虫介绍
1.1 爬虫
爬虫就是通过请求url地址,根据响应的内容进行解析采集数据的程序,通过有效的爬虫手段批量采集数据,可以降低人工成本,提高有效数据量。
1.2 分布式爬虫
分布式爬虫就是同时运行在多个节点上的爬虫程序,通过分布式爬虫同步爬取可以提高爬取的效率。本文主要介绍基于scrapy-redis的分布式爬虫。
2. 分布式爬虫框架
在分布式爬虫中可以分为两部分:主机和从机,主机负责调度从机、维护Redis数据库;从机负责执行爬取程序、解析程序。
从机从主机的Redis中取出待抓取的request,下载完网页并解析数据之后就把解析的数据发送回主机的Redis。从机爬取的url进度和解析后的数据都暂存在主机的Redis数据库中。
3. 主机环境搭建
在分布式爬虫中,主机主要负责调配从机的运行,给从机分发url。主机环境搭建过程如下:
安装Redis数据库:
- 下载Redis安装包;
- 启动Redis服务。
项目启动时运行,主机在Redis根目录下启动redis-cli.exe程序,键入命令:
lpush (redis_key) url #括号不用写
在Redis中插入起始url即可启动项目。
4. 从机环境搭建
安装scrapy框架:
pip install scrapy
安装scrapy-redis框架:
pip install scrapy-redis
部署scrapy-redis:
在项目中的settings.py文件中配置主机Redis的IP和PORT:
REDIS_HOST = 'localhost' #master IP
REDIS_PORT = 6379
其它配置信息:
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
ITEM_PIPELINES = {
'example.pipelines.ExamplePipeline': 300,
'scrapy_redis.pipelines.RedisPipeline': 400,
}
从机程序启动:
运行scrapy命令:
scrapy runspider 文件名.py
5. 利用虚拟机搭建分布式环境
-
在进行本地的分布式程序测试时往往没有满足分布式运行的多台设备,这个时候就需要借助虚拟机工具搭建本地的分布式环境。
-
虚拟机的系统推荐使用CentOS7无可视化界面版,系统轻量化、占用资源少。
-
从机运行环境需要的Python包可以通过安装miniconda来快速搭建和管理。
-
搭建一台虚拟机环境之后可以通过克隆快速创建多个从机节点。
-
搭建完成后可以通过Xshell和Xftp工具实现主机远程连接从机、主机发送文件给从机。
-
在通过虚拟机搭建分布式环境时,可以先在本地主机上搭建测试环境,代码调试完成后再将代码直接发送到从机上运行。
6. 总结
本文介绍了基于scrapy-redis的分布式爬虫环境搭建,实现语言为python,可以做为分布式爬虫环境搭建的一个简单参考。