非结构化数据提取方法研究非结构化数据提取方法研究内容提要非结构化数据提取概述网络爬虫(WebCrawler)的设计数据提取算法的设计原型系统的实现总结非结构化数据提取方法研究1、前言随着Internet上信息的爆炸式增长,万维网(WorldWideWeb,)已经成为全球目前最大的、最重要的信息资源共享平台。在万维网上每时每刻都在动态刷新的web页中,蕴藏着大量的可为我们所用的数据。未来,数据被认为是与自然资源、人力资源一样重要的战略资源,隐含巨大的经济价值。而且由于目前从Web上采集到的数据85%以上是非结构化和半结构化的数据,如何快速、准确地从这些Web页中找到并提取出我们所需要的信息,己经成为当前最热门的研究课题之一。同时,随着Web数据提取技术研究的不断深入,基于Web的非结构化数据提取的开发与应用也已成为软件市场关注的一个热点。本文针对基于.NET技术实现的非结构化数据提取方法需要解决的几个关键问题,包括网络爬虫,数据提取规则的建立以及数据存储技术等进行了深入的研究。非结构化数据提取方法研究无论是通用搜索引擎,还是主题搜索引擎,网络爬虫在其中都扮演着重要的角色。网络爬虫是搜索引擎获取网页的主要工具,搜索引擎通常在网络爬虫所抓取的网页中对用户的搜索进行匹配,从而得到搜索结果提供给用户。网络爬虫的搜索策略是网络爬虫的实现关键,是搜索引擎的核心技术,同时也是通用搜索与主题搜索的最大区别所在。下图即为网络爬虫的基本结构图:2、网络爬虫(WebCrawler)互联网请求网页解析网页存储系统初始URL地址列表新解析出的URL非结构化数据提取方法研究主题网络爬虫比通用网络爬虫的抓取范围要小,但是主题网络爬虫在实现上也具有很大难度:首先是网络爬虫对网络中信息资源的分布结构都是未知的,不能很好的预测网页抓取的方向,保证抓取的网页都是集中于所想要的主题;其次,网页数量每天都会激增,而且其中将近25%的网页会在一天之内变化,因此网络爬虫非常必要优先抓取重要的网页,而这很大程度上决定于网络爬虫的搜索抓取策略。非结构化数据提取方法研究搜索抓取策略目前搜索抓取策略主要包括广度优先(BreadthFirst)、深度优先(DepthFirst)和最优先策略(BestFirst),三者都源于图的遍历算法。广度优先和深度优先策略是相对较基础,也是较简单的网页搜索抓取策略。广度优先搜索抓取策略是优先抓取同一阶层的网页,或者优先抓取最先发现的URL。深度优先搜索抓取策略是优先抓取相邻网页,这里的相邻是以网页中的URL作为链接。目前最优先策略是各类网络爬虫较为常用的搜索抓取策略,最优先策略是根据特定需要而制定的策略,其中最重要的就是网页的重要度计算。主要是PageRank算法和LocationMetric算法。非结构化数据提取方法研究PageRank算法的基本思想是如果网页a有一个指向网页b的链接,则网页b拥有a的一部分重要度,如果页面b被页面,…所链接,而是页面的链出链接数量,设d为削弱因子,则页面p的PageRank值为:IR(p)=(1-d)+d[∑(IR()/)],IR()初始值为1,通过不断迭代,最后求得该页面的PageRank值。LocationMetric算法是通过网页的URL来分析确定页面的重要性的,比如URL的域名,com要比net或其他重要:URL的前缀,要重要;URL的层数,要重要等等。LocationMetric算法直接思想就是对URL进行分析,使得抓取都会集中在主题附近,而不至于偏离的很远,所以这种算法更适合于垂直搜索中的主题信息提取。所以这类算法跟网络爬虫设计者的喜好有一定关系。1a2aanaiicaiaiic非结构化数据提取方法研究对于主题搜索抓取来说,通常都是以一部分与主题密切相关的网页URL作为种子URL开始进行抓取。而网络爬虫的的抓取离原来的种子网页越远,则偏离主题的可能性就越大,所以使用广度优先策略要比深度优先策略的效果好很多。对主题信息搜索策略的优化广度优先策略与LocationMetric算法在主题搜索抓取中,虽然能够很好的保证主题抓取的有效性,但对于主题网页抓取的覆盖度却在很大程度上限制了。为了更好的发掘网络中的主题资源,从而达到对主题信息搜索算法的优化,这就是Fish-Search算法。该算法的主题思想是将网络信息抓取看做鱼在觅食的过程,相关的主题网页信息作为鱼的食物,只有鱼获取了食物才能变得强壮,才能继续生存,当没有食物时,鱼将变得虚弱直到死亡。该算法根据所抓取的网页的相关性进行判断,如果网页与所抓取的主题信息相关,则将网页中的URL生命加1,但不高于所设定的最高生命值。如果网页与所抓取的的主题无关,则URL生命减1。最后判断网页中URL的生命值,如果为0则丢弃,不再对其进行抓取。Fish-Search算法具有模式简单,并且能够动态搜索。非结构化数据提取方法研究网络爬虫体系结构为了达到对专题数据的提取目标,需要有针对性的从Web服务器上爬取所需要的网页,提取出所需数据保存到数据库中,下面就是本文所设计的网络爬虫结构图:种子URL待爬取的URLURL队列Robots.txt解析协议处理器Http/Https/Ftp处理获取HTML文件URL解析(1)URL队列:URL队列中的URL记录来自两处,一处是种子URL,这些URL主要是用户预先定义的网页链接;另一处就来自于爬虫在爬取后续网页过程中,不断从后续网页中获取的URL。爬虫程序启动后,首先会从种子URL开始抓取,采用队列的先进先出原则。采用这种方式有利于实现广度优先的抓取策略,从了巧妙的避开了深度优先抓取策略的容易偏离主题的特点,提高了抓取网页的主题相关度。URL队列的管理大体如下图所示:Todu队列Visited集合解析URL初始URL地址新解析出的URL非结构化数据提取方法研究(2)协议处理器:该层是网络爬虫的基础,处于整个爬虫系统的最底层,主要负责利用各种网络协议来实现网页数据的采集工作。常用的网络协议有HTTP,HTTPS和FTP,目前网络协议以HTTP为主,因此也正是出于这样的考虑,本文所设计的网络爬虫目前只支持HTTP协议的数据传输。非结构化数据提取方法研究➣根据URL,解析出站点地址跟端口号,并与之建立连接;➣组装HTTP协议请求头,发送到目标站点,如果在一定时间段内未得到任何应答信号,就放弃对该页面的抓取,如果获得了应答信号,就需要对该应答信号进行分析,进入下一步骤;➣这一步骤主要是通过状态码来进行判断,如果是2XX,就说明正确返回页面;如果是301或者302,就说明页面重定向,就需要从应答头中提取新的URL,返回上一步;如果是别的代码(如404,表示网页找不到),就说明链接失败了。➣通过应答头,找出页面类型,长度等网页信息;获取页面内容。这里对采用HTTP协议的网页收集步骤简要描述一下,具体流程如下:根据URL与之建立联系组装HTTP协议头分析应答信号获取页面信息是否超时获取页面内容否是非结构化数据提取方法研究(3)URL解析:主要负责从新抓取的网页中获取Meta或者HREF等标记的语义信息,获取URL,并对这些新获取到的URL进行过滤。过滤主要是指将包含图片,声音和视频或者广告等为目标的URL进行删除,还有一个重要的工作是要将抓取到的URL与Visited队列(历史表)进行对比,或发现有访问过的URL,也将其予以删除,避免了重复抓取。由于网页内容最终都以文本形式存在,所以使用正则表达式来提取URL,在这个过程中通常对正则表达式的要求较高,这里给出一个正则表达式:herf=([\””|\’]?)\s*(?Url((http[s]?://[^\””\’s]+)|([^#()\””\’s]+)))\s*[\””|\’]?[^]*这个正则表达式能够准确的提取出网页中的标准URL,即HTML中“herf=”后面的绝对或相对的URL。这其中也不乏有些广告或者垃圾链接,就需要对这些URL进行过滤。最后再将获取的URL推送到URLTodo队列中。下面就网络爬虫的几个关机技术进行说明:非结构化数据提取方法研究网络爬虫抓取网页,不同于一般的访问,如果控制不好,则会引起网站服务器负担过重。05年,淘宝网就因为雅虎搜索引擎的网络爬虫抓取其数据引起过淘宝网服务器的不稳定。那么网站是否就无法和网络爬虫交流呢?其实不然,每个网络爬虫都有自己的名字,网络爬虫进入一个网站,首先会去访问一个放置在服务器根目录下的一个robots.txt文件,用于标识此网络爬虫的身份。网络爬虫在抓取网页的时候会发送一个请求,这个请求中就有一个字段为User-agent,例如Google网络爬虫的标识为GoogleBot,Baidu网络爬虫的标识为BaiDuSpider等。对robot禁止协议的支持非结构化数据提取方法研究robots.txt是一个纯文本文件,这个文件一般放在网站服务器的根目录下,网站管理员可以通过robots.txt来定义哪些目录网络爬虫不能访问,或者哪些目录对于某些特定的网络爬虫不能访问。例如有些网站的可执行文件目录和临时文件目录不希望被爬虫爬到,那么网站管理员就可以把这些目录定义为拒绝访问目录。爬虫进入这个网站,就会到根目录下找寻这个robots.txt文件,如果找到了该文件,就会遵守该协议的内容,如果没有找到该文件就会跳过这步,然后抓取网站数据。非结构化数据提取方法研究robots.txt语法很简单,主要就以小面的两行代码进行叙述:User-agent:*Disallow:User-agent:这句主要用于描述网络爬虫的名字。如果User-agent的值为*,则说明任何爬虫程序都需要遵守该协议。如果有多条User-agent记录,这就说明有多个网络爬虫需要遵守该协议。Disallow:这句代码用于描述网络爬虫不能访问的URL。这个URL可以是绝对路径的,也可以是相对路径的。倘若文件Disallow项的值为空,那么所有的爬虫都可以爬取该网站的数据。非结构化数据提取方法研究查找robots.txt文件文件存在与否读取User-agent允许所有爬虫访问读取Disallow存入Disallow缓存清空Disallow缓存跳出是否是否爬虫对robots.txt协议的处理流程如下:当然,robots.txt只是网络爬虫的一种协议,如果有的爬虫设计者不遵守这一协议,那么网络管理者本身也无法阻止爬虫对网站数据的爬取操作,不过一般的网络爬虫设计者也都会遵守这一协议。非结构化数据提取方法研究网络爬虫对HTTP协议的模拟网络爬虫的基本功能就是利用网络协议爬取网络资源,而网络资源又是Web服务器上的各种格式的文件,一般通过HTTP协议和Web服务器打交道。客户端服务器端Http请求Http响应客户端发起一个一个到服务器上的指定端口(默认端口为80)的HTTP请求,服务器端按照指定格式返回网页或者其他网络资源。网络爬虫也是一种HTTP客户端。非结构化数据提取方法研究GET是最普通的HTTP请求。第一行第一个单词为GET表明是一个GET请求。然后用一个空格来分隔请求类型与所请求的资源。请求资源以“/’’开始。典型的GET请求如下:HTTP服务器响应头包含一些有用的信息,如响应码,服务器类型等信息。下面就是一个典型的HTTP服务器响应头:HTTP/1.1200OKContent-Length:119Content-Type:text/htmlConnection:keep-aliveServer:Microsoft-IIS/5.0Date:Sun,19Mar201019:39:05GTMLast-Modified:Sat,18Mar201009:15:50GMTVia:1.1webcache(NetCacheNetApp/6.0.1P3)非结构化数据提取方法研究在HTTP协议中,除了GET请求之外还有POST请求,POS