爬虫是一个比较轻易上手的技巧,也许花5分钟看一篇文档就能爬取单个网页上的数据。但对于大年夜范围爬虫,完全就是另一回事,并不是1*n这么简单,还会衍生出很多其余问题。
体系的大年夜范围爬虫流程如图所示。

数据构造分析和数据存储
- 爬虫需求要十分清楚,具体表示为须要哪些字段,这些字段可所以网页上现有的,也可所以根据网页上现有的字段进一步计算的,这些字段若何构建表,多张表若何连接等。值得一提的是,肯定字段环节,不要只看少量的网页,因为单个网页可以缺乏其余同类网页的字段,这既有可能是因为网站的问题,也可能是用户行动的差别,只有多不雅察一些网页才能综合抽象出具有普适性的关键字段——这并不是几分钟看几个网页就可以决定的简单工作,如不雅赶上了那种痴肥、纷乱的网站,可能坑异常多。
- 对于大年夜范围爬虫,除了本身要采集的数据外,其他重要的中心数据(比如页面Id或者url)也建议存储下来,如许可以不必每次从新爬取id。
- 数据库并没有固定的选择,本质仍是将Python里的数据写到库里,可以选择关系型数据库MySQL等,也可以选择非关系型数据库MongoDB等;对于通俗的构造化数据一般存在关系型数据库即可。sqlalchemy是一个成熟好用的数据库连接框架,其引擎可与Pandas配套应用,把数据处理和数据存储连接起来,一气航馍ⅲ
数据流分析
- 对于要批量爬取的网页,往上一层,看它的人口在哪里;这个是根据采集范围来肯定人口,比如若只想爬一个地区的数据,那大年夜该地区的主页切入即可;但若想爬全国数据,则应更往上一层,大年夜全国的人口切入。一般的网站网页都以树状构造为主,找到切冉馐枉为根节点一层层往里进入即可。
- 值得留意的一点是,一般网站都不会直接把全量的数据做成列表给你一页页往下翻直到遍历完数据,比如链家膳绫擎很清跋扈地写着有24587套二手房,然则它只给100页,每页30个,如不雅直接这么切入只能拜访3000个,远远低于真实数据量;是以先切片,再整合的数据思维可以获得更大年夜的数据量。显然100页是体系设定,只要跨越300个就只显示100页,是以可以经由过程其他的筛选前提赓续细分,只到筛选结不雅小于等于300页就表示该前提下没出缺漏;最后把各类前提下的筛选结不雅集合在一路,就可以或许尽可能地还原真实数据量。
- 明白了大年夜范围爬虫的数据流念头制,下一步就是针对单个网页进行解析,然后把这个模式复制到整体。对于单个网页,采取抓包对象可以查看它的请求方法,是get照样post,有没有提交表单,欲采集的数据噬烫蛛源代率攀里照样经由过程AJAX调用JSON数据。
- 同样的事理,不克不及只看一个页面,要不雅察多个页面,因为批量爬虫要弄清这些大年夜量页面url以及参数的规律,以便可以主动构造;有的网站的url以及关键参数是加密的,如许就悲剧了,不克不及靠着明显的逻辑直接构造,这种情况下要批量爬虫,要么找到它加密的js代码,在爬虫代码上参加大年夜明文到暗码的加密过程;要么采取下文所述的模仿浏览器的方法。
数据采集
之前用R做爬虫,不要笑,R切实其实可以做爬虫工作;但在爬虫方面,Python显然优势更明显,受众更广,这得益于其成熟的爬虫框架,以及其他的在计算机体系上更好的机能。scrapy是一个成熟的爬虫框架,直接往里套用就好,比较合适新手进修;requests是一个比原生的urllib包更简洁强大年夜的包,合适作定制化的爬虫功能。requests重要供给一个根本拜访功能,把网页的源代码给download下来。一般而言,只要加上跟浏览器同样的Requests Headers参数,就可以正常拜访,status_code为200,并成功获得网页源代码;然则也有某些反爬虫较为严格的网站,这么直接拜访会被禁止;或者说status为200也不会返回正常的网页源码,而是请求写验证码的js脚本等。
先检查是否有API
下载到了源码之后,如不雅数据就在源铝闼楝这种情况是最简单的,这就表示已经成功获取到了数据,剩下的无非就是数据提取、清洗、入库。但若网页上有,然而源代率攀琅绫腔有的,就表示数据写在其他处所,一般而言是经由过程AJAX异步加载JSON数据,大年夜XHR中找即可找到;如不雅如许还找不到,那就须要去解析js脚本了。

解析对象
源码下载后,就是解析数据了,常用的有两种办法,一种是用BeautifulSoup对树状HTML进行解析,另一种是经由过程正则表达式大年夜文本中采取数据。
- BeautifulSoup比较简单,支撑Xpath和CSSSelector两种门路,并且像Chrome这类浏览器一般都已经把各个结点的Xpath或者CSSSelector标记好了,直接复制即可。以CSSSelector为例,可以选择tag、id、class等多种方法进行定位选择,如不雅有id建议选id,因为根据HTML语法,一个id只能绑定一个标签。
- 正则表达式很强大年夜,但构造起来竽暌剐点复杂,须要专门去进修。因为下载下来的源码格局就是字符串,所以正则表达式可以大年夜显身手,并且处理速度很快。

数据整顿
一般而言,趴下来的原始数据都不是干净的,所以在入库前要先整顿;因为大年夜部分都是字符串,所以重要也就是字符串的处理方法了。

网友点评
精彩导读
科技快报
品牌展示