通过 API 从 mediawiki 页面获取文本内容
我对 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 可以实现这一点吗?
I'm quite new to MediaWiki, and now I have a bit of a problem.
I have the title of some Wiki page, and I want to get just the text of a said page using api.php, but all that I have found in the API is a way to obtain the Wiki content of the page (with wiki markup). I used this HTTP request...
/api.php?action=query&prop=revisions&rvlimit=1&rvprop=content&format=xml&titles=test
But I need only the textual content, without the Wiki markup.
Is that possible with the MediaWiki API?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
使用
action=parse
获取 html:/api.php ?action=parse&page=test
从 html 获取文本的一种方法是将其加载到浏览器中并使用 JavaScript 遍历节点,仅查找文本节点。
Use
action=parse
to get the html:/api.php?action=parse&page=test
One way to get the text from the html would be to load it into a browser and walk the nodes, looking only for the text nodes, using JavaScript.
API 的 TextExtracts 扩展可以满足您的要求。使用
prop=extracts
获得清理后的响应。例如, 此链接将为您提供 Stack Overflow 文章的清理文本。同样好的一点是它仍然包含部分标签,因此您可以识别文章的各个部分。只是为了在我的答案中包含一个可见的链接,上面的链接如下所示:
编辑:正如 Amr 提到的,TextExtracts 是 MediaWiki 的扩展,因此不一定适用于每个 MediaWiki 站点。
The TextExtracts extension of the API does about what you're asking. Use
prop=extracts
to get a cleaned up response. For example, this link will give you cleaned up text for the Stack Overflow article. What's also nice is that it still includes section tags, so you can identify individual sections of the article.Just to include a visible link in my answer, the above link looks like:
Edit: As Amr mentioned, TextExtracts is an extension to MediaWiki, so it won't necessarily be available for every MediaWiki site.
在 MediaWiki 页面末尾添加
?action=raw
以原始文本格式返回最新内容。例如:- https://en.wikipedia.org/wiki/Main_Page?action=raw< /a>Adding
?action=raw
at the end of a MediaWiki page return the latest content in a raw text format. Eg:- https://en.wikipedia.org/wiki/Main_Page?action=raw您可以使用
explaintext
参数从 API 获取文本格式的 wiki 数据。另外,如果您需要访问许多图书的信息,您可以通过一次调用获取所有图书的 wiki 数据。使用竖线字符|
分隔每个标题。例如,此 API 调用将从“Google”和“Yahoo”页面返回数据:参数:
explaintext
:以纯文本形式返回摘录,而不是有限的 HTML。exlimit=max
:返回多个结果。当前最大值为 20。exintro
:仅返回第一部分之前的内容。如果您想要完整的数据,只需删除它即可。redirects=
:解决重定向问题。You can get the wiki data in text format from the API by using the
explaintext
parameter. Plus, if you need to access many titles' information, you can get all the titles' wiki data in a single call. Use the pipe character|
to separate each title. For example, this API call will return the data from both the "Google" and "Yahoo" pages:Parameters:
explaintext
: Return extracts as plain text instead of limited HTML.exlimit=max
: Return more than one result. The max is currently 20.exintro
: Return only the content before the first section. If you want the full data, just remove this.redirects=
: Resolve redirect issues.这是最简单的方法:
http ://en.wikipedia.org/w/api.php?format=xml&action=query&titles=Albert%20Einstein&prop=revisions&rvprop=content
That's the simplest way:
http://en.wikipedia.org/w/api.php?format=xml&action=query&titles=Albert%20Einstein&prop=revisions&rvprop=content
提出此问题的 Python 用户可能对
wikipedia
模块感兴趣 (docs):除部分 (
==
) 之外的所有格式都是条带化的离开。Python users coming to this question might be interested in the
wikipedia
module (docs):Every formatting, except for sections (
==
) is striped away.我认为使用 API 不可能只获取文本。
对我有用的是请求 HTML 页面(使用在浏览器中使用的普通 URL)并删除内容 div 下的 HTML 标签。
编辑:
我使用 Java 的 HTML Parser 取得了很好的结果。它提供了如何删除给定 DIV 下的 HTML 标签的示例。
I don't think it is possible using the API to get just the text.
What has worked for me was to request the HTML page (using the normal URL that you would use in a browser) and strip out the HTML tags under the content div.
EDIT:
I have had good results using HTML Parser for Java. It has examples of how to strip out HTML tags under a given DIV.
使用 action=render 获得尽可能干净的页面:
https://wiki.eclipse .org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I?action=render
与
https://wiki .eclipse.org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I
Use action=render to get the cleanest possible page:
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
将内容引入页面后,您可以做一件事 - 您可以使用 PHP 函数
strip_tags()
删除 HTML 标记。You can do one thing after the contents are brought into your page - you can use the PHP function
strip_tags()
to remove the HTML tags.