文档介绍:基于Scrapy框架的分布式网络爬虫实现
摘要根据互联网实际情况,提出分布式爬虫模型,基于Scrapy框架,进行代码实现,且该开发方式可以迅速进行对不同主题的数据爬取的移植,满足不同专业方向的基于互联网大数据分析需要。
本文采集自网络,本站发布的论文均是优质论文,版权和著作权归原作者所有。
【关键词】网络爬虫 Scrapy-redis 分布式
1 基本概念
分布式爬虫:分布式方式是以共同爬取为目标,形成多爬虫协同工作的模式,每个爬虫需要独立完成单项爬取任务,下载网页并保存。
Scrapy-redis:一个三方的基于redis数据库实现的分布式方式,配合scrapy爬虫框架使用,让scrapy具有了分布式爬取的功能。
2 分布式爬虫技术方案
Scrapy-redis分布式爬虫的基本设计理念为主从模式,由作为主控端负责所有网络子爬虫的管理,子爬虫只需要从主控端那里接收任务,并把新生成任务提交给主控端,在整个爬取的过程中不必与其他爬虫通信。
主要有几个技术关键点:
子爬虫爬取任务的分发
通过在主控端安装一个redis数据库,维护统一的任务列表,子爬虫每次连接redis库调用lpop()方法,生成一个任务,并生成一个request,接下去就是如同一般爬虫工作。
用户登录
由于网站对于游客的访问有限制,为了爬取所需信息,必须在程序中实现用户登录,其原理就是能获取到有效的本地cookie,并利用该cookie进行网站访问,除了一般能够用第三方库进行图像识别的验证方式外,一般采用浏览器中手动登录,通过网络工具截取有效的cookie,然后在爬虫生成request时附带上cookie。
url的去重
scrapy_redis有一个dupefilter文件中包含RFPDupeFilter类用于过滤新增的url,可以在该类request_seen中利用redis的key的查找功能,如果所爬取的任务数以亿计则建议Bloomfilter去重的方式对于URL的存储和操作方式进行优化,虽然该方式会造成小于万分之一的过滤遗失率。
数据写入
选择非关系性数据库MongoDB作为硬盘数据库与scrapy进行搭配使用,在pipeline中对item数据进行MongoDB的写入操作。
3 基本实现步骤
配置:Windows7 64-bit、Python:、 Anaconda (64-bit)、IDE:Pycharm 、Scrapy::X64-、MongoDB:
代码实现需要对几个文件进行设置和编写:items、settings、spiders、pipelines。
Items:这是一个爬取数据的基础数据结构类,由其来存放爬虫爬取的键值性数据,关键的就是这条语句:_id = Field() _id表示的生成一个数据对象,在Items中可以根据需要设定多个数据对象。
Settings:ITEM_PIPELINES该参数决定了item的处理方法;DOWNLOAD_DELAY这个是下载的间隔时间;SCHEDULER指定作为总的任务协调器的类;SCHEDULER_QUEUE_CLASS这个参