2015-02-05 46 views
1

我想從特定的Wikipedia網站(主要是國家/地區)提取信息框中的信息。具體而言,如果可能的話,我希望在不使用Python + BeautifulSoup4或任何其他語言+庫的情況下使用官方API來實現此目的,因爲我注意到不同Wikipedia網站的CSS標記不同(與其他語言不同) 。如何使用MediaWiki API從(德語)維基百科中提取信息框?

How to get Infobox from a Wikipedia article by Mediawiki API?中指出,使用以下方法可以工作,這對給定的診所(Scary Monsters and Nice Sprites)確實如此,但不幸的是,在我嘗試使用的頁面上(下面會進行)無效。

http://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

[如何從維基百科獲取信息框數據?](http://stackoverflow.com/questions/3312346/how-to-get-the-infobox-data-from-wikipedia) – Termininja 2016-12-09 19:43:27

回答

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

相關問題