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

    目录:

    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数据采集的各个方面都提供最牛逼的解决方案和思路,还请各位看官本着互相交流学习,一起进步成长的态度来批评指正,欢迎留言。  

  • 相关阅读:
    sublime 标题乱码,内容正常
    解决PHP7+ngnix+yaf框架404的问题
    调用RPC接口出现错误:Yar_Client_Transport_Exception (16) curl exec failed 'Timeout was reached'
    xhprof安装和使用
    单点登录
    如何让局域网内Apache互相访问
    lnmp
    virtualbox
    微信省市区 Mysql数据库
    lnmp
  • 原文地址:https://www.cnblogs.com/keven1006/p/2622963.html
Copyright © 2011-2022 走看看