如何从Mediawiki API的维基百科文章中获取Infobox?

Erd*_*dem 27 wikipedia-api mediawiki-api

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

http://en.wikipedia.org/w/api.php?action=parse&pageid=568801&section=0&prop=wikitext
Run Code Online (Sandbox Code Playgroud)

我想要的是一个只返回Infobox数据的查询.这可能吗?

Gaʀ*_*ʀʀʏ 28

您可以通过对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
Run Code Online (Sandbox Code Playgroud)

更换titles=部分与你的页面标题,并format=xmlfmformat=json如果你想在JSON格式的文章.


jpa*_*kal 13

而不是自己解析信息框,这是非常复杂的,请看一下DBPedia,它将Wikipedia信息框提取为数据库对象.

  • 但是,这将为您提供与特定实体的所有关系,但不会告诉您信息框中存在哪些字段 (2认同)
  • IUIC 他们不通过 API 提供任何数据库,只提供一些提取工具。所以你需要在本地获取所有内容。 (2认同)

reu*_*ano 5

基于garry 的回答,您可以让 Wikipedia 通过参数将信息框解析为 HTML,rvparse如下所示:

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

请注意,这两种方法都不会仅返回信息框。但是,您可以从 HTML 内容中提取(通过例如Beautiful Souptablewith class 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 
Run Code Online (Sandbox Code Playgroud)