(一)网络爬虫
网络爬虫(又称为网页蜘蛛、网络机器人等),是一种按照一定规则自动地抓取万维网信息的程序或者脚本。随着网络地不断发展,信息呈现爆炸式增长,用户需求的个性化也不断增加,如何从海量信息中提取出用户所需,已经越来越成为学者们关注的问题。搜索引擎(Search Engine)是大部分网络用户查找信息所使用的工具,例如传统的通用搜索引擎包括AltaVista、Yahoo!和Google等。其中网络爬虫作为一个自动提取网页的程序,为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。
但是上述通用性搜索引擎有着自身的局限性,例如无法根据用户的领域和背景提供高质量的搜索结果;无法处理日益丰富的数据种类,例如图片、视频、数据库和音频等信息含量密集且有一定结构的数据;通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询等。主题网络爬虫的出现解决了这个问题。
普通的网络爬虫通常在给定的一个或多个统一资源定位符URL(Uniform Resource Locator)种子集情况下,从种子网页开始采集,在抓取网页的过程中,不断将新的URL放进待爬行的URL队列中,直到满足一定条件(如待爬行队列为空、达到指定爬行数量等)停止爬行。主题爬虫是按照预先定义的爬行主题,在给定初始URL种子集后,根据一定的分析算法,对爬行网页进行主题相关分析,过滤与主题不相关网页,在不断抓取相关网页的过程中,将与主题相关的链接放进待爬行队列中,重复这个过程,直到达到一定目标为止。
从上述定义中可以看出两者的不同,普通的网络爬虫的初始URL种子集可以是任何的门户网站,而主题爬虫的初始URL种子集是与事先定义的主题高度相关的页面,这一原则保证了主题爬虫所收集的网页是与用户需求十分吻合的,并且避免了无关页面的下载。由于相关技术和方法正在不断发展和完善中,下面结合一些学者的研究,介绍一些主题爬虫采用的主要方法。
1.传统的启发式方法
传统的启发式方法主要包括:基于文字内容的启发式方法和基于Web链接超链图的评价方法。基于文字内容的启发式方法是指利用网页中的锚文本(一种链接形式)、文本内容和URI。字符串信息等作为分析对象的一种爬虫方法。其代表方法包括:鱼群搜索策略(Fish Search)、鲨鱼搜索策略(Shark Search)和最佳优先策略(Best First Search)等。
鱼群搜索策略将每一个网络看作一条鱼,将搜索的相关信息看作鱼食,当在网页中发现相关信息时,这些鱼就继续繁殖,即沿着链接网页继续寻找相关信息;当网页中无相关信息时,则鱼死亡,即停止进一步寻找。相关信息与搜索关键字的匹配程度可以用二元分类法(0代表不相关,1代表相关)来计算。
鲨鱼搜索策略在鱼群搜索策略的基础上有所改进,加入了相似度度量,取值为[0,1],利用已下载页面的锚文本、页面内容等作为参数来计算待下载页面与搜索主体的相关性,以此判断是否将待下载页面放入爬行队列中。
最佳优先策略是对鲨鱼搜索策略的进一步优化,通过计算向量空间的相关性,将相关性程度高的页面优先下载。但是此方法忽略了一些当前相关性不高但是链接页面中具有很大相关性的页面,有一定的局限性,比较适合定位局部范围内的最优解。
除了基于文字内容的启发式方法外,基于Web链接超链图的评价方法也是传统的爬虫方法之一。这种方法主要包括网页级别(PageRank)和HITS(Hyperlink-induced Topic Search)算法,主要考虑通过超链接形成的网络有向图对搜索主题的影响。
PageRank的概念最早是指一篇学术论文被人引用的次数越多,其权威性越高,它在爬虫领域的思想是每个页面的链接越多,意味着被其他网站投票的次数越多。
在PageRank概念的基础上,Kleinberg J.于1997年最早提出HITS算法,通过两个评价权值Authority(内容权威度)和Hub(链接权威度)来评估网页质量。HITS算法分别考虑网页的内容和链接权威度,再将其整合以综合评价网页价值,计算量较大,并且比较侧重网页的权威性,忽视了网页与搜索信息的契合程度,所以后人对此进行了一些改进,例如在传递PageRank值的同时增加主题相关度的计算等。
2.基于概念语义的分析方法
传统的启发式方法大多是基于关键字进行主题描述和相关度计算的,很多时候会出现一词多义或一译多词的情况,此时就应该结合具体的语境和语义进行分析,避免增加噪音页面或者遗漏的情况。基于概念语义的分析方法包括以本体和叙词表为基础的两类方法。
本体是指共享概念模型的形式化规范说明,其目标是捕获相关领域的知识,确定领域词汇,并从不同层次的形式化模式上给出这些词汇相互关系的明确定义。下面介绍一些相关的以本体为基础的概念语义分析方法。
LSCrawler方法是利用本体来判别URL字符串与主题的相关性。用户在搜索引擎输入关键字后,其返回的链接将送到LSCrawler,下载链接页面并提取相关信息,再与本体中的概念进行匹配从而判断页面的相关性,并对链接进行排序。
面向网络资源的本体自动构建方法是通过对网络上各领域Web语料文档库进行挖掘来实现本体学习,并构建基于本体的主题爬虫。这种方法可以方便读者了解与文档相关的文章与信息,实现主动推荐与关联功能。
叙词表(或称主题词表、检索词典)是一种将文献作者、检索者等使用的自然语言转化成规范的叙词型检索语言的术语控制工具,是叙词法的具体体现。
Kang Li等人将叙词表与传统的信息检索技术相结合,提出使用叙词表的族来描述爬虫的主题,并用该方法设计了主题爬虫。其框架包括:主题域的构造和通过主题域对网页的主题过滤和链接分析控制,实现页面主题资源的自动生成。学者通过实验证明相对于谷歌和百度引擎,其设计的主题爬虫爬取网页的质量明显提高,但采集数量有限,需进一步改良。
Xie Zhi-ni基于叙词表构建了一种概念树来描述主题概念的分析算法框架。I在分析URL的相关度时,首先判断其锚文本的相关度是否达到一个阈值σ,若达到阈值,则将锚文本的相关度作为URL的相关度,若达不到阈值,下载URL对应的页面并进行分析。这样可以充分利用锚文本信息,减少不必要的计算过程。
总体来说,基于概念语义的分析方法可以很好地描述主题,提高爬虫结果的精确度。但在实际的分析中,基于本体的方法的计算过程往往比较复杂,难以实现,而基于叙词表的方法很难在语义和知识层面上描述信息,因此适用性还需要进一步发展。
(二)维基百科
维基百科创建于2001年1月15日。是一个基于维基技术的全球性多语言百科全书协作计划,同时也是一部用多种语言编成的网络百科全书,其目标及宗旨是为全人类提供自由的百科全书。它是一个动态的、可自由访问和编辑的全球知识体。(www.daowen.com)
截至2015年11月1日,维基百科条目数第一的英文维基百科已有500万个条目。全球所有280种语言的独立运作版本共有超过3700万个条目,总登记用户超越5900万人,而总编辑次数更是超过21亿次。中文的大部分页面都可以由任何人使用浏览器进行阅览和修改。
维基百科是按照一定的规则对所有词条进行分类的,其中“人物”是一大类别,包括重要的历史人物和当今社会有影响力的人物。因为维基百科群体协作的编辑方式,使得词条的可信度加强。我们可以通过社会计算的方法,对人物词条的关系网络进行挖掘,以探寻一些重要人物之间隐性的关系信息。维基百科人物类数据获取流程如图3-5所示。
图3-5 维基百科人物类数据获取流程
维基百科将完整的数据库转储文件提供给用户,文件中包含了当前版本的条目、模板、图片描述、基本的原页面。这些信息以不同的格式存储,并且保持实时更新。用户需要提供一个页面名称列表,来提取并储存人物类的页面信息。因为维基百科使用了重定向方式避免了人物的重名,所以每个人物名称对应着唯一的页面,因此可以使用人物名称作为页面名称列表来存储页面,这样简单直观且不会出现歧义。
获取人物信息的第一步是根据给定人物名称列表,从XML格式数据包中找到对应的人物信息,并使用SAX解析出对应的人物信息。由于不用考虑人物重名的情况,可以使用人名作为主键建立一个Hash表来解析XML文档。然后通过模板解析器和正则表达式的方式从Infobox和正文内容中提取人物页面信息、正文信息和锚文本信息等,并将这些信息作为人物实体信息存入对应的人物信息队列中。
这种获取人物信息的方式简便且易于操作,并且不会出现歧义或找不到对应页面的情况,这是处理大量数据的一种有效的数据获取方式。
(三)新浪微博
微博于2009年正式上线,是一个由新浪网推出,提供微型博客服务类的社交网站。用户可以通过网页、WAP页面、手机客户端、手机短信、彩信等发布消息,并可以上传图片和连接视频,实现实时分享。新浪微博的主要功能包括:(1)发布信息;(2)转发内容并评论;(3)关注功能;(4)发起话题功能(在两个#号之间插入一段话题);(5)私信功能。
微博平台上包含着海量数据,包括博主信息、微博信息、关注关系等,我们可以通过获取并分析这些数据,探索社会化媒体信息传播的机制与特点。新浪微博的用户可以使用开放平台向外开发的一组API来获取指定格式的数据。API是获取数据的接口,具体的可供使用的接口包括微博接口、用户接口、话题接口、好友分组接口、地理位置接口等。可将这些接口划分为以下三类。
(1)基本信息资料接口,例如用户接口、用户标签接口等。
(2)用户关系信息接口,例如关系接口、好友分组接口等。
(3)微博行为信息接口,例如微博接口、评论接口等。
微博数据获取的基本方式是通过API接口返回数据,以XML或者JSON的格式返回博主信息。微博平台规定:当程序调用上述三类接口时,要向服务器进行授权认证。
开放授权(OAuth)能够保证用户在信息安全的前提下,让第三方访问该用户在微博中存储的各种私密信息,如照片、联系人列表等,而无须将用户名和密码提供给第三方应用。要通过授权认证,需要经过的步骤如下。
(1)首先要向微博平台提出开发者服务申请,在通过了实名身份认证后,向OAuth服务商提交创建应用请求,并将应用信息中的相应编号App Key和应用口令APP Secret写入认证程序配置文件。
(2)利用微博SDK提供的认证程序,向服务区提交API使用申请,填写用户名和密码获取第三方软件应用许可。
(3)申请成功后用户将服务器返回的认证码Access-code提交给认证服务器,服务器通过验证后会向其颁发通过微博授权的API调用令牌Access-Token和相应的密钥。
(4)用户在24小时内可以利用此令牌调用相应的API接口。在授权认证完毕后,用户就可以从API链接中读取数据库中的数据,具体的数据读取流程如图3-6所示。
图3-6 微博数据获取流程
通过图3-6可以看到,在获得授权后可以调用API接口获取数据,通过SAX将XML文件进行解析,以博主的ID作为主键放入Hash表中,如果Hash表中已存在该ID号,则停止解析,否则继续解析每一条微博的博主账号、微博内容、评论数、转发数等信息,并将数据存放在数据库中,等待进一步的分析。最后判断是否继续调用API接口,若调用完毕,则程序结束。
新浪微博平台的数据获取步骤简单明了,较为严格的开放授权系统能够保证用户信息被安全、高效地调用。上述两个例子是较为典型的社会化媒体数据获取案例,在实际的操作分析中,要考虑多种现实情况,运用数据深入分析网络用户的行为,提取用户的社交关系网络并挖掘其中潜在的可利用信息。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。