我对 MediaWiki 还很陌生,现在遇到了一些问题。我有某个 Wiki 页面的标题,我想使用以下方法获取所述页面的文本 api.php, ,但我在 API 中找到的只是一种获取页面 Wiki 内容的方法(带有 wiki 标记)。我使用了这个 HTTP 请求...

/api.php?action=query&prop=revisions&rvlimit=1&rvprop=content&format=xml&titles=test

但我只需要文本内容,不需要 Wiki 标记。MediaWiki API 可以实现这一点吗?

有帮助吗?

解决方案

我认为使用 API 不可能只获取文本。

对我有用的是请求 HTML 页面(使用您在浏览器中使用的普通 URL)并删除内容 div 下的 HTML 标签。

编辑:

我使用得到了很好的结果 HTML解析器 对于Java。它提供了如何删除给定 DIV 下的 HTML 标签的示例。

其他提示

使用 action = parse 获取html:

/api.php?action=parse&page=test

从html获取文本的一种方法是将其加载到浏览器中并使用JavaScript遍历节点,仅查找文本节点。

API的TextExtracts扩展程序可以解决您的问题。使用 prop = extracts 来获得清理的响应。例如,此链接将为您提供清洁Stack Overflow文章的文本。同样不错的是,它仍然包含部分标签,因此您可以识别文章的各个部分。

只是在我的回答中包含一个可见的链接,上面的链接如下:

/api.php?format=xml&action=query&prop=extracts&titles=Stack%20Overflow&redirects=true

编辑:正如Amr所提到的,TextExtracts是MediaWiki的扩展名,因此不一定适用于每个MediaWiki网站。

在MediaWiki页面的末尾添加?action = raw 以原始文本格式返回最新内容。例如: - https://en.wikipedia.org/wiki/Main_Page?action=raw

您可以使用以下 API 从 API 获取文本格式的 wiki 数据 explaintext 范围。另外,如果您需要访问许多图书的信息,您可以通过一次调用获取所有图书的 wiki 数据。使用管道字符 | 分隔每个标题。例如,此 API 调用将返回“Google”和“Yahoo”页面的数据:

http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Yahoo|Google&redirects=

参数:

  • explaintext: :以纯文本而不是有限的 HTML 形式返回摘录。
  • exlimit=max: :返回多个结果。目前最大值为 20。
  • exintro: :仅返回第一部分之前的内容。如果您想要完整的数据,只需删除它即可。
  • redirects=: :解决重定向问题。

参与此问题的Python用户可能对 wikipedia 感兴趣模块( docs ):

import wikpedia
wikipedia.set_lang('de')
page = wikipedia.page('Wikipedia')
print(page.content)

除了部分( == )之外,每个格式都被条带化了。

没有任何格式符号的Wiki页面在许多情况下都没有多大意义。

如果你愿意,你可以自己去除格式,但是你会在这个过程中破坏一些东西。

(除非您正在创建类似搜索引擎的内容,在这种情况下,您只需要文本部分,并且可以完全忽略格式符号)

将内容放入页面后,您可以做一件事 - 您可以使用PHP函数 strip_tags()来删除HTML标记。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top