通过 API 从 mediawiki 页面获取文本内容
-
06-07-2019 - |
题
我对 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=
: :解决重定向问题。
没有任何格式符号的Wiki页面在许多情况下都没有多大意义。
如果你愿意,你可以自己去除格式,但是你会在这个过程中破坏一些东西。
(除非您正在创建类似搜索引擎的内容,在这种情况下,您只需要文本部分,并且可以完全忽略格式符号)
将内容放入页面后,您可以做一件事 - 您可以使用PHP函数 strip_tags()
来删除HTML标记。