我对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有关吗?
答案 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)
使用action = render获取最干净的页面:
https://wiki.eclipse.org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I?action=render
VS
https://wiki.eclipse.org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I
答案 8 :(得分:0)
没有任何格式符号的Wiki页面在很多情况下都没有多大意义。
如果你愿意,你可以自己去除格式,但是你会在这个过程中破坏一些东西。
(除非您正在创建类似搜索引擎的内容,在这种情况下,您只需要文本部分,并且可以完全忽略格式符号)
答案 9 :(得分:-4)
将内容放入页面后,您可以做一件事 - 您可以使用PHP函数strip_tags()
删除HTML标记。