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

时间:2009-10-26 14:32:50

标签: mediawiki wikipedia-api mediawiki-api

我对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有关吗?

10 个答案:

答案 0 :(得分:64)

使用action=parse获取html:

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

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

答案 1 :(得分: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网站。

答案 2 :(得分:28)

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

答案 3 :(得分:23)

您可以使用explaintext参数从API获取文本格式的wiki数据。另外,如果您需要访问许多标题'信息,您可以获得所有标题'一次通话中的维基数据。使用竖线字符|分隔每个标题。例如,此API调用将返回来自" Google"和#34;雅虎"网页:

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=:解决重定向问题。

答案 4 :(得分:9)

答案 5 :(得分:5)

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

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

编辑:

我使用HTML Parser获得了很好的结果。它提供了如何在给定DIV下去除HTML标记的示例。

答案 6 :(得分:2)

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

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

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

答案 7 :(得分:2)

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:-4)

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