您的位置:首页 > 其它

web数据采集核心技术分享系列(二)如何提取信息?字符串?正则?xpath?xslt?自定义?...什么才是王道?

2012-08-04 15:41 836 查看
目录:

web数据采集核心技术分享系列(一)做一个强大的web数据采集系统,你需要什么?

web数据采集核心技术分享系列(二)如何提取信息?字符串?正则?xpath?xslt?自定义?...什么才是王道?

web数据采集核心技术分享系列(三)如何破解验证码?图像分析?特征匹配?人工智能?第三方集成?...哪个最强大?

web数据采集核心技术分享系列(四)利用神经网络实现网页验证码破解

应各位热心看客的要求建了个QQ群:254764602,欢迎大家加群一起讨论,互相学习进步。

加群请输入暗号“数据采集”,否则不加

上篇 web数据采集核心技术分享系列(一)做一个强大的web数据采集系统,你需要什么? 刚发布, 本想休息一下晚上再来写第二篇,就看见几位热心园友给我留言,索性中午不休息了,把第二篇写出来。

不废话,直入主题,web页面上的信息之所以难提取,关键在于诸多的不确定性,我们列举一下然后对各种提取方式进行分析看看哪种最合适(注:上篇评论中有位网友说,没有王道,只有最合适,我觉得有道理,所以我们就看看哪种最合适)。

1.网页结构经常变化

2.网页内容变化且非常繁杂

3.各个网站所采取的前端技术千差万别

4.Html是个松散的技术,各大厂商互不兼容

。。。。。

第一个,结构变化,比如你感兴趣的一个数据表,以前在网页左面现在到了右面,这种主要是位置的变化,或者说你感兴趣的数据原来在表格第一行,现在网站在第一行加了广告,导致你的数据去了第二行,如果使用字符串定位,通过找到数据开始之前的网页字符串, 找到数据结束的字符串,那么以前开始之前是表头,现在开始之前是广告,如果继续使用之前的配置来抓取,则会把广告也抓进来,显然灵活性比较差,当然字符串这种方式好处也显而易见,就是简单,当然也许你想要最简单的,这个就最合适,不过我认为这个不是王道,我们来继续寻找王道

第二个,内容变化且繁杂,一个网页可能还有几百条,几千条数据,也有可能是几段文字,里面的具体内容每个页面都不完全一样,正则表达式是用来在一段文本中匹配一个或多个字符串的,对于匹配有一定格式或者部分内容固定的文本有很好的效果,但是在web数据采集中,却有很多因素超出了这个范围,举例,假设一个表格有10行,其中每行的数据都很相似,你如果只想要提取其中一行的数据,因为正则并没有能力处理web页面元素的位置,就是忽略了页面格式,而是单纯依赖文本,所以就很难精确匹配到你想要那一行,很有可能因为文本相似匹配到很多文本,随着页面内容的繁杂和相似度提高,正则效果就更差了,看来正则只适合提取文本特征很明显而且固定的小页面。

第三,第四,其实可以一起来讨论,大家都知道,很多网站的内容是html的,也有些shtml的,还有php,asp,jsp, 有些用了js框架,有些用了ajax等等,这导致最终在浏览器里面的源文件有很大的差别,加上各大浏览器厂商互相不兼容,甚至同一个网页在同的浏览器里面源文件都不同,跟别说显示效果了。熟悉xslt的人应该知道,xslt内部有xpath,实际上是一种对xml进行转化的技术,就是说可以从一个xml中提取信息到另一个xml中,这里有两个关键点,一个是xml,xml的优势在于可以组织包含各种复杂的数据及其内部关系,提取正是我们想要做得事情,有了这两个,留给我们的事情就剩下如何把网页转化为xml,如果这点解决了,我们就完美解决从网页中提取数据了,有很多大牛尝试去做这个东西,我在这里提一个我见过最好的,大家如果没用过可以去查一下,HtmlAgilityPack ,网络上对这个类库的好评如潮,似乎可以完美解决问题,但是深入研究其代码之后你就会发现,问题不在于他的代码,而在于这件事情本身的可行性,有很多页面根本不符合规范,就算符合规范也是千奇百怪,最终导致的问题就是想要把网页,或者说html完美转化为xml是不可行的,往往转化出来的xml结构和内容上都和网页本身不符合,也就是说两者不能划等号,提取不到信息或者说提取到错误的信息就不足为奇了,我在很多次尝试修改其源码之后才发现,各种特殊情况是层出不穷的,也是无法完全做好的,记得有一句话说“如果你走在错误的路上,奔跑也没有用”,跟这个一个道理。

既然xslt也不是王道,那么其依赖的xpath会不会是呢?从我个人的经验来看,目前还没有哪个自定义方案能超越xpath,这点我们从xpath的本质上就能找到原因。

看看百度百科上对xpaht的定义:XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。 基于前面对xml的理解,我可以扩展一下,xpath是一门在复杂结构化数据中查找信息的语言,看到这句你是不是信心大增呢?网页正是一个复杂的数据结构,我们要做的事情正是查找信息,网页也正是由网页元素和属性等组成,不过事情并没有这么简单就结了,我们找到了正确的路,但是这条路有一个重要的障碍必须解决,看到这里你也知道了,就是我们如何对网页执行xpath查询,暂且不说这个东西怎么实现,有多复杂,就可行性而言,这个方案是可行的,我们要做的就是一个针对网页的xpath引擎,具体的如果要展开讲,其实也是涉及到很多方面,可能一个单独的系列也讲不完,探讨具体的实现超出了本文的范围,在此就抛砖引玉,欢迎各位看官批评指正互相交流,xpath是不是王道,你说呢?

PS: 因本人能力有限,虽在web数据采集领域奋战多年,却也不可能在web数据采集的各个方面都提供最牛逼的解决方案和思路,还请各位看官本着互相交流学习,一起进步成长的态度来批评指正,欢迎留言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐