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

Le_*_*eur 58 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
Run Code Online (Sandbox Code Playgroud)

但我只需要文本内容,没有Wiki标记.MediaWiki API可以实现吗?

gil*_*ly3 68

使用action=parse得到的HTML:

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

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

  • `action = parse`也可以通过添加`format = json`返回JSON. (8认同)

eri*_*ell 42

API的TextExtracts扩展可以解决您的问题.使用prop=extracts得到清理响应.例如,此链接将为您提供Stack Overflow文章的清理文本.同样不错的是它仍然包含部分标签,因此您可以识别文章的各个部分.

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

/api.php?format=xml&action=query&prop=extracts&titles=Stack%20Overflow&redirects=true
Run Code Online (Sandbox Code Playgroud)

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

  • TextExtracts是MediaWiki的扩展.它可用于维基百科,但不适用于每个MediaWiki安装.https://www.mediawiki.org/wiki/Extension:TextExtracts (7认同)

bai*_*jum 30

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


Anu*_*raj 25

您可以使用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=
Run Code Online (Sandbox Code Playgroud)

参数:

  • explaintext:将提取返回为纯文本而不是有限的HTML.
  • exlimit=max:返回多个结果.最大值目前是20.
  • exintro:仅返回第一部分之前的内容.如果您想要完整数据,只需删除它即可.
  • redirects=:解决重定向问题.

  • 这很完美.谢谢 (3认同)

Har*_*est 11

这是最简单的方法:http: //en.wikipedia.org/w/api.php?format = xml&action = query&titles = Albert%20Einstein&prop = latest&rvprop = content

  • 不幸的是,这会返回MediaWiki标记,需要对其进行解析才能检索文本. (3认同)

Mar*_*oma 7

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

import wikpedia
wikipedia.set_lang('de')
page = wikipedia.page('Wikipedia')
print(page.content)
Run Code Online (Sandbox Code Playgroud)

除了部分 ( ==)之外的所有格式都被剥离了。


Eri*_*and 6

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

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

编辑:

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

  • 维基百科语言的真正问题在于图灵完整.如果仔细查看页面代码,您会注意到各种自定义函数.必须提取这些函数的定义然后进行解释,这可能会扩展到更多的函数.这就是我恢复到html解析的原因,它包含完整的渲染文本. (2认同)
  • MediaWiki的wikitext并不完全图灵,因为开发人员勇敢地反对编辑对循环结构的要求.但你是正确的,要从MediaWiki中获取纯文本,你需要获取HTML然后删除它.您可能希望使用我在Perl中为该作业创建的`html2txt.pl`工具,或将其转换为您喜欢的语言:https://gist.github.com/751910 (2认同)