跳转至内容

XQuery/维基百科查找

来自维基教科书,开放世界中的开放书籍

页面抓取是检索特定事实的一种方式,前提是其结构是稳定的。

这里,任务是使用维基百科查找鸟类的拉丁名称,给定其通用名称。

declare namespace h = "http://www.w3.org/1999/xhtml";

let $name := request:get-parameter("name",())
let $url := escape-uri(concat("http://en.wikipedia.org/wiki/",$name),false()) 
let $page := doc($url)
let $genus := $page//h:tr[h:td[. ='Genus:']]/h:td[2]
let $species := $page//h:tr[h:td[. ='Species:']]/h:td[2]
let $binomial := string($page//h:tr[h:th//h:a[.='Binomial name']]/following-sibling::h:tr//h:b)
return 
   <bird name="{$name}" genus="{$genus}" species="{$species}" binomial="{$binomial}"/>

这里,定位所需数据的路径,假设页面采用鸟类页面格式,涉及复杂的 XPath 表达式。例如,属名是第一单元格为“属名”的表格行的第二个单元格。

黑天鹅 维基百科

脚本经常失败,因为

  1. 名称不明确 画眉鸟维基百科
  2. 名称过于广泛 奇异鸟 维基百科

不难看出,具有本体关系的更多语义标记将优于这些不确定的扭曲。

华夏公益教科书