我想从特定的维基百科页面(主要是国家)中提取信息框中的信息。具体地说,我希望在不使用Python
+BeautifulSoup4
或任何其他语言+库(如果可能的话)来抓取页面。我宁愿使用官方API,因为我注意到不同Wikipedia子域的CSS标记是不同的(就像在其他语言中一样)。在
In How to get Infobox from a Wikipedia article by Mediawiki API?声明使用下面的方法可以工作,对于给定的标题(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
模板,因为当我运行上面的查询时,我得到的只是内容,而不是{Europäische_Union
(欧盟)上运行查询会得到以下片段中的结果(以及其他结果)
不过,对于英文版的维基百科来说,它很好用。在
所以我想从中提取infobox的页面是: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
我错过了什么重要的东西吗?在
数据不能取自维基百科,而应取自维基百科的结构化数据。(另外,这不是一个标准的infobox:它没有参数,并且填充在the template itself上)
使用Wikidata API模块wbgetclaims获取欧盟的所有数据:
整洁多了,是吗?更多信息请参见https://www.wikidata.org/wiki/Wikidata:Data_access。在
相关问题 更多 >
编程相关推荐