Вход Регистрация

Парсинг

Прямой парсинг Википедии VS Wikipedia API: как получить вики-данные на Python

Парсинг Википедии на Python: разбираем Wikipedia API и ручной скрапинг, лимиты запросов, готовые библиотеки и способы избежать блокировки IP при сборе данных.

Команда Froxy 6 мая 2026 7 мин
Прямой парсинг Википедии VS Wikipedia API: как получить вики-данные на Python

Википедия — это открытая энциклопедия, созданная в 2001 году Джимми Уэйлсом и Ларри Сэнгером. Она наполняется сообществом энтузиастов и переведена на сотни разных языков мира (360+). Со временем энциклопедия дополнилась массой вспомогательных проектов, таких как Викисловарь, Викисклад, Викицитатник, Викитека и пр. Эта экосистема теперь объединяется под крылом Wikimedia Foundation.

Так как проекты Викимедиа содержат более 300 млн страниц с предметной информацией, это делает их самой полной базой данных, которую можно использовать для разных задач: обучения ИИ, создания справочных разделов, уточнения переводов и значений слов, подбора изображений/иконок/другого контента и т.п.

Этот материал о том, как можно парсить Википедию: есть ли у неё API, где и какие готовые библиотеки можно найти, что лучше — прямой парсинг или API, в каких ситуациях.

Есть ли у Википедии API?

Да, у Википедии есть API, но стоит помнить, что это не результат микросервисной архитектуры. Это стало возможным благодаря открытому движку — MediaWiki, написанному на PHP. Это как WordPress, но только рассчитанный не на блоги, а на сайты онлайн-энциклопедий. И в нём уже «зашиты» нужные программные интерфейсы.

В частности, на текущий момент Вики API доступен в трёх форматах:

  • Прямая отправка запросов по HTTP-протоколу. За их обработку отвечает скрипт на PHP. Доступ к нему можно получить по адресу РЕГИОНАЛЬНАЯ-ВЕРСИЯ.wikipedia.org/w/api.php. Обработчик поддерживает набор определённых аргументов, среди которых даже есть функционал для форматирования ответа. К этому интерфейсу можно обращаться без авторизации — например, если вам нужно только получить данные, без правки или добавления чего-либо.
  • MediaWiki REST API (JavaScript API). Современная и более функциональная версия RESTful-API. Эндпоинт — /w/rest.php. Эта версия API обеспечивает доступ буквально ко всем ресурсам экосистемы Wikimedia, а не только к Википедии. Первая версия протокола работает по адресу /api/rest_v1/ и подходит в основном для получения краткой информации по теме.
  • Wikimedia Enterprise API. Группа интерфейсов для корпоративных пользователей — с платной подпиской. Включает Snapshot API, On-demand API и Realtime API. Данные возвращаются только в формате JSON (или ND-JSON). Часть обращений предоставляется бесплатно.

Для многих типовых задач уже реализованы:

  • Набор ботов, способных автоматизировать рутинные задачи при взаимодействии с Wikipedia API.
  • Набор готовых библиотек для разных языков программирования, которые облегчают написание своего парсера или скрипта автоматизации.
  • Модули расширений для API MediaWiki.
  • Мануалы по созданию своих ботов и скриптов.

Основы работы с API Википедии: что можно получить без парсинга

Основы API Википедии

API Википедии позволяют получать структурированные данные напрямую, без необходимости скачивать HTML-страницу и анализировать её синтаксис через BeautifulSoup или аналогичные библиотеки. Это быстрее, надёжнее и проще.

Что конкретно можно получить «из коробки» через MediaWiki Action API (/w/api.php):

  • Краткое введение статьи (первые абзацы) в виде чистого текста.
  • Полный текст статьи в формате plain text (без HTML-разметки).
  • Полный wikitext (уже с разметкой).
  • HTML-код статьи или отдельных разделов.
  • Метаданные страницы: ID, пространство имён, время последней правки, размер.
  • Список категорий страницы.
  • Все внешние и внутренние ссылки.
  • Список изображений (с названиями файлов и ссылками).
  • Историю правок (ревизии).
  • Список похожих страниц, перенаправления и шаблоны, используемые на странице.
  • Результаты поиска по названию и содержимому.

Всё перечисленное выше возвращается в JSON-формате или в виде HTML/чистого текста. Вам не нужно самостоятельно искать нужные теги или чистить текст от служебных элементов. API Википедии уже делает всю эту работу за вас. Автоматическая обработка данных Wiki становится проще и быстрее.

API MediaWiki и REST эндпоинты

Покажем пару примеров прямых HTTP-запросов для получения нужных данных. Примерно так можно организовать веб-парсинг Wikipedia без сложных скриптов и библиотек:

Получение содержимого

GET https://ru.wikipedia.org/w/api.php?action=parse&format=json&formatversion=2&page=Python_(язык_программирования)&prop=text&disableeditsection=1

Этот запрос вернёт всё содержимое статьи без разметки, шаблонов и служебных элементов внутри JSON. Настройка осуществляется с помощью параметров: format, formatversion, prop и disableeditsection. Искомая страница передаётся в параметре page.

Поисковой запрос

GET https://ru.wikipedia.org/w/api.php?action=query&format=json&formatversion=2&list=search&srsearch=язык программирования Python&srlimit=10&srwhat=text

Этот запрос вернёт список статей с заголовками, сниппетами (фрагментами текста) и номерами результатов.

Автодополнение (поиск материалов)

GET https://ru.wikipedia.org/w/api.php?action=opensearch&format=json&formatversion=2&search=Питон&limit=10&namespace=0

Возвращает классический формат OpenSearch — массив в формате: [query, [titles], [descriptions], [urls]].

Как правильно указывать User-Agent и соблюдать лимиты API Wikipedia

Википедия очень строго относится к автоматическим запросам. Если не соблюдать правила, ваш IP могут временно или постоянно заблокировать

На что обратить внимание:

  • User-Agent нужно указывать обязательно! Даже если запрос без авторизации и токенов. Никогда не используйте дефолтный User-Agent библиотек (python-requests, curl и других HTTP-клиентов). Правильный User-Agent должен содержать: уникальное название вашего проекта / скрипта, номер версии, контактную информацию (email или ссылку на страницу проекта в открытых хранилищах).

Пример правильного User-Agent:

headers = {"User-Agent": "МойПарсерВикипедии/1.2 (https://example.com/myproject; contact@example.com)"}
  • Соблюдайте лимиты запросов. Параметр maxlag должен быть не менее 5 секунд. Если такого параметра нет, то следует исходить из нагрузки в 10 запросов каждую минуту. Не стоит выполнять многопоточные запросы. Одно постоянное соединение с последовательными запросами — это предел API Wiki.
  • Следите за ошибками сервера. Если вместо содержимого сервер возвращает ошибку доступа, нужно выдержать увеличенную паузу. С большой вероятностью сервер сейчас перегружен. Повторная попытка доступа только усугубит ситуацию.
  • По возможности используйте сжатие. Конкретная реализация и поддержка разных форматов будет зависеть от целевого ресурса.
  • Добавьте своего парсера или бота в монитор активности Wikipedia:Bot. Так вы сможете получать важные уведомления от API Википедии.

Все требования и рекомендации по использованию ботов автоматически вытекают из политики Wikimedia.

Ручной парсинг Википедии: когда это имеет смысл

Ручной парсинг Википедии

Как можно было заметить, официальный API Википедии не подходит для масштабного парсинга — нужно ждать по 5–10 секунд между запросами, да и количество потоков наращивать нельзя. Это уровень pet-проектов, не более.

Чтобы обойти эти ограничения, можно пойти разными путями:

  • использовать готовые облачные сервисы для парсинга Wiki (они даже часто называют свои услуги API-интерфейсами),
  • создать сразу несколько независимых ботов и организовать их параллельную работу с разных серверов / IP-адресов,
  • написать свой собственный скрипт и парсить Википедию на своих условиях: через сеть ротируемых прокси. Благо, что сайт Wiki пока написан на PHP и не использует большого объёма JavaScript. То есть исходный код страниц можно получать напрямую через HTTP-клиенты — без headless-браузеров.

Когда ручной парсинг действительно имеет смысл:

  • Нужно извлечь данные, которых нет в API — чтобы парсер извлекал не весь текст или блоки, а конкретную информацию. Например, специфические шаблоны, сложные инфобоксы в нестандартном формате, динамически подгружаемые элементы и т.п.
  • Требуется очень большой объём обращений. Например, для создания своей локальной базы знаний или материалов для машинного обучения: изображения с тегами, подбор терминов из определённой тематики и т.п.
  • Необходимы данные из боковых блоков, которые по API Википедия обычно не отдаёт. А именно здесь часто размещено всё самое интересное и важное.
  • Вы делаете одноразовый быстрый анализ небольшой группы страниц и не хотите разбираться с API.
SERP Scraper

Парсите Google, Bing и другие поисковики — быстро, стабильно и удобно.

Попробовать триал

Пример простейшего парсера Wikipedia на Python без дополнительных библиотек

Этот скрипт парсинга Wikipedia принимает поисковый запрос (термин), находит наиболее релевантную страницу через поиск Wikipedia, извлекает первый абзац (определение) и сохраняет результат в DataFrame.

import requests
from bs4 import BeautifulSoup
import pandas as pd

def get_wikipedia_intro(query):
    # 1. Формируем URL поиска
    search_url = "https://en.wikipedia.org/w/index.php"
    params = {
        "search": query
    }
    
    response = requests.get(search_url, params=params)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 2. Пытаемся найти первую ссылку на статью
    result = soup.select_one(".mw-search-result-heading a")
    
    if result:
        article_url = "https://en.wikipedia.org" + result.get("href")
    else:
        # Если сразу открылась статья (редирект)
        article_url = response.url
    
    # 3. Загружаем страницу статьи
    article_response = requests.get(article_url)
    article_soup = BeautifulSoup(article_response.text, "html.parser")
    
    # 4. Ищем первый абзац
    paragraphs = article_soup.select("p")
    
    intro_text = None
    for p in paragraphs:
        text = p.get_text(strip=True)
        if text:
            intro_text = text
            break
    
    return {
        "query": query,
        "url": article_url,
        "intro": intro_text
    }

if __name__ == "__main__":
    query = input("Введите термин: ")
    data = get_wikipedia_intro(query)
    df = pd.DataFrame([data])
    print(df)
    # при необходимости фрейм можно сохранить
    df.to_csv("wikipedia_intro.csv", index=False)

Как использовать API Википедии на Python

Как использовать API Википедии на Python

Конечно, писать парсер с нуля всегда сложнее. Википедия поощряет открытый код и даже рекламирует на своих страницах массу готовых библиотек и инструментов автоматизации. Существует даже специальный каталог инструментов от сообщества — Toolhub.

  • Библиотека wikipedia 1.4+. Использует синтаксис официального API MediaWiki (движка). С её помощью вы можете существенно ускорить написание своих скриптов автоматизации. Но помните о лимитах официального API.
  • Wikipedia-API. Ещё одна обёртка для официального API, подходит для получения summary и полного текста статьи, разделов, изображений, категорий, ссылок и языковых версий. Активно развивается разработчиками.
  • Mwparserfromhell. Помогает с разбором исходного кода страниц Википедии — это самый мощный парсер разметки MediaWiki. Но для полноценной работы требует связки с HTTP-клиентом.
  • Pywikibot. Официальная библиотека от Wikimedia Foundation для создания своих ботов и подключения к API Википедии.
  • Pymediawiki. Подходит для работы с Action API на низком уровне, когда нужна максимальная гибкость и контроль. Это тонкая обёртка над MediaWiki API с минимальными абстракциями.
  • Wikidata. Создана специально для работы со структурированными данными Викиданных — свойства, элементы, запросы.

Пример на Python: поиск и получение страницы Википедии

Не забудьте установить недостающие библиотеки: pip install Wikipedia-API pandas.

import requests
import wikipediaapi
import pandas as pd

def create_wiki_client(lang="en"):
    """
    Инициализация клиента Wikipedia API
    """
    return wikipediaapi.Wikipedia(
        language=lang,
        extract_format=wikipediaapi.ExtractFormat.WIKI,
        user_agent="my-wiki-parser/1.0 (example@mail.com)"  # Обязательно заменить на свои данные!!!!
    )

def search_wikipedia(query, lang="en"):
    """
    Поиск релевантной статьи через API Wikipedia
    """
    url = f"https://{lang}.wikipedia.org/w/api.php"
    params = {
        "action": "query",
        "list": "search",
        "srsearch": query,
        "format": "json"
    }
    try:
        response = requests.get(url, params=params, timeout=10)
        response.raise_for_status()
        data = response.json()
        results = data.get("query", {}).get("search", [])
        if results:
            return results[0]["title"]
    except Exception as e:
        print(f"[Search error]: {e}")
    return None

def get_wikipedia_intro(query, wiki, lang="en"):
    """
    Основная функция:
    - ищет статью
    - получает страницу
    - извлекает первый абзац
    """
    title = search_wikipedia(query, lang)
    if not title:
        return {
            "query": query,
            "title": None,
            "url": None,
            "intro": None,
            "status": "not_found"
        }

    page = wiki.page(title)

    if not page.exists():
        return {
            "query": query,
            "title": title,
            "url": None,
            "intro": None,
            "status": "page_not_exists"
        }

    intro = page.summary.split('\n')[0]

    return {
        "query": query,
        "title": page.title,
        "url": page.fullurl,
        "intro": intro,
        "status": "ok"
    }

if __name__ == "__main__":
    query = input("Enter the term: ").strip()
    # можно менять язык: en / ru / de
    lang = "en"

    # 1. создаём клиент
    wiki = create_wiki_client(lang)

    # 2. получаем данные
    result = get_wikipedia_intro(query, wiki, lang)

    # 3. вывод
    df = pd.DataFrame([result])
    print(df)

    # 4. сохранение
    df.to_csv("wikipedia_result.csv", index=False)

В отличие от прямого парсинга HTML, здесь используется официальный API, что делает код стабильнее и проще.

API Википедии или прямой парсинг Wiki: что выбрать?

Сначала расскажем о плюсах и минусах каждого из подходов.

Официальный API Википедии обеспечивает максимальную стабильность и предсказуемость парсера, вы можете распланировать нагрузку и запустить практически любые задачи с минимальным написанием кода. Данные можно собирать сразу в нужном формате — без дополнительной обработки. А если у вас активна корпоративная подписка на Wikimedia Enterprise API, то и о лимитах можно не переживать. Когда вы придерживаетесь рекомендаций сервиса, риск блокировок будет минимальным. Возможности API Wikipedia закрывают 90% всех возможных задач. Если вам не нужно изменять содержимое страниц энциклопедии или размещать новый контент, то API вполне сможет работать без авторизации.

Прямой парсинг Википедии сопряжён с рядом рисков: при высокой скорости запросов можно получить перманентный или постоянный бан по IP-адресу, редко, но вёрстка страниц может изменяться, что автоматически приводит к необходимости частичной переделки парсера. Сам парсер нужно написать и поддерживать в актуальном состоянии, следить за его работой на своём оборудовании. Однако, если задействовать систему прокси-серверов, вы легко сможете обойти потенциальные баны и ограничения по числу обращений к серверам экосистемы Wikimedia. Плюс можно собирать абсолютно любые данные, в том числе те, которые невозможно получить по API.

Так что выбрать?

Если у вас pet-проект и нужно собрать небольшой объём информации по определённой тематике, то гораздо логичнее выбрать официальный API Википедии. Для взаимодействия с энциклопедией и хранилищами свободного медиаконтента имеются готовые библиотеки и подробная документация. Создание парсера займёт минимум времени и сил.

Но если вам нужно собрать большие объёмы данных за короткий промежуток времени или со страниц нужно достать особый (нестандартный) контент, то придётся писать собственный парсер. Он не сможет стабильно работать без качественных прокси с ротацией.

Заключение

Википедия действительно способствует открытому распространению информации. Все сервисы экосистемы Wikimedia имеют официальные API-интерфейсы, причём не один, а сразу несколько — для разных задач и целей. Чтобы быстро и без проблем собрать небольшой объём данных, а также получить информацию об обновлениях, Википедия предлагает массу готовых инструментов и библиотек. Плюс есть масса технических решений от сторонних разработчиков.

Однако, если говорить о масштабном парсинге, API Википедии может не подойти, так как интерфейс имеет существенные лимиты на скорость обработки запросов и подходит далеко не для всех задач. По этой причине может потребоваться создание собственного парсера, игнорирующего API.

Ни один масштабный парсер не сможет работать без качественных прокси. Froxy — это огромный пул резидентных, мобильных и серверных прокси с автоматической ротацией. С ними вы можете не бояться блокировок и параллельно запускать обработку сотен потоков сбора данных.

Получайте уведомления о новых функциях и обновлениях Froxy

Узнайте первыми о новых функциях Froxy, чтобы оставаться в курсе событий происходящих на рынке цифровых технологий и получать новости о новых функциях Froxy.

Статьи по Теме