Pywikibot — это Python-библиотека и коллекция инструментов для автоматизации работы на сайтах, работающих на движке MediaWiki, включая Википедию и другие проекты Фонда Викимедиа. Проект был основан в 2003 году и с тех пор стал стандартным инструментом для написания ботов в вики-проектах. Прекрасный работник Сибирской Википедии.

Обзор

Pywikibot предоставляет удобный интерфейс для взаимодействия с MediaWiki API, позволяя разработчикам создавать скрипты для массового редактирования страниц, управления категориями, обработки данных Викиданных, загрузки файлов и выполнения многих других задач. Фреймворк поддерживает все основные проекты Викимедиа, а также может быть настроен для работы с любым сайтом на MediaWiki.

Версии

Проект Pywikibot существует в нескольких версиях. Изначально он разрабатывался под названием pywikipedia с использованием системы контроля версий SVN. В 2013 году проект был перенесён на Git, и в это же время были введены новые названия для различных версий:

  • pywikibot-compat — последняя версия устаревшего фреймворка (версия 1), разрабатывавшаяся с июня 2003 по ноябрь 2016 года. Она представляла собой набор скриптов с центральной библиотекой Wikipedia.py.
  • pywikibot-core — текущая версия, основанная на версии 2 фреймворка, разработка которой началась в ноябре 2007 года. В этой версии скрипты стали лучше интегрированы и унифицированы.

Технические требования

Для работы Pywikibot требуется Python версии 3.9 или выше. Фреймворк совместим с MediaWiki версии 1.31 и новее. Pywikibot поддерживает операционные системы Windows, macOS и Linux.

Установка и настройка

Установка

Существует несколько способов установки Pywikibot. Для разработки и использования всех скриптов рекомендуется клонировать репозиторий из Git:

git clone https://gerrit.wikimedia.org/r/pywikibot/core.git

cd core

git submodule update --init

Для использования Pywikibot только как библиотеки (без скриптов) можно установить его через pip:

pip install pywikibot

Настройка

После установки необходимо создать файл конфигурации user-config.py, в котором указываются параметры подключения к вики-сайту. Основные настройки включают:

mylang — код языка вики-проекта (например, 'ru' для русской Википедии)

family — семейство вики-проекта (например, 'wikipedia')

usernames — имя пользователя бота для каждого сайта

Пример минимального файла user-config.py:

python mylang = 'ru' family = 'wikipedia' usernames['wikipedia']['ru'] = 'MyBot'

Авторизация

Pywikibot поддерживает несколько способов аутентификации. Рекомендуемым способом для ботов в проектах Викимедиа является использование OAuth. Для ботов, работающих на частных вики, можно использовать пароль бота (BotPassword).

PAWS

Для пользователей, которые не хотят устанавливать Pywikibot на свой компьютер, существует облачная среда PAWS (PAWS: A Web Shell) — веб-оболочка с предустановленным Pywikibot, доступная по адресу https://hub-paws.wmcloud.org/.

Toolforge

Для запуска ботов в проектах Викимедиа на постоянной основе можно использовать Toolforge — облачную платформу для разработчиков, предоставляемую Фондом Викимедиа. В Toolforge есть специальный образ, содержащий Pywikibot и настроенный для работы с OAuth.

Использование

Командная строка

Pywikibot включает множество готовых скриптов, которые можно запускать из командной строки с помощью основного скрипта pwb.py. Примеры:

Запуск скрипта для страниц

python pwb.py script_name

Указание сайта и языка

python pwb.py script_name -family:wikipedia -lang:ru

Доступные глобальные параметры включают -simulate (режим симуляции, без реальных изменений), -verbose (подробный вывод), -log (ведение лога) и другие.

Библиотека

Pywikibot может использоваться как библиотека для написания собственных скриптов. Ниже приведён пример минимального скрипта:


import pywikibot

site = pywikibot.Site('ru', 'wikipedia') # сайт, на котором будет работать бот

page = pywikibot.Page(site, 'Участник:MyBot/Песочница')

page.text = page.text + '\nДобавленный текст'

page.save('Добавление текста')

Более сложные боты могут наследоваться от классов, предоставляемых Pywikibot:

python

import pywikibot

from pywikibot import pagegenerators

from pywikibot.bot import ExistingPageBot

class MyBot(ExistingPageBot):

   update_options = {
       'text': 'Пример текста',
       'summary': 'Бот: тестовая правка'
   }
   def treat_page(self):
       text = self.current_page.text
       text += '\n' + self.opt.text
       self.put_current(text, summary=self.opt.summary)

def main():

   # Обработка аргументов командной строки
   gen_factory = pagegenerators.GeneratorFactory()
   local_args = pywikibot.handle_args()
   local_args = gen_factory.handle_args(local_args)
   
   # Создание и запуск бота
   bot = MyBot(generator=gen_factory.getCombinedGenerator())
   bot.run()

if __name__ == '__main__':

   main()

Работа с Викиданными

Pywikibot предоставляет специальные классы для работы с Викиданными. Пример получения данных из элемента Викиданных:

import pywikibot

site = pywikibot.Site('wikipedia:en')

repo = site.data_repository()

item = pywikibot.ItemPage(repo, 'Q42')

item.get()

print(item.labels['en']) # Вывод метки на английском языке

print(item.claims) # Вывод утверждений

Редактирование элемента Викиданных:

item.editLabels(labels={'en': 'Новая метка'}, summary='Обновление метки')

item.editDescriptions(descriptions={'en': 'Новое описание'})

item.setSitelink(sitelink={'site': 'enwiki', 'title': 'Page title'})

Встроенные скрипты

Pywikibot включает множество встроенных скриптов для выполнения типовых задач. Некоторые из наиболее часто используемых:

Скрипт Описание redirect.py Исправляет двойные и повреждённые перенаправления replace.py Выполняет массовую замену текста на страницах category.py Управление категориями interwiki.py Добавление и обновление интервики-ссылок (устаревает в эпоху Викиданных) image.py Управление изображениями template.py Замена шаблонов editarticle.py Редактирование статей с возможностью загрузки из файла Полный список скриптов доступен в документации MediaWiki.

Архитектура

Pywikibot имеет модульную архитектуру. Основные модули:

pywikibot — основные классы и функции

pywikibot/page.py — классы для работы со страницами MediaWiki

pywikibot/site.py — классы для работы с сайтами MediaWiki

pywikibot/data/api.py — низкоуровневый интерфейс к MediaWiki API

pywikibot/pagegenerators.py — генераторы страниц

pywikibot/bot.py — базовые классы для создания ботов

pywikibot/families.py — конфигурации для различных вики-семейств

Лицензия

Pywikibot распространяется под лицензией MIT.