【发布时间】:2011-11-30 02:30:58
【问题描述】:
维基百科文章可能有信息框模板。通过以下调用,我可以获得包含信息框的文章的第一部分。
http://en.wikipedia.org/w/api.php?action=parse&pageid=568801§ion=0&prop=wikitext
我想要一个只返回信息框数据的查询。这可能吗?
【问题讨论】:
标签: wikipedia-api mediawiki-api
维基百科文章可能有信息框模板。通过以下调用,我可以获得包含信息框的文章的第一部分。
http://en.wikipedia.org/w/api.php?action=parse&pageid=568801§ion=0&prop=wikitext
我想要一个只返回信息框数据的查询。这可能吗?
【问题讨论】:
标签: wikipedia-api mediawiki-api
如果页面有右侧信息框,则使用此 URL 以 txt 格式获取。
我的示例是使用元素hydrogen。您只需将“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
【讨论】:
在garry's answer 的基础上,您可以让维基百科通过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)table,类为 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
【讨论】:
您可以像这样通过 URL 调用 Wikipedia API 来做到这一点:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0
如果您想要 JSON 格式的文章,请将 titles= 部分替换为您的页面标题,并将 format=xmlfm 替换为 format=json。
【讨论】:
不要自己解析信息框,这很复杂,看看DBPedia,它将维基百科信息框提取为数据库对象。
【讨论】: