33

维基百科文章可能有信息框模板。通过以下调用,我可以获得包含信息框的文章的第一部分。

http://en.wikipedia.org/w/api.php?action=parse&pageid=568801&section=0&prop=wikitext

我想要一个只返回信息框数据的查询。这可能吗?

4

4 回答 4

34

您可以像这样通过对 Wikipedia API 的 URL 调用来做到这一点:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0

将该部分替换为titles=您的页面标题,如果您想要 JSON 格式的文章,则format=xmlfm替换为。format=json

于 2012-12-12T21:06:53.060 回答
17

与其自己解析非常复杂的信息框,不如查看DBPedia,它将维基百科信息框提取为数据库对象。

于 2011-11-02T04:28:29.093 回答
4

如果页面有右侧信息框,则使用此 URL 以 txt 形式获取它。

我的例子是使用元素。您需要做的就是用您的标题替换“Hydrogen”。

https://en.wikipedia.org/w/index.php?action=raw&title=Template:Infobox%20hydrogen

如果您正在寻找 JSON 格式,请使用此 URL,但它并不漂亮。

https://en.wikipedia.org/w/api.php?action=parse&page=Template:Infobox%20hydrogen&format=json

于 2017-05-25T12:49:38.570 回答
3

garry's answer 的基础上,您可以让 Wikipedia 通过rvparse参数将信息框解析为 HTML,如下所示:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0&rvparse

请注意,这两种方法都不会返回信息框。但是从 HTML 内容中,您可以提取(通过,例如,Beautiful Souptablewith 类infobox

Python中,您可以执行以下操作

resp = requests.get(url).json()
page_one = next(iter(resp['query']['pages'].values()))
revisions = page_one.get('revisions', [])
html = next(iter(revisions[0].values()))
# Now parse the HTML 
于 2017-01-30T11:06:34.757 回答