Как можно извлечь данные о категории определенной страницы в русской википедии?

Например, имеется страница Бутерброд. Как извлечь информацию о категориях?

Как можно извлечь данные о категории определенной страницы в русской википедии? Например, имеется страница [Бутерброд](https://ru.wikipedia.org/wiki/%D0%91%D1%83%D1%82%D0%B5%D1%80%D0%B1%D1%80%D0%BE%D0%B4). Как извлечь информацию о категориях? https://habrastorage.org/files/c5a/063/170/c5a063170c474d719098bf9cf6677392.png

Лучше всего использовать MediaWiki API и использовать action=query вместе с prop=categories:

Вот пример: https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=categories&continue=&titles=Бутерброд (результат)

Скрипт на питоне (адаптированно отсюда):

import urllib
import urllib2

import json

url = 'http://ru.wikipedia.org/w/api.php'
values = {'action': 'query',
          'prop': 'categories',
          'titles': 'Бутерброд',
          'format': 'json',
          'continue': ''}

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
resp_json = response.read()

def extract_categories(dict_page):
    categories = dict_page['categories']
    return [d['title'] for d in categories]

pages = json.loads(resp_json)['query']['pages'].values()
buter = pages[0]
print ', '.join(extract_categories(buter))

Так же можно запросить категории сразу для нескольких статей, для этого в параметр titlesнадо записать названия, разделенные |: 'titles': 'Бутерброд|Оливье (салат)':

pages = json.loads(resp_json)['query']['pages'].values()
buter = pages[0]
print ', '.join(extract_categories(buter))

rus_salad = pages[1]
print ', '.join(extract_categories(rus_salad))

Вывод:

Категория:Бутерброды, Категория:Википедия:Нет источников с декабря 2011, Категория:Википедия:Статьи с утверждениями без источников более 14 дней, Категория:Статьи со ссылками на Викисловарь

Категория:Русская кухня, Категория:Салаты

Лучше всего использовать [MediaWiki API](https://www.mediawiki.org/wiki/API:Tutorial) и использовать `action=query` вместе с `prop=categories`: Вот пример: `https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=categories&continue=&titles=Бутерброд` ([результат](https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=categories&continue=&titles=Бутерброд)) Скрипт на питоне (адаптированно [отсюда](http://stackoverflow.com/questions/11471684/query-wikipedia-data-page)): import urllib import urllib2 import json url = 'http://ru.wikipedia.org/w/api.php' values = {'action': 'query', 'prop': 'categories', 'titles': 'Бутерброд', 'format': 'json', 'continue': ''} data = urllib.urlencode(values) req = urllib2.Request(url, data) response = urllib2.urlopen(req) resp_json = response.read() def extract_categories(dict_page): categories = dict_page['categories'] return [d['title'] for d in categories] pages = json.loads(resp_json)['query']['pages'].values() buter = pages[0] print ', '.join(extract_categories(buter)) Так же можно запросить категории сразу для нескольких статей, для этого в параметр `titles`надо записать названия, разделенные `|`: `'titles': 'Бутерброд|Оливье (салат)'`: pages = json.loads(resp_json)['query']['pages'].values() buter = pages[0] print ', '.join(extract_categories(buter)) rus_salad = pages[1] print ', '.join(extract_categories(rus_salad)) Вывод: > Категория:Бутерброды, Категория:Википедия:Нет источников с декабря 2011, Категория:Википедия:Статьи с утверждениями без источников более 14 дней, Категория:Статьи со ссылками на Викисловарь > Категория:Русская кухня, Категория:Салаты
298
просмотров
1
ответов
1
подписчики
Предпросмотр
введите как минимим 10 characters
WARNING: You mentioned %MENTIONS%, but they cannot see this message and will not be notified
Сохраняю...
Сохранено
Все темы будут удалено ?
Сохранены неопубликованные черновики. Нажмите для продолжения редактирования
Discard draft