前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇网络爬虫范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。

中图分类号:TP391.3
21世纪是信息科学技术飞速发展的世纪,互联网在生活中的应用越来越广泛,尤其是随着智能手机逐渐普遍,人们能够通过移动互联网更加便捷地获得外部资讯。网络舆情是当前网民们针对热点社会事件以及社会政治经济状况等内容反映出的态度总和。“管中窥豹,时见一斑”,可以说网络舆情就是当前社会现状的放大镜,针对这些态度思想及政治倾向的社会舆论信息的收集整合,是分析社会动向、研究人民需求的重要手段。
互联网引擎搜索技术并未完全成熟,在很多具体环节仍旧存在着缺点,严重制约着网络舆情监测工作的全面展开。传统的网络爬虫技术在进行网络信息的获取时,对其内容的处理精确性和不足,存在着无用信息过多和部分关键信息缺失的情况。因而,针对网络爬虫技术进行研究,提出更为有效的优化措施是一项十分必要的工作。
1 互联网舆情检索技术
现阶段建设的网络舆情监测系统基本涵盖了所有互联网领域的基本技术,是一项复杂而庞大工程。但从系统的功能实现上看,舆情监测系统的关键技术是由互联网信息采集技术和文本信息抽取技术构成的。
1.1 互联网信息采集技术简介
作为互联网搜索引擎获得信息的基本技术,信息采集技术的实现方法包括元搜索和网络爬虫两种模式。这也是当前网络舆情监测信息获得的主要途径。
所谓元搜索技术,就是在检索过程中将多个网络搜索引擎以串联的方式运行,监测方提交的搜索条件被初步处理后,分送给这些串行的搜索引擎,由其各自完成对相应数据库信息的检索工作,在获得初步搜索结果后,再将这部分信息进行二次加工,通过去重、排序、过滤等方式完成冗余信息的处理。元搜索技术在检索信息全面性方面要明显优于单搜索引擎技术。同时,元搜索技术在进行信息检索时并不需要对所有互联网信息进行搜索,具有明显的效率优势。
1.2 网页信息抽取及预处理技术
作为网络信息获取的最终步骤,对检索程序获得的网页信息进行抽取和预处理是搜索信息全面的重要影响因素。所谓网页信息抽取及预处理技术是将网络信息中包含的自然语言根据检索条件进行提取,从中获得需要的实体、关系、事件等要素,最终并用易于理解接受的规范化形式对结果进行记录和展示。现阶段一个成熟的互联网网站,其页面通常包括导航栏、正文标题、正文内容、相关链接、推广信息、版权公告等。而在这些内容中,真正吸引用户的是正文标题和正文内容,也就是切合用户需求的主体信息。在获取网络信息的过程中尽量获得这些主体内容,对其他次要信息进行选择性忽略正是网页信息抽取及预处理技术重要的功能。
2 舆情监测网络爬虫技术简介
作为当前重要的互联网信息采集技术,网络爬虫(We-bCrawler)技术在实际应用中收到了较好的效果。当前各领域构件的舆情采集系统中广泛采用的是Heritrix网络爬虫,这一开源程序允许用户的自主修改移植。Heritrix主要有三大部件:范围部件、边界部件、处理器链。其中,范围部件控制抓取的URL入队过程;边界部件则对选定的URL的收集情况进行监测,进而选择下一个URL,排除已处理URL;处理器链则可视为URL处理器,其工作结果会反馈给边界部件。
网络爬虫的工作流程是从未访问URL队列中选取目标并开始爬行,通过URL的指向作用,引导程序识别目标网页,通过事先认可的网络协议将网页内容爬取抽取出来,然后解析内容其中包括目标网页内的新URL,并将这部分URL添加进未访问列表,完成爬取后获取的内容存放到本地网页库内。
3 提高网络爬虫在舆情监测应用水平的措施
网络爬虫的本质是能够使实现网络信息自动提取代码程序,是网络搜索引擎功能的主要实现手段。网络爬虫包括通用爬虫和面向主题爬虫两种,当前网络舆情监测使用的面向主题网络爬虫程序,会通过网页分析算法对非设定主题链接进行排除过滤,提高了搜索的精确性。当前,网络舆情监测中的面向主题爬虫技术的主要研究对象的行业领域的URL搜索策略问题。
3.1 改善爬虫网络利用率的解决方案
网络爬虫的利用率是当下舆情监测工作的重要限制因素,高效的爬虫利用能够更为便捷地获得全面而准确的信息。
为了准确掌握爬虫工作的效率,我们在爬虫中加入测速的方法,对爬虫抓取速度进行监测和工作特征数据进行分析。根据监测结果,在抓取速度较慢的阶段,采取相应措施进行修正,保证程序对网路资源的高效利用。这一解决方案的具体实现步骤如下:
(1)爬虫抓取速度监控。抓取速度是进行衡量信息获取水平的重要衡量因素,影响爬虫的网页抓取速度主要有两个因素,分别是抓取页面的大小和抓取这些页面所耗费的时间。因而,可以根据基本的换算关系定义网络爬虫抓取速度B:B=PT,式中:T为爬虫进行抓取的时间间隔;P代表该时间间隔内抓取页面的大小。
(2)爬行策略更改。40%正常水平的抓取速度是十分低效的,这时必须采取相应的措施进行解决。常见的措施主要包括:减少爬虫的线程数;暂停当前爬虫的运行,选择适当的时间继续爬行;更换爬行网站。
3.2 改善爬虫主题覆盖率的解决方案
当前的社会热点层出不穷,具有一定的突然性,同时在人们的讨论和交流中会进一步发酵,产生的信息量很大。为了保证网络舆情监测工作的顺利进行,就要求爬虫程序具有较高的抓取的覆盖率。另外,在进行网页内容的抓取过程中,爬虫程序需要执行网页与主题相关度的计算,会影响爬行速度。所以在进行网络爬虫抓取优化时,通常会使用在传统爬虫中加入主题更改模块的形式,即保证了抓取速度的同时也提高了主题覆盖率。
3.3 系统设计与测试
通过以上分析可知,提高爬虫系统工作效率的关键是在其内部添加测速模块和主体更改模块,由此可完成设计方案的优化。该爬虫在传统爬虫的基础上添加了爬虫测速模块和主题更改模块。
4 结束语
网络爬虫技术是当前舆情监测系统中使用的重要技术,在网页内容获取方面发挥了重要作用。限制这一技术进一步发挥作用的主要原因是爬虫程序的网络资源利用率的问题。同时,网络舆情监测检索突发性和大数据性特征,要求爬虫抓取信息的过程更为迅速,主体覆盖面也要更广。本文通过在传统爬虫中加入了爬虫测速监控模块和主题更改模块的形式,进行了抓取速度和覆盖率的监测实验,其结果表明,这一优化方案有效提高了爬虫程序的执行效率和信息获得的全面性,是一种值得认可的检索技术。
参考文献:
[1]王桂梅.主题网络爬虫关键技术研究[D].哈尔滨工业大学,2009.
关键词:网络爬虫,策略,搜索引擎
网络快速发展的今天,互联网承载着海量的信息,能够准确快速的提取我们所需要的信息是现在的挑战。传统的搜索引擎有Yahoo,Google,百度等,这些检索信息的工具是人们每天访问互联网的必经之路。但是,这些传统性搜索引擎存在着局限性,它不能全面的准确的找到所需要的信息,也会使一些和需求无关的内容一起搜索到。严重的降低了使用这些信息的效率,所以说提高检索信息的速度和质量是一个专业搜索引擎主要的研究内容。
1.搜索引擎的研究
1.1搜索引擎的分类
搜索引擎按其工作方式可分为三种,分别是全文搜索引擎,目录索引类搜索引擎[1]和元搜索引擎。
1. 全文搜索引擎
全文搜索引擎是最常用搜索引擎,大家最熟悉的就是国外的代表Google,和国内的代表百度。它们通常都是提取各个网站的网页文字存放在建立的数据库中,检索与用户查询条件匹配的相关记录,然后按其自己设定的排列顺序将结果返回给用户。
从搜索结果来源的角度,全文搜索引擎又可细分为两种,一种是拥有自己的检索程序,它们拥有自己的网页数据库,搜索到得内容直接从自身的数据库中调用,如Google和百度;另一种则是租用其他引擎的数据库,但是,是按自定的格式排列搜索结果,如Lycos引擎。
2.目录索引型搜索引擎
目录索引,就是将网站分类,然后存放在相应的目录里,用户在查询所需要的内容时有两种选择一种是关键词搜索,另一种是按分类目录一层一层的查找。据信息关联程度排列,只不过其中人为因素要多一些。如果按分层目录查找,某一目录中网站的排名则是由标题字母的先后以关键词搜索,返回的结果跟搜索引擎一样,也是按自定顺序决定。
目录索引只能说有搜索功能,但仅仅是按目录分类的网站链接列表。用户完全可以不用进行关键词查询,仅靠分类目录也可找到需要的信息。目录索引型搜索引擎中最具代表性的是Yahoo(雅虎)。其他著名的还有Look Smart、About等。国内的搜狐、新浪、网易搜索也都属于这一类。
3.元搜索引擎
当用户在进行查询时,元搜索引擎可以同时在其他多个引擎上进行搜索,将检索结果进行统一处理,并将结果以统一的格式返回给用户。正因为如此,这类搜索引擎的优点是返回结果的信息量更全面,但是缺点就是无用的信息太多不能准确的找到用户需要的结果。
具有代表性的元搜索引擎有Dogpile、InfoSpace、Vivisimo等,中文元搜索引擎中著名的有搜星搜索引擎。
在搜索结果排列方面,不同的元搜索引擎有不同的结果排列的方式。如Dogpile,就直接按来源引擎排列搜索结果,如Vivisimo,是按自定的规则将结果重新进行排列。。
1.2搜索引擎的工作原理
搜索引擎主要是对用户要求的信息进行自动信息搜集,这个功能共分为两种:一种是定期搜索,即每隔一段时间搜索引擎主动派出“Spider”程序,目的是对一定IP地址范围内的互联网站进行检索,如果一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库;另一种是提交网站搜索,即网站拥有者主动向搜索引擎提交网址,搜索引擎在一定时间内定向向你的网站派出蜘蛛程序,扫描你的网站并将有关信息存入数据库,以备用户查询。
如果用户以关键词查询所需要的信息时,搜索引擎会在数据库中进行搜寻,如果找到与用户要求内容相匹配的网站时,搜索引擎通常根据网页中关键词的匹配程度,出现的位置/频次,链接质量等特殊的算法计算出各网页的相关度及排名等级,然后根据关联度高低,按顺序将用户所需要的内容反馈给用户。
2.网络爬虫
2.1通用网络爬虫和聚焦网络爬虫的工作原理
网络爬虫是搜索引擎的重要组成部分,它是一个自动提取网页的程序,为搜索引擎从网上下载网页。
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。。
与传统爬虫相比,聚焦爬虫的工作流程则较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存起来,进行一定的分析、过滤,并建立索引,为了方便之后的查询和检索。
2.2网络爬虫的搜索策略
1.IP 地址搜索策略
IP地址搜索策略是先给爬虫一个起始的IP地址,然后根据IP地址以递增的方式搜索本IP地址段后的每一个地址中的文档,它完全不考虑各文档中指向其它Web 站点的超级链接地址。这种搜索策略的优点是搜索比较全面,因此能够发现那些没被其它文档引用的新文档的信息源;但是缺点是不适合大规模搜索。
2. 深度优先搜索策略
深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。例如,在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,也就是说在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。
3. 宽度优先搜索策略
宽度优先搜索的过程是先搜索完一个Web 页面中所有的超级链接,然后再继续搜索下一层, 直到底层为止。例如,一个HTML 文件中有三个超链,选择其中之一并处理相应的HTML文件,然后不再选择第二个HTML文件中的任何超链, 而是返回并选择第二个超链,处理相应的HTML文件,再返回,选择第三个超链并处理相应的HTML文件。当一层上的所有超链都己被选择过,就可以开始在刚才处理过的HIML 文件中搜索其余的超链。
宽度优先搜索策略的优点:一个是保证了对浅层的优先处理,当遇到一个无穷尽的深层分支时,不会导致陷进WWW 中的深层文档中出现出不来的情况发生;另一个是它能在两个HTML文件之间找到最短路径。
宽度优先搜索策略通常是实现爬虫的最佳策略,因为它容易实现,而且具备大多数期望的功能。。但是如果要遍历一个指定的站点或者深层嵌套的HTML文件集,用宽度优先搜索策略则需要花费比较长的时间才能到达深层的HTML文件。
2.3网络爬虫的发展趋势
随着AJAX/Web2.0的流行,如何抓取AJAX等动态页面成了搜索引擎急需解决的问题,如果搜索引擎依旧采用“爬”的机制,是无法抓取到AJAX页面的有效数据的。对于AJAX这样的技术,所需要的爬虫引擎必须是基于驱动的。而如果想要实现事件驱动,首先需要解决以下问题:第一,JavaScript的交互分析和解释;第二,DOM事件的处理和解释分发;第三,动态DOM内容语义的抽取。
3.结束语
本文阐述了搜索引擎的原理以及网络爬虫的工作原理和发展趋势,网络爬虫技术的研究对搜索引擎的应用和发展有着十分重要的意义。抓住准度和速度两个大方向,进一步的深入网络爬虫技术,在耗费最少的网络资源的前提下使搜索引擎能够更准确更快捷的找到人们的需求。
参考文献
[1] Edwards, J.,McCurley, K. S., and Tomlin, J. A. (2001). 'An adaptive model foroptimizing performance of an incremental web crawler'. In Proceedings ofthe Tenth Conference on World Wide Web (Hong Kong: Elsevier Science): 106–113.doi:10.1145/371920.371960.
[2]刘金红,陆余良,主题网络爬虫研究综述,计算机应用研究院,2007(10):26-27.
[3]王岩,搜索引擎中网络爬虫技术的发展,电信快报,2008(10):19-20.
[4]刘世涛,简析搜索引擎中网络爬虫的搜索策略,阜阳师范学院学报,2006(9):60-61.
【关键词】网络爬虫;WEB挖掘;股票预警
1.引言
在证行业内,客户是证券公司的最重要的资产,直接关系到公司核心业绩的好坏。市场竞争的日益激烈,使得证券公司对客户的争夺加剧。一些证券公司采取以低于成本的证券交易佣金水平、“零佣金”等方式招揽客户,但是仍然收效甚微。其根本原因在于忽视客户的实际利益需求。证公司要更加注意练内功,增加服务的“含金量”,利用信息化时代的技术条件,适时建立一种个性化服务,才能够赢得客户的信赖,实现证公司和股民的共赢。
目前每一家证券公司都开通了自己的门户网站,实时股评、盘后解读、各种深度分析、个股资料、研究报告、消息等纷繁复杂。每个投资者每天都要面对成千上万条的真假资讯,查询时耗时费力。因此使他们便捷地获取真正关心的信息就显得尤为重要。一个好的证券公司,并不是要将所有能获取的信息全部展现给客户,而是要求首先建立结构化的信息采集和管理系统,然后根据客户的需要提供它们所要求的内容。而这就是本文要探讨的股票信息预警系统。
2.基于网络爬虫的股票预警系统分析
面对大量的实时证信息,只有使用自动化的手段来有的放矢的获取,才能满足用户的要求。我们结合搜索引擎所使用的网络爬虫技术,来实现股票信息预警系统。网络爬虫是一种按照一定的规则自动提取互联网信息的程序,它是搜索引擎的重要组成部分,把分散在互联网上的离散的信息收集起来,以便人们方便快捷的搜索到有用的信息。从而明显地降低了人们获取信息的难度。
本文使用由HtmlParser和 HttpClient两个开源工具构建的一个简易网络爬虫来实现股票信息预警。HttpClient提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地。HtmlParser对HTML代码进行处理,将抓取下来的网页信息进行再加工,分析,抽取有用的信息,并通过短信平台将分析加工后的数据发送给用户。
使用上述方法完成股票信息预警系统的设计,实现股票价格到价提醒和股票公告信息的推送的功能。
3.股票信息预警系统设计
3.1 工作原理
预警系统由系统短信接收模块借助短信平台的WEB.SERVICE接口获取用户设置的股票预警和公告推送代码信息,将这些信息送入股票预警系统里进行处理,并写入数据库。然后利用网络爬虫对指定数据源进行实时抓取,获取到的网页股票数据返回给系统进行预警处理,抓取到的公告信息由网络爬虫提取处理后返回给系统分析,通过短信发送模块回复给用户,同时回写数据库。
根据客户实时提交的预警股票代码,拼接链接地址,放进待抓取队列,并根据股票代码建立一张动态更新股价的哈希表,然后股票工作线程按一定的时间间隔从待爬行队列中取出链接发送http请求获取源数据,分析数据,把提取出来的价格放入哈希表中。此时程序不停的比较动态更新股价的哈希表与用户设定的预警价格表,如果符合预警条件,则退出进入下一个环节短信发送,如果不符合条件,则继续比对,直到满足系统停止条件为止。
3.2 基本工作流程
4.股票信息预警系统的实现
本文采用模块式的实现方法,将预警系统分为若干部分,限于篇幅,这里主要介绍股票预警、股票信息获取、短信收发这几个模块。
4.1 股票预警设计思路
实现股票价格的预警,需要两个要素,其一是用户设定的预警价格,其二是不断变化中的实时价格。有了这两个价格就可以通过比较直到满足条件(突破上下限价格)完成预警。这些价格信息存储在数据列中,所以实现时选择使用Hashtable存储动态更新的实时股票价格表stockprice,List存储用户设定的预警价格表CurrentAletStocks。
首先将预警股票代码写入stockprice和CurrentAletStocks中,stockprice获取股票实时价格,将此价格与CurrentAletStocks正在预警的股票的上下限进行比较,如果在上下限之间,那么只更新stockprice中的当前价格;如果突破了上限或者下限价格,更新当前价格,并将突破当前价格内容信息送入短信收发模块发送给预警的用户。
4.2 股票信息获取
实时股票信息的来源主要通过调用股票公用数据接口来实现,本系统中使用了新浪股票公用数据源。从数据源获取到的实时股票信息,我们还需要对它进行解码。系统解码后的字符串信息有很多,如(股票名称、行情时间、最新价、昨收盘、今开盘、涨跌额、最低、最高、涨跌幅、成交量、成交额、竞买价、竞卖价、委比、买一-买五、卖一-卖五),而我们需要的只是现价和股票名称,所以还要通过自定义的方法Parse对字符串进行格式匹配处理从而得到我们想要的数据。
我们以新浪股票公用数据源获取股票信息为例:
⑴构建股票代码信息
例如:600250 Sh600250 如果是60开头为沪市、如果是30或者00开头为深市
⑵拼接爬取URL地址
例如:URL:http:////list=sh600250
⑶通过HttpClient发送get请求,并对获取的信息进行解码
⑷对解码后的字符串进行格式匹配处理(即方法Parse)
⑸返回所需要的正确格式
4.3 SMS短信收发模块
与用户的交互需要短信的收发,系统高峰时需要几十甚至几百条的同时收发。因此选择了目前SP(服务提供商)普遍使用的短信平台(短信网关)。
短信平台是基于中国移动、中国联通、中国电信提供的短信端口与互联网连接的基础上,实现与用户指定号码进行短信批量发送和自定义发送功能的综合平台。它分为软件单机版(带客户端)CS 结构和网络共享版BS 结构。本系统采用了网络BS结构的短信平台,借助webservice接口实现与程序的对接。
4.3.1 发送短信
访问web地址http:///smssendwebservice/
Service.asmx。调用.net中Web Services协议栈里的soap协议使用Smssend 方法:
用户名:<UsrId>string</UsrId>
密码:<UserKey>string</UserKey>
目标手机号码:<PhoneNumber>string</PhoneNumber>
短信内容:<SmsContent>string</SmsContent>
4.3.2 接收短信
调用QuerymoSms方法查询用户上行短信,访问地址:http:///httpinterface/QueryMoSms.asp?UserId=&userkey=
UserId为短信平台提供给你的账号
userkey为短信平台提供给你的账号密码
5.结束语
本文使用HtmlParser和 HttpClient构建的一个简易网络爬虫,通过详细的系统设计分析,完成股票信息获取、股票价格预警、公告提醒、短信平台收发等模块的开发,实现股票信息预警系统从而更好服务用户。
参考文献
[1]张亮.基于HTMLParser和HttpClient的网络爬虫原理与实现[J].电脑编程技巧与维护,2011,20:94-103.
关键词:网络,主题爬虫,搜索引擎,军事教育主题爬虫
l1引言
当今,随着Intemet在国内的迅猛发展,军队正在向现代化建军目标发展,为了使军队更快的向信息化,数字化方向发展,军队都在着手建设自己的信息网,网络信息资源也爆炸般的增长,在军队内的信息服务器上,同样能够获取许多有用的资源。如果没有一个好的搜索引擎,查询起来困难就可想而知。现在www网上基本都是一些商业性的探索引擎,这些引擎深度和广度都很大,有些甚至是整个环球网进行检索。,搜索引擎。而军队只需要搜索其内部网络即可。因此在军队网中安置一个针对军队信息资源进行搜索的爬虫十分必要。
l2军事教育主题爬虫的爬行策略
搜索引擎中最关键的部分是网络爬虫,它的性能好坏直接影响着搜索引擎的整体性能和处理速度。传统的网络爬虫是按照预先设定的广度优先策略、深度优先策略或这两种策略相结合的方式爬行网页[ 1 ] 。网络爬虫的搜索策略与搜索引擎的性质和任务密切相关。决定网络爬虫搜索策略的关键是如何将不相关的网页快速地过滤并删除掉,因为网页过滤的速度和准确性将会直接影响网络爬虫的性能。以何种策略访问Web,成为近年来主题搜索引擎网络爬虫研究的焦点之一。军事教育主题爬虫是按照最佳优先的爬行策略爬行网页即军事教育主题爬行时按照主题相关度优先的爬行策略爬行网页。爬虫从网络上抓取到的新网页在爬行之前都要进行主题相关度分析,与初始种子网页相关度最高的网页被优先爬行,而与初始种子网页不相关或相关度不大的网页则被抛弃。因此与传统网络爬虫相比,军事教育主题爬虫的工作量大大减少、爬行的准确度大大提高。
l3军事教育主题爬虫的系统实现
3.1 设计思路与总体柜架
从设计思路上,构造Spider有两种比较常用的方法。第一种是把Spider设计成一个递归的程序,第二种是编写一个非递归的Spider程序,程序维护一个要访问的网页列表,考虑到Java对数组、队列的包支持较为丰富,实现相对容易,本程序使用了第二种设计思路。
程序中总共维护了四个不同的队列,它们的总结如下。每一个这样的队列保存着同一处理状态的URL。
等待队列 当Spider程序开始处理URL时,它们被传送到这一队列。重要的是同一个URL不能被多次处理,因为这样是浪费的。当一个URL被处理过后,它被移送到或者是错误队列或者是完成队列。,搜索引擎。,搜索引擎。
运行队列 当前正在处理的URL队列。
错误队列 如果在下载当前网页时发生错误,它的URL将被加入到错误队列。该URL到达这一队列后将不再移入其它队列。,搜索引擎。一旦网页移入错误队列,Spider程序将不会再对它作进一步处理。
完成队列 如果在下载网页时没有发生错误,该URL将被加入到完成队列。该URL到达这一队列后将不再移入其他队列。
明显,每个得到的URL都只能存在于一个队列中。其状态流程图如下(图1):
评定分数计算公式采用信息检索中常用的词条权值计算方法为
TF-IDF 函数
Wi,j=Avg(TFi)*(1/(log(nDoc/ni)+1/log(nDoc-1)))
Avg(TFi):对词i取其在各文档中的TF值进行平均;
nDoc:文档数目;
ni:出现词i的文档个数;
3.2程序结构及具体实现
网络爬虫种类很多,如有基于全文搜索的网络爬虫[2],聚类网络爬虫,主题网络爬虫,基于本体的网络爬虫等。在引入BOT包的基础上,实现了以并发进程方式对指定站点内部网页数据的访问和基于队列的处理,将抓取到的网页数据存储在本地数据库中。程序由四个文件组成:CheckLinks.java; HTMLParse.java; ISpiderReportable.java;Spider.java,程序工程报告如图2:
图2
用TF-IDF 函数算出各个词语的权值,最终得到全部词的权值wordWeightOfAllDocument
public class segmenter {
public TreeMap zhwords;//用Treemap形式定义,带标签,方便对应查找
//下面定义的是一些统计词项与词频的链表
public ArrayList wordSum;
public ArrayList wordCount;
public ArrayList wordAll;
public ArrayList wordCountAll;
//根据选取网页的编码类型,选择不同的词库文件。
String newword = null;
try {
InputStream worddata = null;
if(charform == SIMP) {
worddata= getClass().getResourceAsStream('simplexu8.txt');
} else if(charform == TRAD) {
worddata= getClass().getResourceAsStream('tradlexu8.txt');
} else if(charform == BOTH) {
worddata= getClass().getResourceAsStream('bothlexu8.txt');
}
//wordSum ; wordCount; wordAll; wordCountAll;wordCountMax;这些链表都是为了分词后统计出每个词的tf值和IDF值,最后根据公式算出每个词语的权值!
//这个是tf值的计算并记录文件
public ArrayList getTfValue(String args){
int tmpIndex;
BufferedWriter fileOut;
ArrayList tmpArrayList = newArrayList(3);
File tmpTfFilePath=newFile('tf');
tmpTfFilePath.mkdir();
try{
fileOut=newBufferedWriter ( new FileWriter (args+'.tf'));
for(int k =0;k<wordSum.size();k++){
tmpIndex=k;
double tmp =(double)(Integer)wordCount.get(tmpIndex)).intValue()/(double) wordCountMax;
Double dTmp = newDouble(tmp); tmpArrayList.add(dTmp/*(Object)tmp*/);
//这个是IDF值的计算
for(int idfi=0;idfi<wordOfAllDocument.size();idfi++)
{
int ni=0;//how many document contains a word
String tmpString=(String)wordOfAllDocument.get(idfi);
for(int idfj=0; idfj<nDoc; idfj++)
{
if(((ArrayList)wordOfOneDocument.get(idfj)).contains(tmpString))
ni++;
}
Double dTmpdouble = newDouble(1/(Math.log(nDoc/ni)+1/Math.log(nDoc-1)));
wordIdfValueOfAllDocument.add(/*1/(Math.log(nDoc/ni)+1/Math.log(nDoc-1))*/dTmpdouble);
//IDF 采用倒数,表明在专题训练文档中在越多文档中出现,其越重要。
//最后利用公式算出该词在训练主题中的权重 W=Avg(tf)*IDF
for(int tfi=0;tfi<wordOfAllDocument.size();tfi++){
inttmpIndex=-1;
inttni=0;
doubletfall=0.0;
StringtmpString=(String)wordOfAllDocument.get(tfi);
for(inttfj=0; tfj<nDoc; tfj++){
if((tmpIndex=((ArrayList)wordOfOneDocument.get(tfj)).indexOf(tmpString))!=-1){
tni++; tfall=tfall+((Double)(((ArrayList)wordTfValueOfOneDocument.get(tfj)).get(tmpIndex))).doubleValue();
}
}
Double dTmpdouble = newDouble(tfall/tni);
Double dTmpdoubleElse = newDouble((tfall/tni)*(((Double)wordIdfValueOfAlDocument
-.get(tfi)).doubleValue()));
wordTfValueOfAllDocument.add(dTmpdouble); wordWeightOfAllDocument.add(dTmpdoubleElse);
}
实现的流程如下,首先,CheckLinks得到一个起始的URL,在CheckLinks.run()中,新建Spider实例,把起始URL加入到等待队列中,并通过setKeyWord()方法设置关键词,setCheckRobots()、setCheckMetaTag()配置选项,程序进入正常工作。
Spider通过getWorkloadWaiting()方法得到等待队列中的URL,调用processURL()方法对取出的URL进行处理,对此,processURL()方法内以URL为地址建立链接,取回对象通过parse.parse()方法对HTML进行解释,主要是从得到的HTML中获取新的URL并添加到等待队列中,及对主题字的匹配。经过parse返回,则从等待队列中移走处理的URL,如果没有错误,把它添加到完成队列中,否则添加到错误队列中,程序又去等待队列中取出URL,进行同样的处理流程,循环一直到等待队列为空。
3.3开发环境
实验条件:搜索深度= 2 (设的较小,为了防止搜索规模过大) ,线程数= 100 (要求在网络环境较好的情况下) ,起始种子= 10 (都是经过人工选择的较好的种子) ,阈值r = 0. 6 ,中文分词主要以中科院计算所免费版的分词工具(C 语言开发) 为基础。机器配置: Intel(R)Core™2 CPU T5500 @1.66Ghz,内存2048 MB。试验结果表明军事教育主题爬虫抓取网页的准确度及准确率都比普通爬虫的高。,搜索引擎。
3.4 实验总结及系统存在的问题
爬行速度太慢,特别是对超链接较多的页面;页面内容的多少对评分有一定影响,虽然不大,但仍需考虑;若能在网页架构分析上添加一定的过滤,抓取核心内容,相信对抓取质量会有更大的提高,这方面也待改善。
l4结束语
本文通过设计一个军事教育主题爬虫从网络上收集有关理财网页(代替军队的教育网页),以解决本实验室面向军事教育主题的个性化搜索引擎的资源问题。,搜索引擎。从实验结果来看爬虫达到了我们初步的预定目标,下一步我们将不断对其进行完善以进一步提高其搜索精度及搜索速度。
参考文献
[1]周立柱,林玲1聚焦爬虫技术研究综述1计算机应用1第25卷第9期2005年9月:1966
[2]徐远超,刘江华,刘丽珍等.基于Web 的网络爬虫的设计与实现.微计算机信息.2007,23(7):119-121
[2[Programming a Spider in Java,Jeff Heaton
Biography:JinPeng(1982-),male, qingdao,China University Of Petroleum, research interests are in areas of computernetwork and. Search Engine
【关键词】网络爬虫;社交网络;web信息抽取;AJAX
1.引言
随着信息技术的发展,各种新闻、论坛和博客网站为人们提供了发表评论的平台,对相关部门掌握舆情的走向起着重要作用,使得舆情研究变得有价值。由于Ajax技术的广泛使用,用于信息搜索的常规网络爬虫技术面临严重挑战,出现了针对Ajax技术的爬虫。2007年,瑞士苏黎世联邦理工学院的Gianni Frey[1,2]通过解析网页中的脚本,实现了Ajax动态信息的采集;随后Cristian[3]等人提出了基于脚本函数以及参数的热点检测机制,减少了重复信息的采集;2008年,荷兰理工大学的Ali[4]等人利用浏览器接口模拟用户对页面元素操作获取动态信息。在我国,2007年浙江大学的罗兵[5]在普通爬虫的基础上增加了JS(JavaScript)解析和DOM(Document Object Model)操作模块,实现了对JavaScript代码的解析和JavaScript代码中相关DOM操作的支持,完成了对Ajax加载内容的分析;2009年,中国科学技术大学的曾伟辉[6]采用改进动态脚本分析方法,实现了基于对象的程序切片算法达到抓取Ajax站点URL的目的;同年,袁小节[7]以采集新闻主题信息为例,采用基于协议驱动采集和事件驱动采集相结合的方法完成了聚焦信息的采集。2010年,夏天[8]对Ajax站点数据采集进行了总结,分析了采集Ajax网页动态信息的研究重点以及发展趋势。本文在分析研究了现有爬虫技术后,针对微博类网站设计了支持Ajax技术的爬虫,该爬虫将爬取分为用户爬取和内容爬取两部分,采用协议驱动和事件驱动结合的采集策略以及基于模板的抽取方法,实现了对微博内容的抽取和保存,提高了信息采集的覆盖率。
2.面向微博的Web爬虫设计与实现
微博在网络事件中对舆论的导向起到重要作用[9]。网络舆情具有源数据针对性、时效性、后续更新连续性等特点。本文设计时,将要爬取的空间限制在微博网站中,考虑微博的时间、内容、评论和转发数等,以最大限度的信息采集量为目标进行设计,保证获取新增评论内容。
2.1 面向微博的网络爬虫框架
微博网站的更新是通过用户在自己的微博上发表文章来实现。由于没有包含所有文章的列表,在设计该类爬虫时,必须以用户为单位,先找到用户,再进入其微博主页获取微博的内容、时间、评论和转发数等。
根据以上思路,将基于微博的网络爬虫程序分为两个模块:获取用户信息模块和获取微博内容模块,基本框架如图2-1所示。
图2-1 基于微博的网络爬虫框架
在获取用户信息模块中,由于信息数量过大,严重影响信息获取的速度,而实际运用中,大多信息是无用信息。因此,根据信息的重要程度,将用户分为普通用户和重点用户。在获取用户信息时,先从重点用户出发,尽可能多的获取用户列表;更新用户列表时,以最近一次的用户列表作为本次爬取的初始化用户。为保证用户获取时分布均匀,在得到用户列表后,根据已获取的URL结构,使用随机函数产生用户ID, 构造出微博的访问URL。
在获取微博内容模块中,采用多线程爬取策略,每个线程负责一个用户的URL爬取,直至队列中的所有URL都被爬取过或者遇到终止条件结束。当爬虫进入到用户微博后,首先判断该用户是否已经被爬取过,如果己经爬取过,则转到该用户的微博页面爬取最新的微博;如果尚未被爬取,则从微博主页开始爬取,依次获取所有文章信息,并对用户状态进行更新。
2.2 支持Ajax的爬虫实现
目前广泛使用的Ajax技术使用局部刷新和异步读取的方法,使得服务器不需要存储大量静态网页数据,节约了存储空间,提升了用户的使用体验[7]。但是,这种技术也导致了普通爬虫无法得到完整的网页信息,如异步请求动态信息、网页中的触发事件等等。
使用了Ajax技术的网页,通常是从数据库中提取相应的数据填充到指定的模板,并将其显示在网页上,如新浪微博的评论信息页面,评论的内容是动态加载的,当评论内容被分成多页显示时,不同的评论内容页共用同一个URL。由于这些评论网页的结构十分相似,且在每一个动态页面中都包含多个触发元素,若要爬取到完整的评论信息,就需要用户对这些元素进行操作。
基于Ajax技术的微博网页,其首页的用户信息、用户微博的各个链接、微博内容都能在HTML源文件中查看到。针对这一特点,本研究采用协议驱动的方法,采集用户信息;采用事件驱动的方法,采集微博评论信息。
2.2.1 数据预处理
预处理阶段的任务是通过对样本网页进行分析,提出采集规则,提高对评论信息的采集效率。在运行时,使用Ajax状态表示一个动态网页的信息,采用全探测算法[6]查找页面中的有效触发元素,算法如下:
初始状态
构建关于状态的DOM Tree
储存状态标识至标识库,状态编号及内容至内容库
If 第一次处理 then
遍历DOM Tree
获取触发事件列表
Else
查询触发事件列表
Endif
If 有未处理事件 then
获取事件状态
添加新状态至相应库
Else
结束
endif
上述算法中,在判断Ajax状态是否有效时,采用树匹配算法[10],即递归比较两棵树的第一层子树,求最大的匹配节点对。若两棵树的根节点不同,则这两棵树的最大匹配为零,不再比较子树,否则顺序比较每个子节点,最后得到两棵树的最大匹配节点数。
对于DOM Tree为T的HTML文档,假设其每个结点标记对应一个HTML标签,则任意两棵树的相似度可按如下公式计算:
相似度 = 最大匹配节点数 / 平均节点数
两棵树的最大匹配节点树越大,则两棵树越相似。在判断时,若两棵树的DOM结构相似度大于90%,则需要重新遍历并比较两棵树中各个节点的文本信息,若发生变化的节点数小于节点总数的15%,则认为新得到的Ajax状态是重复的,该状态无效,否则,新得到的Ajax状态是有效的。
2.2.2 信息采集
为了能够快速地采集主题信息,采用协议驱动和事件驱动相结合的采集方式,并将采到的信息存入数据库中。
协议驱动采集时,根据HTTP协议获取网页,并对网页中的信息进行处理,提取网页中的链接。使用WinInet(Windows Internet)库提供的方法,根据给定的URL快速获得网页的HTML源文件,使用正则表达式提取网页中的超链接。
事件驱动采集时,根据预处理模块得到的采集规则,完成该模块中地址队列的动态评论信息采集。
事件驱动采集流程如图2-2所示。
图2-2 事件驱动采集流程
2.2.3 信息采集数据存储
在将Web信息存入数据库前,必须对微博内容、微博评论信息进行格式化处理,以保证所抽取信息的一致性。鉴于模板匹配算法抽取精确、部署快速的特点,本系统采用了模板匹配的方式进行信息处理。操作时,先对所采集到的网页进行分析,找出最佳匹配模板,使模板的数据信息与该模块所对应的数据库字段相对应,再将数据保存至数据库中。配置模板的流程如图2-3所示。
图2-3 数据存储流程
3.实验结果及分析
3.1 面向微博的网络爬虫框架
本文以/1738289495为例,主要抽取微博内容、时间、转发数和评论数和评论内容,原文和抽取结果如图3-1、3-2所示。
图3-1 微博原文
从图中可以看出,通过结合协议驱动采集和事件驱动采集、模板匹配算法设计的网络爬虫,成功地抽取到了微博内容,同时删除了引用等其他无关信息。
图3-2 抽取结果
3.2 数据比对与分析
微博信息抽取的性能可以定义以下两个衡量指标:微博主题内容的正确提取率(IAR)、微博评论内容的正确提取率(IDI)。
(1)
微博内容总数是指某账户在某时刻登录微博首页所能查看到的所有微博主题内容的总数;抽取到的微博主题内容总数是指爬虫所抓取的正确的微博主题内容总数。
(2)
微博评论总数是指所有微博主题内容的评论数的总和;抽取的微博评论总数是爬虫正确抽取的微博评论总数。
为了对算法进行性能分析比较,本实验使用同一账号在同一时间登录微博,以保证起始页面相同。实验数据统计有460条微博和31482条评论信息,分别使用本文爬虫和BFS(Best First Search)算法爬取的信息量作比较,如表3-1所示。
表3-1 信息爬取量对比表
微博内容总数 正确抓取微博内容 IAR(%)
BFS 460 46 10%
本文爬虫 460 424 92.17%
微博评论总数 正确抓取
评论数 IDI(%)
BFS 31482 0 0%
本文爬虫 31482 29543 93.84%
表3-1的数据表明,本文设计的爬虫能够采集动态信息,相对于普通的爬虫提高了信息采集的覆盖率。
表3-2 触发次数对比表
评论
页数 未制定触发约束(触发次数) 有约束条件
(触发次数)
微博1 3 23 2
微博2 7 67 6
微博3 11 136 10
微博4 17 167 16
微博5 25 243 24
另外,针对有效触发元素的设计,本文随机选择了5篇新浪微博的评论信息进行抓取,以验证约束条件触发的高效性,触发次数对比如表3-2所示。
表3-2的数据表明,本文通过对触发设定约束条件,仅针对翻页信息触发,减少了无效触发,提高了采集动态信息的效率。
4.结论
Ajax技术通过异步方式向服务器发送并获取数据,减少了时间开销,降低了数据流量,受到国内外学术及商业领域的关注。本文通过分析Ajax技术在微博等评论页面的应用现状,设计了针对微博类网站的支持Ajax技术的爬取策略。
本文的主要贡献如下:
(1)通过分析协议驱动采集和事件驱动采集的特点以及适用领域,本文提出了根据微博信息的特点,采用了协议驱动采集和事件驱动采集相结合的方法,保证了信息获取的效率和完整性。
(2)在分析现有的Ajax信息采集技术研究之上,本文提出了对Ajax网页触发元素设置约束条件,根据约束条件完成规约,对网页中得翻页元素进行分类处理,为动态信息的快速采集提供规则。实验结果表明该方法能显著提高采集效率。
然而,随着网络开发技术的发展,网页的DOM Tree变得越来越复杂,利用网页的DOM Tree进行动态信息的采集将面临挑战,设计更加灵活的动态信息采集方法成为下一步研究的重点。
参考文献
[1]Gianni Frey.Indexing AJAX Web Application.30.11.2007.
[2]Cristian Duda, Cianni Frey, Donald Kossmann.AJAX Search : Crawling, Indexing and Searching Web 2.0 Applications.ACM 2008 2008 VLDB Endowment:1440-1443.
[3]Cristian Duda, Cianni Frey, Donald Kossmann.AJAX Crawl: Making AJAX Application Searchable.IEEE .DOI I 0.1109/ICDE.2009.90:78-89.
[4]Ali Mesbah, Engin Bozdag, Arie van Deursen.Crawling AJAX by Inferring User Interface State Changes.IEEE.DOI 10.1109/ICWE.2008.24:122-134.
[5]罗兵.支持AJAX的互联网搜索引擎爬虫设计与实现[D].浙江大学,2007:41-54.
[6]曾伟辉.支持AJAX的网络爬虫系统的设计与实现[D]中国科学技术大学,2009:50-54.
[7]袁小节.基于协议驱动与事件驱动的综合网络爬虫研究与实现[D].国防科学技术大学技研究生院工学硕士学位论文,2009:32-36.
[8]夏天.Ajax站点数据采集研究综述[J].情报分析与研究,2010:52-57.
[9]楼玲娣,周小斌.网络舆情的运行状态分析[J].特区实践与理论,2009:22-25.
[10]何昕,谢志鹏.基于简单树匹配算法的Web页而结构相似性度量[J].计算机研究与发展,2007:1-6.
[11]C.Chang,M.Kayed,M.R.Girgis and K.F.Shaalan.A Survey of Web Information Extraction Systems[J].IEEE Transactions on Knowledge and Data Engineering, 2006,18(10):1411-1428.
[12]Junfeng Wang,Chun Chen,Jian Pei.Can we learn a template-independent wrapper for news article extraction from a single training site[C].Proceedings of the 15th ACM SIGKDD international conference on Knowledge discovery and data mining,2009:1154-1163.
[13]H Zhao,W Meng,C Yu.Mining templates from search result records of search engines[C].International Conference on Knowledge Discovery and Data Mining,2007:623-632.
基金项目:湖南省教育厅科研项目(30972362);国家自然科学基金项目(30972362,31070568);湖南省自然科学基金重点项目(10JJ2020)。
作者简介: