Java理论与实践:用XQuery进行屏幕搜集 - 编程入门网
一个 DIY 的门 户网站,聚集并显示来自多个站点的数据。
用 XQuery 进行屏幕搜集 对 Web 页面做屏幕搜集的许多挑战之一是:它们通常没有可以自我标识的结 构,而且它们的结构可能随着站点内容的编辑而变化,甚至有可能根据不同的请 求,在页面中插入不同的动态内容(例如广告内容)。因此,对于页面中哪一部 分的内容与要提取的数据相对应,通常不得不进行猜测。 股票价格 现在,让我们从提取 Yahoo! 财经页面中 IBM 股票的当前价格开始 (http://finance.yahoo.com/q?s=IBM)。这个页面上有许多材料 —— 新闻标 题、广告、财经数据,等等,但是我想要的是股票的价格数据,它放在一个表格 单元格中,靠近包含“Last Trade”的单元格。清单 5 中的查询语句将选择所 有文本内容中包含“Last Trade”的 <td> 节点,然后为每个节点(希望 只有一个)输出一个包含后续 <td> 节点内容的表格行。内容是用 return 子句中的 data() 函数提取的;否则,不仅仅会得到 <td> 节点 中的文本,还会得到所有的标记。(在这个查询中,惟一包含技巧的部分是 text()[1] 这个部分;在这里,text() 函数匹配的是 <td> 元素中的所 有元素 —— 在这个例子只有一个元素,但 XQuery 并不知道这一点 —— 所以 必须进一步告诉它在进行文本匹配之前,必须选择第一个文本节点)。只要页面 包含一个表格单元格的文本是“Last Trade”,而且后续的单元格包含的是股票 价格,那么,即使页面的结构随意变化,也不会造成查询失败。 清单 5. 从 Yahoo! 财经提取股票报价的 XQuery 表达式
天气 现在来试一下另外一个页面。Yahoo! 天气页面包含许多 portlet 面板,我 想提取上面所列城市的名称、温度和图标。(如果登录 Yahoo! 天气页面 http://weather.yahoo.com,则屏幕上会显示出在“我的 Yahoo!”中所选城市 的天气,否则会显示一些主要大城市的天气情况。)清单 6 显示了一个查询, 它查找包含文本“New York, NY”的子面板,然后导航到封闭表格(enclosing table),并选中所有行: 清单 6. 从 Yahoo! 天气提取天气信息的 XQuery 表达式
Java理论与实践:用XQuery进行屏幕搜集(3)时间:2010-12-20 IBM Brian Goetz然后,对于每一行,XQuery 会提取出三个相关的数据列 —— 城市名称、温 度和图标 —— 并输出一个相对简单的表,表中只包含这三项信息。结果就是比 较紧凑地显示了所关心城市的信息,适合在小屏幕上显示。结果如下所示:
|
||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |