基于Scrapy分布式爬虫的开发与设计

本文介绍了一个基于Python的Scrapy分布式爬虫项目,用于抓取58同城的租房信息。系统采用Redis作为分布式多爬虫共享队列,MongoDb存储数据,Django进行数据可视化,通过Docker进行部署。爬虫策略包括Master端负责获取内容详情页链接,Slave端负责解析和存储数据,同时采用了爬虫防屏蔽策略,包括模拟浏览器行为、更换代理IP和限制请求频率。
摘要由CSDN通过智能技术生成

个人博客请访问http://blog.xhzyxed.cn

 

这个项目也是初窥python爬虫的一个项目,也是我的毕业设计,当时选题的时候,发现大多数人选择的都是网站类,实在是普通不过了,都是一些简单的增删查改,业务类的给人感觉一种很普通的系统设计,当时也刚好在知乎上看到了一个回答,你是如何利用计算机技术解决生活的实际问题,链接就不放了,有兴趣的可以搜索下,然后就使用了这个课题。

摘要:基于 python 分布式房源数据抓取系统为数据的进一步应用即房源推荐系统做数据支持。本课题致力于解决单进程单机爬虫的瓶颈,打造一个基于 Redis 分布式多爬虫共享队列的主题爬虫。本系统采用 python 开发的 Scrapy 框架来开发,使用 Xpath 技术对下载的网页进行提取解析,运用 Redis 数据库做分布式,使用MongoDb 数据库做数据存储,利用 Django web 框架和 Semantic UI开源框架对数据进行友好可视化,最后使用了Docker对爬虫程序进行部署。设计并实现了针对 58 同城各大城市租房平台的分布式爬虫系统。

一、系统功能架构

 

 系统功能架构图

分布式爬虫抓取系统主要包含以下功能:

1.爬虫功能:

爬取策略的设计

内容数据字段的设计

增量爬取

请求去重

2.中间件:

爬虫防屏蔽中间件

网页非200状态处理

爬虫下载异常处理

3.数据存储:

抓取字段设计

数据存储

4.数据可视化

二、系统分布式架构

分布式采用主从结构设置一个Master服务器和多个Slave服务器,Master端管理Redis数据库和分发下载任务,Slave部署Scrapy爬虫提取网页和解析提取数据,最后将解析的数据存储在同一个MongoDb数据库中。分布式爬虫架构如图所示。

分布式爬虫架构图

     应用Redis数据库实现分布式抓取,基本思想是Scrapy爬虫获取的到的detail_request的urls都放到Redis Queue中,所有爬虫也都从指定的Redis Queue中获取requests,Scrapy-Redis组件中默认使用SpiderPriorityQueue来确定url的先后次序,这是由sorted set实现的一种非FIFO、LIFO方式。因此,待爬队列的共享是爬虫可以部署在其他服务器上完成同一个爬取任务的一个关键点。此外,在本文中,为了解决Scrapy单机局限的问题,Scrapy将结合Scrapy-Redis组件进行开发,Scrapy-Redis总体思路就是这个工程通过重写Scrapu框架中的scheduler和spider类,实现了调度、spider启动和redis的交互。实现新的dupefilter和queue类,达到了判重和调度容器和redis的交互,因为每个主机上的爬虫进程都访问同一个redis数据库,所以调度和判重都统一进行统一管理,达到了分布式爬虫的目的。

 

三、系统实现

 

1)爬取策略的设计

由scrapy的结构分析可知,网络爬虫从初始地址开始,根据spider中定义的目标地址获的正则表达式或者Xpath获得更多的网页链接,并加入到待下载队列当中,进行去重和排序之后,等待调度器的调度。

在这个系统中,新的链接可以分为两类,一类是目录页链接,也就是我们通常看到的下一页的链接,一类是内容详情页链接,也就是我们需要解析网页提取字段的链接,指向的就是实际的房源信息页面。网络需从每一个目录页链接当中,提取到多个内容页链接,加入到待下载队列准备进一步爬取。爬取流程如下:

 

此处是Master端的目标链接的爬取策略,因为采取的分布式主从模式,Master端爬虫主要爬取下载到内容详情页链接,通过redis分享下载任务给其他slave端的爬虫。Slave端主要是负责对详情页链接的进一步解析提取存储到数据库中。

本论文以58同城租房为例,其初始页链接,其实也就是每个分类的第一页链接,主要有(以广东省几个城市为例):

① 东莞租房:(http://dg.58.com/chuzu/),

② 深圳租房:(http://sz.58.com/chuzu/),

③ 汕尾租房:(http://sw.58.com/chuzu/),

④ 广州租房:(http://gz.58.com/chuzu/),

其目录页链接如下所述:

⑤ 第二页(http://dg.58.com/chuzu/pn2)

⑥ 第三页(http://dg.58.com/chuzu/pn3)

⑦ 第四页(http://dg.58.com/chuzu/pn4)

其内容详情页如下:

⑧ (http://taishan

评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值