维基百科文章可能有信息框模板。通过以下调用,我可以获得包含信息框的文章的第一部分。
http://en.wikipedia.org/w/api.php?action=parse&pageid=568801§ion=0&prop=wikitext
我想要一个只返回信息框数据的查询。这可能吗?
维基百科文章可能有信息框模板。通过以下调用,我可以获得包含信息框的文章的第一部分。
http://en.wikipedia.org/w/api.php?action=parse&pageid=568801§ion=0&prop=wikitext
我想要一个只返回信息框数据的查询。这可能吗?
您可以像这样通过对 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
与其自己解析非常复杂的信息框,不如查看DBPedia,它将维基百科信息框提取为数据库对象。
如果页面有右侧信息框,则使用此 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
在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 Soup)table
with 类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