下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于XQuery的网页数据抓取技术 摘要:随着手机技术发展和我国3G时代的到来,手机上网将会越来越普遍。有些Web站点支持基于手机的浏览器,而且嵌入式浏览器也试图在小小的屏幕上有效地渲染页面,但是,在电话屏幕上查看典型的Web页面,就像要把一头大象强行塞进车后座一样(其中的每个参与者都会感到失望,包括您、车和大象)。本文试着构建了一个简单、优雅的解决方案,从Web站点上对数据进行数据搜集,然后把数据重新格式化,在小屏幕上显示。关键词:XQuery数据抓取一、XQuery 概述1、XQuery技术概述XQuery工作组于1999年9月正式成立,其任务是创建一种灵活的查询语言以便从XML文档中抽
2、取数据。目前W3C所公布的最新XQuery草案是2003年11月12日的版本,它还在不断的修订和完善之中。作为一种新型的查询语言,XQuery汲取了其它多种查询语言的优点,适用于各种类型的XML数据源的查询,不仅查询功能强大,而且简洁灵活且易于实现。而且,XQuery还具有从多种数据库中检索信息的特点,它能对各种数据和文档进行查询。XQuery构建在XPath规范之上,其核心是能够通过XPath表达式从文档选择特殊的节点序列。XQuery是一种将查询表示成表达式的功能语言。通过它所支持的多种表达式,它的查询可以有各种不同的形式。目前,数据库业界的三大主流厂商Oracle、IBM、Microso
3、ft都已经在各自的产品中提供了对XQuery规范的支持。 XQuery具有强大的查询和检索功能,它通过各种由Key、符号、操作数构成的表达式完成查询,其表达式的操作对象可以又是另一个表达式。二、用XQuery进行网页抓取1、获取数据,转化成规范的XML文档对HTML页面进行屏幕搜集对某些特定问题来说似乎是可行的方案,但是几乎没有用于屏幕搜集的Java工具包。有许多 HTML解析工具,但它们通常缺少足够的抽象能力(把屏幕搜集代码弄得乱七八糟),大量不符合HTML规范的应用限制了它们,它们也无法处理那些结构可能随时间发生变化的、动态生成的页面。 为了弥补质量低下的HTML和丰富的XML处理工具之间
4、的空白,把 HTML 转换成XML对于我们精确的抓取信息将是有利的。许多工具有助于完成这项工作;JTidy工具包做得很好,可以使这项工作变得轻松一些。JTidy的设计目标是读入典型质量(即很糟)的HTML并输出更整洁的结果(有选项可供选择),它还提供了一个 DOM 接口,用来遍历能够发送给XML解析器的HTML文档。下面的代码将从InputStream中读取HTML文档,并生成文档的DOM 表示: Tidy tidy = new Tidy(); tidy.setQuiet(true);tidy.setShowWarnings(false);Document dom = tidy.parseDO
5、M(inputStream, null);用这个简单的转换,就差不多能把每个Web页面都当作XML文档进行处理,还能用自己喜欢的任何XML工具(比如SAX、XSL、XPath等等)提取数据。当然我们可以很容易地使用XPath把需要的数据提取出来,然后对HTML进行格式化。2、数据抓取对 Web页面做屏幕搜集的许多挑战之一是:它们通常没有可以自我标识的结构,而且它们的结构可能随着站点内容的编辑而变化,甚至有可能根据不同的请求,在页面中插入不同的动态内容(例如广告内容)。因此,对于页面中哪一部分的内容与要提取的数据相对应,通常不得不进行猜测。Yahoo!天气页面包含许多portlet面板,我们提取
6、上面所列城市的名称、温度和图标,下面代码显示了一个查询,它查找包含文本“北京”的子面板,然后导航到封闭表格(enclosing table3),并选中所有行:for $d in /tdcontains(a/small/text(), “北京”)for $row in $d/parent:tr/parent:table/trwhere contains($d/a/small/text()1,“北京”)return data($row/td1) data($row/td2/img) $row/td3 $row/td4 然后,对于每一行,XQuery会提取出三个相关的数据列城市名称、温度和图标,并输
7、出一个相对简单的表,表中只包含这三项信息。结果就是比较紧凑地显示了所关心城市的信息,适合在小屏幕上显示。针对HTML页面执行XQuery表达式所需要的代码非常少。可以用JTidy库来清理HTML文档,然后把它表示成DOM对象。Saxon XQuery引擎被用来编译和执行针对文档DOM对象的查询。编译和执行一个针对文档DOM表示的 XQuery查询只需要6行代码,代码如下所示:Configuration c = new Configuration();StaticQueryContext qp = new StaticQueryContext(c);XQueryExpression xe = p
8、ileQuery(query);DynamicQueryContext dqc = new DynamicQueryContext(c);dqc.setContextNode(new DocumentWrapper(tidyDOM, url, c);List result = xe.evaluate(dqc);查询计算的结果是DOM Element的List,您可以用自己喜欢的DOM操纵技术把查询结果显示出来:北京 多云转阴 3119这个查询功能不够完善,它假设文本“北京”将在small元素中(这就是下次Yahoo! 重新设计他们的页面时可以轻松更改的那类标记)。但是,可以多花些精力来开发查询,从而减轻这些风险元素;正如许多开发选择一样,在查询的复杂性与查询的稳定性之间会有一个权衡。三、结束语虽然XQuery是为了查询大型文档而设计的,但是对于转换简单的文档,它也是一个不错的工具。不管是把复杂的页面简化成在小屏幕上显示的页面,还是从多个页面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南昌工学院单招职业技能测试题库带答案详解(典型题)
- 2026年克拉玛依职业技术学院单招职业技能考试题库带答案详解(考试直接用)
- 2026年南充电影工业职业学院单招职业倾向性考试题库及答案详解参考
- 2026年南充科技职业学院单招职业适应性考试题库含答案详解(满分必刷)
- 2026年兰州资源环境职业技术大学单招职业技能测试题库附答案详解(研优卷)
- 2026年内蒙古电子信息职业技术学院单招综合素质考试题库附答案详解(满分必刷)
- 2026年内蒙古丰州职业学院单招职业适应性测试题库及完整答案详解
- 2026年北京北大方正软件职业技术学院单招职业技能测试题库含答案详解(培优)
- 2026年南昌健康职业技术学院单招职业倾向性测试题库带答案详解(达标题)
- 2026届山东省济南市部分学校高三第三次(4月)统一检测试题英语试题试卷含解析
- 湖北省2026届高三上学期元月调考第二次联考物理试卷(含解析)
- 灾害响应中的物资调度协同机制
- 消火栓安全培训知识课件
- DRG支付改革对医院运营的影响及应对
- 2026年湖南环境生物职业技术学院单招职业倾向性测试题库必考题
- 熔盐储热材料研发-洞察与解读
- 人教版7到9年级单词表打印版
- 2025年高压电工复审完整题库(附答案)
- 供热管网系统运行工国家职业标准(征求意见稿)
- 基因组学与基因表达数据分析-洞察阐释
- 2025年湖北高考真题化学试题(原卷版)
评论
0/150
提交评论