网页数据采集爬虫研究

时间:2022-09-28 20:08:12

 

数据采集的方式

采用国内现成的采集工具

通用类:

如火车头,八爪鱼等,gooseeker.com等,有配置页面,可定义规则,八爪鱼号称有抓取国内主流电商网站的版本。

专用类

天猫店铺商品采集工具 v1.0免费版

http://www.cncrk.com/downinfo/71232.html

 

http://bbs.locoy.com/spider-132726-1-1.html

火车头:采集天猫商品,包括商品的名称,商品详情,商品价格,还有商品评价的第一页,如何要采集评论的多页请直接联系企业qq80019423,天猫采集比较复杂,商品的详情和商品价格都和商品名称不在同一个页面,需要使用多页
采集结果截图:

 

淘宝天猫数据采集 直接发布到ecshop网店

http://bbs.ecshop.com/thread-1178827-1-1.html

 

购买数据采集公司的服务

http://www.site-digger.com/html/services/

http://knowlesys.cn

 

提供API服务的公司

如API.MANMANBUY.COM

 

大网站提供的API

如TAOBAO, JD AMAZON等大的网站有直接提供API

采用开源的框架,二次开发

目前主要有基于JAVA的:Heritrix,Crawler4j,NUTCH, webmagic等

基于python的scrapy

Heritrix

Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。Heritrix的优点是爬虫定制参数多,缺点是单实例的爬虫,之间不能进行合作。在有限的机器资源的情况下,却要复杂的操作。只有官方支持,仅仅在Linux上进行了测试。每个爬虫是单独进行工作的,没有对更新进行修订。在硬件和系统失败时,恢复能力很差。很少的时间用来优化性能。

用Heritrix,labin太复杂,而且很多function用不着,让人摸不着头脑。如果要很好的控制自己的爬虫,还是自己开发好。当然这些开源的crawler代码还是很值得研究

Heritrix其实并没有我想像中那么强大和好用,提供的功能没有nutch多,有点整站下载的味道(从这个方面来说和网络快车提供的整站下载又有什么区别呢?)。既没有索引又没有解析,甚至对于重复爬取URL都处理不是很好。所以用Heritrix的人可要注意了。 

heritrix这东西真的比较复杂,当初遇到一个小问题调了好长的一段时间,它提供的功能也相当全面,通过一些配置能够满足大多数的需求,如果自己写,估计会遇到不少技术细节上的东西。

http://wenku.baidu.com/view/435e2a40be1e650e52ea9959.html

 

Crawler4j

Crawler4j的优点是多线程采集,内置了Url 过滤机制,采用的是BerkeleyDB进行url的过滤。可扩展为支持结构化提取网页字段,可作为垂直采集用。Crawler4j缺点是不支持动态网页抓取,例如网页的ajax部分,不支持分布式采集,可以考虑将其作为分布式爬虫的一部分,客户端采集部分

 

Nutch

Nutch支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外很吸引人的一点在于,它提供了一种插件框架,使得其对各种网页内容的解析、各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展,正是由于有此框架,使得 Nutch 的插件开发非常容易,第三方的插件也层出不穷,极大的增强了 Nutch 的功能和声誉。Nutch的缺点是爬虫定制能力比较弱。

 

总之,Nutch的文档比较的全面,但需要了解和学习的内容相对也会比较的多。但是如果以后项目需要进行Hadoop的部署,Nutch很值得进一步的研究。

Heritrix的文档也比较的多,对于主题爬虫而言,在Heritrix上面进行扩展也是一个很好的选择。

Crawler4j是一个多线程爬虫,相关文档较少,容易部署和学习。

 

Webmagic

Webmagic是中国人开发的一个网络爬虫,其定位是帮助开发者更便捷的开发一个垂直的网络爬虫。webmagic的功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化),开发者可以便捷的使用xpath和正则表达式进行链接和内容的提取,只需编写少量代码即可完成一个定制爬虫。

Scrapy

Scrapy是一个Python写的爬虫框架,高效简单,代码量少,定制便利,并且是一个企业级的开源爬虫。相对于Nutch,Heritrix要轻量级很多,根蒂根基没有设备。它应用Python库中Twisted这个优良的异步收集库来处理惩罚收集通信,架构清楚,并且包含了各类中心件接口,可以灵活完成各类需求。

其他方式:

如果网站有提供RSS,可通过RSS采集,如果是WORDPRESS博客,可以采用AUTOBLOG采集。当然如果很少的内容,可以人工

 

爬虫选择

python人喜欢用scrapyheritrix还是比较适合整站直接爬取,不去做二次开发。WebCollector比较适合做有精准抽取抽取业务的爬虫,很适合做二次开发。Nutch如果你不做搜索引擎,建议不要用,Nutch里面全是是针对搜索引擎优化的。

本项目考虑采用WEBMAGIC

 

浏览器模拟器htmlunit,爬javascript和ajax

HtmlUnit是Junit的扩展测试框架之一,该框架模拟浏览器的行为,开发者可以使用其提供的API对页面的元素进行操作,套用官方网站的话:HtmlUnit是Java程序的浏览器。HtmlUnit支持HTTP,HTTPS,COOKIE,表单的POST和GET方法,能够对HTML文档进行包装,页面的各种元素都可以被当作对象进行调用,另外对JavaScript的支持也比较好。

 

HtmlUnit是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。这个没有界面的浏览器

对于爬虫最难的问题应该是javascript和ajax的处理。现在很多网站使用大量ajax,普通爬虫无法获取js生成的目前大体上有2中方式来解决这个问题。

一是使用htmlunit之类的所谓handless browser。htmlunit对js支持相当不错。只是适用起来不很方便。想要知道什么时候js执行完了比较困难。

第二种方法是使用selenium,jdic直接调用浏览器。这两种方式都太慢。相对来说第一种方式效率比第二种要好一些。

 

网页分析工具Firebug

 Firebug是网页浏览器 Mozilla Firefox下的一款开发类插件, 现属于Firefox的五星级强力推荐插件之一。它集HTML查看和编辑、Javascript控制台、网络状况监视器于一体,是开发 JavaScript、CSS、HTML和Ajax的得力助手。Firebug如同一把精巧的瑞士军刀,从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。例如 Yahoo! 的网页速度优化建议工具 YSlow。

分析网页的xpath可以借助firebug来完成

 

网络协议分析Wireshark

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。

Wireshark 是一款非常棒的Unix和Windows上的开源网络协议分析器。它可以实时检测网络通讯数据,也可以检测其抓取的网络通讯数据快照文件。可以通过图形界面浏览这些数据,可以查看网络通讯数据包中每一层的详细内容

快速构建实时抓取集群

可参考:

http://blog.nosqlfan.com/html/2604.html

来自阿里技术团队

 

抓取问题

反spam

如何提供实时性

真正的实时是不可能做到的,只能通过提高蜘蛛采集的频率来实现。所以蜘蛛应该具备统一的受控接口,可以从后台调整采集频率。

同时对商品也应该有所区别,热门商品,用户关注的商品,采集频率高,比如一小时采集一次;冷门商品一天甚至几天更新一次数据也可以。所以这里同样需要蜘蛛具备可以调节采集对象的接口。这样才能充分利用服务器资源。

目标网站的价格,库存信息变化后如何尽快更新

既然已经知道了商品的链接,不妨后台专门有个程序处理是否重新更新抓取该链接。判断标准也没有必要设计的太复杂,比如最简单的一种实现,就是记录一下httpheader里的If-Modified-Since,发现更新了,就重新抓取页面

真正的实时是不可能做到的,只能通过提高蜘蛛采集的频率来实现。所以蜘蛛应该具备统一的受控接口,可以从后台调整采集频率

 

如何确定是同一种商品

有心用爬虫收集一下京东和亚马逊的商品及价格信息,在做的过程中才发现不知道怎么准确定位一种商品,我觉得这就是像etao.com这类比价网站的主要的核心技术了吧,因为单独爬一个商品的价格很容易就能实现了。

仔细看了下应该不是直接用二维码来区分的,因为在输入描述信息时候依然能够比价。

我的判断是他们可能做到了商品描述(厂商 产品名 型号)比如用 “苹果 iPod touch 4代 8GB” 同条形码之间的映射,在爬虫工作时候按照自己一定的规则来爬出商品的名称。

这样无论是从描述信息还是条形码都能基本准确定位到一种商品。所以在建立模型以及准备数据的时候呢就要求按照统一的规格来建立描述信息,并且给补充条形码信息预留字段。同时还要给这商品打上标签,就像搜索的索引或者html中的关键词一样。或者和搜索引擎一块做?这个方面我还不是太懂,我需要的东西应该不简单的就是个lucene吧。

各个商家对同一款产品的叫法各异,要实现精准聚类需要更强的技术支持,这个技术也是最核心的东西。”王建强说。

对于这一技术,王建强颇为自豪。“目前我们的技术是业内做得最精准的。”他表示,在3C等标准化产品的比价上,技术的差别还显示不出来,但在化妆品等半标准或非标准化产品上,一找网比价的效果要好得多。

 

电商网站的价格都是图片,如何获得真实价格?

其实没有什么技巧,最好的做法就是OCR。价格图片做OCR很简单,数字的长宽都是固定的,就可以将数字分割开。然后准备0-9的数字样本,一个一个用像素比较,就可以得出实际的数字了。可以直接调用Google的OCR软件http://code.google.com/p/tesseract-ocr/



欢迎关注本人的微信公众号: 书生老徐