Как получить Infobox из статьи в Википедии от Mediawiki API?
Статьи Wikipedia могут иметь шаблоны Infobox. Следующим звонком я могу получить первый раздел статьи, который включает в себя Infobox.
http://en.wikipedia.org/w/api.php?action=parse&pageid=568801§ion=0&prop=wikitext
То, что я хочу, это запрос, который будет возвращать только данные Infobox. Это возможно?
4 ответа
Вы можете сделать это с помощью URL-адреса в API Википедии следующим образом:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0
Заменить titles=
раздел с заголовком вашей страницы, и format=xmlfm
в format=json
если вы хотите статью в формате JSON.
Вместо того, чтобы самостоятельно разбирать инфобоксы, что довольно сложно, взгляните на DBPedia, в которой инфобоксы Википедии извлечены как объекты базы данных.
Основываясь на ответе @garry, вы можете сделать так, чтобы википедия проанализировала информационное окно в html для вас через rvparse
параметр вроде так:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0&rvparse
Обратите внимание, что ни один из методов не вернет только информационное окно. Но из HTML-контента вы можете извлечь (например, через Beautifulsoup) table
с классом infobox
,
В Python
, вы делаете что-то вроде следующего
resp = requests.get(url).json()
page_one = next(iter(resp['query']['pages'].values()))
revisions = page_one.get('revisions', [])
html = next(iter(revisions[0].values()))
# now parse the html
Если на странице есть правый информационный блок, используйте этот URL, чтобы получить его в виде текста. Мой пример использует элемент Водород. Все, что вам нужно сделать, это заменить "Водород" на ваш титул.
https://en.wikipedia.org/w/index.php?action=raw&title=Template:Infobox%20hydrogen
Если вы ищете формат JSON, используйте этот URL, но это не очень красиво.
https://en.wikipedia.org/w/api.php?action=parse&page=Template:Infobox%20hydrogen&format=json