通过API从mediawiki页面获取文本内容

问题描述 投票:53回答:10

我对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可以实现吗?

mediawiki wikipedia-api mediawiki-api
10个回答
5
投票

我不认为使用API​​来获取文本是不可能的。

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

编辑:

我使用HTML Parser for Java取得了不错的成绩。它提供了如何在给定DIV下去除HTML标记的示例。


-4
投票

将内容放入页面后,您可以执行一项操作 - 您可以使用PHP函数strip_tags()删除HTML标记。


64
投票

使用action=parse获取html:

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

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


38
投票

API的TextExtracts扩展可以解决您的问题。使用prop=extracts获得清理的响应。例如,this link will give you cleaned up text for the Stack Overflow article。同样不错的是它仍然包含部分标签,因此您可以识别文章的各个部分。

只是在我的回答中包含一个可见的链接,上面的链接看起来像:

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

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


28
投票

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


23
投票

您可以使用explaintext参数从API获取文本格式的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=:解决重定向问题。


2
投票

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

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

每个格式,除了部分(==)都是条纹。



0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.