Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过API从mediawiki页面获取文本内容_Mediawiki_Wikipedia Api_Mediawiki Api - Fatal编程技术网

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

通过API从mediawiki页面获取文本内容,mediawiki,wikipedia-api,mediawiki-api,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 A

我对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有可能实现这一点吗?

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

你可以自己去掉格式,如果你想的话,但是你会在这个过程中破坏一些东西


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

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

对我来说,有效的方法是请求HTML页面(使用浏览器中使用的普通URL)并去掉content div下的HTML标记

编辑:


我使用for Java取得了很好的效果。它提供了如何在给定DIV下去除HTML标记的示例。

使用
action=parse
获取HTML:

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

这是最简单的方法:
API的TextExtracts扩展可以满足您的要求。使用
prop=extracts
获得已清除的响应。例如还有一个好处是,它仍然包含节标记,因此您可以识别文章的各个节

为了在我的答案中包含一个可见链接,上面的链接如下所示:

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

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

在MediaWiki页面末尾添加
?action=raw
以原始文本格式返回最新内容。例如:-

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

参数:

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

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

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


除节(
=
)之外的所有格式都会被剥离。

使用action=render获得尽可能干净的页面:

vs


我做了同样的事情,我有java应用程序,它必须接收wiki页面的文本内容。当我使用api并接收wikisyntax页面时,它运行得非常快,但我需要清晰的文本,我尝试请求HTML页面并去掉HTML标记,但运行缓慢,因此我询问了WikiAPI中的此功能。或者你现在可以使用一些很好的wikisyntax clear text converter for Java,然后我可以直接用Java进行转换?wikipedia语言的真正问题是它是图灵完整的。如果仔细查看页面的代码,就会发现各种自定义函数。这些函数的定义也必须被获取,然后进行解释,这可能会扩展到更多的函数。这就是为什么我恢复到html解析,它包含完整的呈现文本。MediaWiki的wikitext并不是完全图灵完整的,因为开发人员勇敢地抵制了编辑器对循环构造的要求。但是,要从MediaWiki中获取纯文本,您需要获取HTML,然后将其剥离,这是正确的。您可能希望使用我用Perl为该工作制作的
html2Text.pl
工具,或者将其转换为您最喜欢的语言:API的一个相对较新的扩展(TextExtracts)现在允许从文章中提取纯文本。请参阅我的答案。不幸的是,这将返回MediaWiki标记,需要对其进行分析才能检索文本。TextExtracts是MediaWiki的扩展。它适用于Wikipedia,但并非适用于所有MediaWiki安装。我在维基百科以外的网页上尝试了这个,但没有成功。这需要扩展吗?它似乎只适用于英文维基百科-如果您将
%26action%3Draw
更改为
?action=raw
,它可以工作。是否有任何方法可以使用此方法在同一请求中获取页面标题?这非常完美。谢谢这将只提供第一部分,而不是整篇文章的文本。我们还可以使用exsectionformat=plain删除wikitext样式的格式(=像这样==)。来源:
action=parse
也可以通过添加
format=JSON
返回JSON。我没有足够的微货币来为这么老的问题添加答案,但对于任何搜索者来说,值得注意的是,Mediawiki TextExtracts API()只提供了文章的文本内容。(它保留了文章标题,但这相对容易被正则表达式去掉。)没有足够的微货币进行编辑:实际上,你也可以删除标题标记。示例查询:
http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Yahoo|Google&redirects=
import wikpedia
wikipedia.set_lang('de')
page = wikipedia.page('Wikipedia')
print(page.content)