【问题标题】:How to get internal link from latest revision of a wikipedia page?如何从维基百科页面的最新版本中获取内部链接?
【发布时间】:2014-03-12 17:45:12
【问题描述】:

我正在尝试从维基百科页面中提取内部链接。这是我正在使用的查询

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

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

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

我收到了 187 个链接。我猜 API 可能有一个包含所有已添加到页面的链接的数据库,包括所有修订。是这样吗?如何仅从最新版本中获取链接?

【问题讨论】:

  • 会不会是您忘记了导航框中的链接?从我可以看到来自 API 回复的所有链接都在页面中。你能举一个不应该存在的链接的例子吗?
  • +1。你是对的,狮子座。不幸的是,API 不允许我指定从页面的哪个部分提取链接:(

标签: mediawiki wikipedia wikipedia-api mediawiki-api


【解决方案1】:

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

请注意,这些链接在页面上,但未在 wikitext 中定义 - 它们来自 {{ProbDistributions}} 导航模板(以及该模板依次包含的模板)。

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

【讨论】:

  • +1。我懂了。它使事情比我预期的要复杂。在这种情况下,我想最好的方法是解析 wikitext。但是你知道有什么可用的解析器对这项工作有好处吗?谢谢。
  • 遗憾的是,MediaWiki 的语法非常复杂,将把它转换为 HTML 的东西称为“解析器”是在使用这个词非常失落。这使得重新实现“规范”解析器的确切行为变得非常困难。我们得到的关闭是 Parsoid,但是有一堆“体面的”解析器应该足以为您提供链接。看看这里:mediawiki.org/wiki/Alternative_parsers
  • 如果您只想提取链接,您可以使用 PyWikipedia 框架或类似库中的代码。苏也stackoverflow.com/questions/1968132/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多