Как извлечь 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

Я упустил что-то очень существенное?


person user3607973    schedule 05.02.2015    source источник
comment
Возможный дубликат Как получить данные Infobox из Википедии?   -  person Termininja    schedule 09.12.2016


Ответы (1)


Данные следует брать не из Википедии, а из Викиданных, которая является аналогом структурированных данных Википедии. (Кроме того, это не стандартное информационное окно: у него нет параметров и оно заполняется на сам шаблон.)

Используйте модуль API Викиданных wbgetclaims, чтобы получить все данные о Европейский Союз:

https://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Q458

Намного аккуратнее, а? См. https://www.wikidata.org/wiki/Wikidata:Data_access для получения дополнительной информации. .

person Nemo    schedule 28.07.2015