2014-03-12 40 views
1

我试图从维基百科页面中提取内部链接。这是我正在使用的查询如何从维基百科页面的最新版本获取内部链接?

/w/api.php?action=query&prop=links&format=xml&plnamespace=0&pllimit=max&titles=pageTitle 

但是,结果并不反映维基页面上的内容。以一个随机文章here为例。此页面上只有十几个链接。但是,当我作出查询时,

/w/api.php?action=query&prop=links&format=xml&plnamespace=0&pllimit=max&titles=Von_Mises%E2%80%93Fisher_distribution 

我找回了187个链接。我猜这个API可能有一个包含所有修改的页面的所有链接的数据库。是这样吗?我如何才能从最后一次修订中获得链接?

+2

难道是你忘了导航盒中的链接?从我可以看到API回复的所有链接都在页面中。你能举一个不应该在那里的链接的例子吗? – leo

+0

+1。你说得对,利奥。不幸的是,这个API不允许我指定页面的哪一部分从( – chepukha

回答

5

该数据库包含当前版本文章中链接的正确列表。您从API获得的所有链接实际上都在文章中。但是,其中大部分隐藏在底部的(两次折叠)导航框中(滚动到底部,单击蓝色条上的“显示”,然后单击现在看到的其他蓝色条上的“显示”)。

请注意,这些链接位于页面上,但未在wiki文本中定义 - 它们来自{{ProbDistributions}}导航模板(以及模板反过来包含的模板)。

不幸的是,没有好的方法只列出在页面上直接/显式定义的链接,因为模板替换发生在实际解析wiki语法之前。

+0

+1)中提取链接,我发现它使事情比我预期的更复杂,在这种情况下,我想最好的方法是解析wikitext。但是你知道任何可用的解析器,这对于这项工作很有用吗?谢谢。 – chepukha

+0

不幸的是,MediaWiki语法非常复杂,并且调用将它变成HTML为“解析器”的东西使用这个术语非常失败。要重新实现“规范”解析器的确切行为非常困难,我们得到的结论是Parsoid,但是有一堆“体面的”解析器应该足够好,可以帮助您获得链接。 :https://www.mediawiki.org/wiki/Alternative_parsers – brightbyte

+0

如果你想要的只是提取链接,你可以使用来自PyWikipedia框架或类似库的代码,也可以https://stackoverflow.com/questions/ 1968132 /如何对解析提取物-数据从-a-的mediawiki标记 - 上 - 文章 - 通过 - 蟒蛇 – brightbyte

相关问题