Python 开发Neubyepython爬虫实战

大规模爬虫流程总结

2017-04-20  本文已影响2153人  真依然很拉风

爬虫是一个比较容易上手的技术,也许花5分钟看一篇文档就能爬取单个网页上的数据。但对于大规模爬虫,完全就是另一回事,并不是1*n这么简单,还会衍生出许多别的问题。

系统的大规模爬虫流程如图所示。

大规模数据采集流程图

先检查是否有API

API是网站官方提供的数据接口,如果通过调用API采集数据,则相当于在网站允许的范围内采集,这样既不会有道德法律风险,也没有网站故意设置的障碍;不过调用API接口的访问则处于网站的控制中,网站可以用来收费,可以用来限制访问上限等。整体来看,如果数据采集的需求并不是很独特,那么有API则应优先采用调用API的方式。

数据结构分析和数据存储

数据流分析

深圳二手房from链家

数据采集

解析工具

源码下载后,就是解析数据了,常用的有两种方法,一种是用BeautifulSoup对树状HTML进行解析,另一种是通过正则表达式从文本中抽取数据。

对于HTML结构固定,即同样的字段处tag、id和class名称都相同,采用BeautifulSoup解析是一种简单高效的方案,但有的网站混乱,同样的数据在不同页面间HTML结构不同,这种情况下BeautifulSoup就不太好使;如果数据本身格式固定,则用正则表达式更方便。比如以下的例子,这两个都是深圳地区某个地方的经度,但一个页面的class是long,一个页面的class是longitude,根据class来选择就没办法同时满足2个,但只要注意到深圳地区的经度都是介于113到114之间的浮点数,就可以通过正则表达式"11[3-4].\d+"来使两个都满足。

同样的数据HTML结构不同用正则表达式更好

数据整理

一般而言,爬下来的原始数据都不是清洁的,所以在入库前要先整理;由于大部分都是字符串,所以主要也就是字符串的处理方式了。

写入数据库

如果只是中小规模的爬虫,可以把最后的爬虫结果汇合成一张表,最后导出成一张表格以便后续使用;但对于表数量多、单张表容量大的大规模爬虫,再导出成一堆零散的表就不合适了,肯定还是要放在数据库中,既方便存储,也方便进一步整理。

爬虫效率提升

对于大规模爬虫,效率是一个核心问题。单个网页爬取可能很大,一旦网页数量级大增之后,任务量也会大增,同时方式下的耗时也会大增。没有公司或人个愿意爬个几十万上百万的页面还要等几个月,因此优化流程、提高效率是非常必要的。

数据质量管理

大量的页面往往不会是结构完全一样,而且大量的访问也总会出现该访问成功却访问不成功的情况,这些都是非常常见的状况,因此单一的逻辑无法应对各种不可预知的问题,反映在结果上就是爬取的数据往往会有错漏的情况。

断点续传流程

反反爬虫

爬虫的固定套路也就那么多,各种网站爬取策略的不同就在于网站的反爬虫机制不同,因此多作试验,摸清网站的反爬机制,是大规模爬虫的先行工作。爬虫与反爬虫是无休止的斗争,也是一个见招拆招的过程,但总体来说,以下方法可以绕过常见的反爬虫。

各种各样的反爬机制也算是因垂斯听,只有身经百战,爬得多了,才能谈笑风生,爬虫水平不知道高到哪去了。有哪些有趣的反爬虫手段?

爬虫的道德节操和法律问题

上一篇下一篇

猜你喜欢

热点阅读