1

我对 Wikipedia API 很陌生,但我最近遇到了一个基于 wikimedia 构建的中文网站,我想用它来帮助我将各种页面解析为可行的格式,以便最终使用 XPATH 进行处理。看了一会儿,我发现 action=parse 参数就是我要找的。例如,以下查询可以毫无困难地加载:(来自 Wikipedia)

api.php?action=parse&page=Main_Page&format=xml

它显示文本,然后是语言链接,然后是链接。我对链接部分特别感兴趣,因为我将使用这些数据来爬过这个基于维基百科的站点来创建页面层次结构。

为了复制这些结果,我将查询添加到我网站的页面末尾:

http://www.youbianku.com/api.php?action=parse&page=%E5%8C%97%E4%BA%AC&format=xml

%E5%8C%97%E4%BA%AC 解析为北京的汉字,顺便说一句。无论如何,我得到以下结果:

<api>
<error code="params" info="The page parameter cannot be used together with the text and title parameters"/>
</api>

我所做的只是从维基百科复制查询并替换页面名称。我不清楚为什么这会突然引发错误。在该页面运行其他API查询没有问题,如下图所示:

api.php?action=query&format=xml&titles=%E5%8C%97%E4%BA%AC&rvprop=content&prop=revisions

我最近读到这可能是由于 htaccess 重写规则默认添加了标题。鉴于我是该网站的客户,有没有办法绕过这些?

4

1 回答 1

3

正如您所建议的,此问题可能是由损坏的 URL 重写规则引起的。

text您可以通过使用参数并嵌入所需的页面来解决此问题,如下所示:

/api.php?action=parse&text={{:Page_title}}

(默认情况下,前导:是为了防止Template:在页面标题之前添加。)

在您问题中的示例页面上尝试此操作会返回一个 PHP 错误,原因可能是不相关的,但它适用于该 wiki 上的其他页面。

这个技巧的一个缺点是它绕过了解析器缓存,这使得它比简单地使用page. 此外,页面上使用的任何依赖于页面标题的变量都可能产生意想不到的结果,任何依赖于页面或修订元数据的变量都可能完全失败幸运的是,这些变量在实践中并不经常使用。


另一个可能更好的解决方案可能是简单地使用

/index.php?action=render&title=Page_title

它将返回页面的已解析 HTML 源代码,而没有任何周围的皮肤,就像这样。这种方法不如 API 通用,但它不会遇到上述任何问题。

于 2012-09-08T21:49:22.797 回答