数字化时代,大数据信息的采集和应用逐渐普及。这离不开网络网络爬虫的广泛应用。网络爬虫是比较简单且容易上手的项目。1个网络爬虫工程师就可以轻松完成1个简单的小网络爬虫。但是面对现在对数据信息要求如此之大的市场,必须有大规模的网络爬虫来应对大规模数据信息采集的情况。大规模数据信息网络爬虫,并不是1*n这么简单,还会产生出许多别的问题。
一、先检查是否有API
API是网站官方给予的数据信息接口,假如通过调用API采集数据信息,则相当于在网站允许的范围内采集,这样既不会有道德法律风险,也没有网站故意设置的障碍;不过调用API接口的访问则处于网站的控制中,网站可以用来收费,可以用来限制访问上限等。整体来看,假如数据信息采集的要求并不是很独特,那么有API则应优先采用调用API的模式。
二、数据信息结构分析和数据信息存储
1.网络爬虫要求要特别清晰,具体表现为需要哪一些字段,这些字段可以是网页上现有的,也可以是根据网页上现有的字段进一步计算的,这些字段如何构建表,多张表如何连接等。值得一提的是,确定字段环节,不要只看少量的网页,因为单个网页可以缺少别的同类网页的字段,这既有可能是由于网站的问题,也可能是用户行为的差异,只有多察看一些网页才能综合抽象出具有普适性的关键字段——这并不是几分钟看几个网页就可以决定的简单事情,假如遇上了那种臃肿、混乱的网站,还有代理ip设置的问题可能坑非常多。
2.对于大规模网络爬虫,除了本身要采集的数据信息外,其他重要的中间数据信息(比如网页页面Id或者url)也建议存储下来,这样可以不必每次重新爬取id。
3.数据信息库并没有固定的选择,本质仍是将Python里的数据信息写到库里,可以选择关系型数据信息库MySQL等,也可以选择非关系型数据信息库MongoDB等;对于普通的结构化数据信息通常存在关系型数据信息库即可。sqlalchemy是1个成熟好用的数据信息库连接框架,其引擎可与Pandas配套使用,把数据信息处理和数据信息存储连接起来,一气呵成。
三、数据流分析
1.对于要批量爬取的网页,往上一层,看它的入口在哪里;这个是根据采集范围来确定入口,比如若只想爬1个地区的数据信息,那从该地区的主页切入即可;但若想爬全国数据信息,则应更往上一层,从全国的入口切入。通常的网站网页都以树状结构为主,找到切入点作为根节点一层层往里进入即可。
2.值得注意的一点是,通常网站都不会直接把全量的数据信息做成列表通常一页页往下翻直到遍历完数据信息,比如链家上面很清楚地写着有24587套二手房,但是它只给100页,每页30个,假如直接这么切入只能访问3000个,远远低于真实数据信息量;因此先切片,再整合的数据信息思维可以获得更大的数据信息量。显然100页是系统设定,只要超过300个就只显示100页,因此可以通过其他的筛选条件不断细分,只到筛选结果小于等于300页就表示该条件下没有缺漏;最后把各种条件下的筛选结果集合在一起,就能够尽可能地还原真实数据信息量。
3.确定了大规模网络爬虫的数据信息流动机制,下一步就是针对单个网页进行解析,然后把这个模式复制到整体。对于单个网页,采用抓包工具可以查看它的请求模式,是get还是post,有没有提交表单,欲采集的数据信息是写入源代码里还是通过AJAX调用JSON数据信息。
4.同样的道理,不能只看1个网页页面,要察看多个网页页面,因为批量网络爬虫要弄清这些大量网页页面url以及参数的规律,以便可以自动构造;有的网站的url以及关键参数是加密的,这样就悲剧了,不能靠着明显的逻辑直接构造,这种情况下要批量网络爬虫,要么找到它加密的js代码,在网络爬虫代码上加入从明文到密码的加密过程;要么采用下文所述的模拟浏览器的模式。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31561243/viewspace-2565418/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31561243/viewspace-2565418/