如何通过MediaWiki API获得维基百科文章的信息框?

35

维基百科文章可能有Infobox模板。通过以下调用,我可以获取包含Infobox的文章的第一节。

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

我想要一个只返回Infobox数据的查询,这是否可行?


请参考如何从维基百科信息框中提取信息?以获取更详细的答案。 - Tgr
4个回答

38

您可以通过向维基百科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=部分,并将format=xmlfm改为format=json以获取JSON格式的文章。


17

不要自行解析信息框,这相当复杂。可以查看DBPedia,该网站将维基百科信息框提取为数据库对象。


4
这将为您提供有关特定实体的所有关系,但不会告诉您信息框中存在哪些字段。 - MFARID
2
据我所知,他们没有通过API提供任何数据库,只有一些数据提取工具。因此,您需要在本地获取所有内容。 - Onkeltem

5

Garry的回答的基础上,您可以通过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 Soup)带有类infoboxtable
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 

4

5
我认为这是有效的,因为这个页面存在: https://en.wikipedia.org/wiki/Template:Infobox_hydrogen。 仅将“ hydrogen”替换为“ summer”是不起作用的。 - Mariano Soto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接