Как извлечь Infobox из (немецкой) Википедии с помощью MediaWiki API?
Я хочу извлечь информацию из инфобокса из определенных страниц Википедии, в основном из стран. В частности, я хочу добиться этого без очистки страницы с помощью Python
+ BeautifulSoup4
или любые другие языки + библиотеки, если это возможно. Я бы предпочел использовать официальный API, потому что заметил, что теги CSS различны для разных поддоменов Википедии (как и на других языках).
Как получить Infobox из статьи в Википедии от 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
шаблон, потому что, когда я запускаю вышеупомянутый запрос, все, что я получаю, это содержимое, но не 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
Я упускаю что-то очень существенное?
1 ответ
Данные должны быть взяты не из Википедии, а из Википедии, которая является аналогом структурированных данных Википедии. (Кроме того, это не стандартный информационный блок: у него нет параметров, и он заполняется в самом шаблоне.)
Используйте модуль Wikidata API wbgetclaims, чтобы получить все данные о Европейском Союзе:
https://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Q458
Много аккуратнее, а? См. https://www.wikidata.org/wiki/Wikidata:Data_access для получения дополнительной информации.