我想从特定的维基百科页面(主要是国家/地区)中提取信息框中的信息。具体来说,如果可能的话,我希望在不使用Python
+ BeautifulSoup4
或任何其他语言+库的情况下抓取页面的情况下实现此目的。我宁愿使用官方API,因为我注意到不同维基百科子域的CSS标签不同(与其他语言一样)。
在How to get Infobox from a Wikipedia article by Mediawiki API?状态下,使用以下方法会起作用,对于给定的tital(Scary Monsters and Nice Sprites
)确实如此,但遗憾的是在我尝试的页面上没有工作(下面进一步说明) )。
https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0
但是,我认为Wikimedia
更改了他们的infobox
模板,因为当我运行上述查询时,我得到的只是内容,而不是infobox
。例如。在以下代码段中的Europäische_Union
(European_Union)结果(以及其他)上运行查询
{{Infobox Europäische Union}}
<!--{{Infobox Staat}} <- Vorlagen-Parameter liegen in [[Spezial:Permanenter Link/108232313]] -->
它适用于维基百科的英文版。
因此我要从中提取信息框的页面是:http://de.wikipedia.org/wiki/Europäische_Union
这是我使用的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import lxml.etree
import urllib
title = "Europäische_Union"
params = { "format":"xml", "action":"query", "prop":"revisions", "rvprop":"content", "rvsection":0 }
params["titles"] = "API|%s" % urllib.quote(title.encode("utf8"))
qs = "&".join("%s=%s" % (k, v) for k, v in params.items())
url = "http://de.wikipedia.org/w/api.php?%s" % qs
tree = lxml.etree.parse(urllib.urlopen(url))
revs = tree.xpath('//rev')
print revs[-1].text
我错过了一些非常重要的内容吗?
答案 0 :(得分:0)
数据不得来自维基百科,而是来自维基数据,这是维基百科的结构化数据对应物。 (另外,这不是一个标准的信息框:它没有参数,而且它填充在the template itself上。)
使用维基数据API模块wbgetclaims获取欧盟的所有数据:
https://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Q458
更整洁,嗯?有关详情,请参阅https://www.wikidata.org/wiki/Wikidata:Data_access。