Wpull
Последний релиз Wpull на PyPI — 2.0.1 (июнь 2016 года). Он требует старых версий зависимостей (Tornado, html5lib) и на современных версиях Python обычно не устанавливается. На практике Wpull используют внутри grab-site: там свой форк ludios_wpull, и для него нужен Python 3.7 или 3.8. Для новых проектов рассмотрите Wget, grab-site или Browsertrix Crawler.
Wpull — Wget-совместимый загрузчик и кроулер, написанный с нуля на Python. Автор — Christopher Foo (chfoo), лицензия GPL-3.0. Это не форк Wget: Wpull заново реализует его интерфейс и использует некоторые алгоритмы Wget. Репозиторий сейчас находится в организации ArchiveTeam: github.com/ArchiveTeam/wpull.
Когда использовать
✅ Подходит, если нужно:
- снимать сайт по ссылкам сразу в WARC с Wget-подобным набором флагов;
- останавливать и возобновлять б ольшой обход: состояние хранится в базе SQLite (
--database); - расширять логику через Python-плагины (свои правила отбора URL, извлечение ссылок).
❌ Не лучший выбор, если:
- сайт на WordPress с открытым REST API — возьмите wparc;
- нужен рендеринг JavaScript — Browsertrix Crawler или Brozzler;
- нужна простая установка на современной системе — Wget.
Возможности
- Wget-совместимые флаги:
--recursive,--level,--page-requisites,--span-hosts,--accept-regex,--reject-regex,--wait,--random-waitи др. - Запись WARC:
--warc-file,--warc-max-size,--warc-cdx,--warc-dedup,--warc-append,--warc-move. - Параллельные соединения:
--concurrent. - База состояния для возобновления:
--database. - Чтение
sitemap.xml:--sitemaps. - Тонкая настройка выхода на другие хо сты:
--span-hosts-allow linked-pages,page-requisites. - Плагины на Python:
--plugin-script,--plugin-args. - Экспериментальная интеграция с PhantomJS (
--phantomjs) и youtube-dl (--youtube-dl). Оба проекта устарели, PhantomJS не развивается с 2018 года.
Поддерживается только HTTP/1.x: HTTP/2 в Wpull нет.
Установка
# официальный пакет (2.0.1, 2016); требует старого Python и зависимостей
pip3 install wpull
Сборка из исходников:
git clone https://github.com/ArchiveTeam/wpull
cd wpull
pip install .
Если установить не получается, проще поставить grab-site по его инструкции: она описывает подходящую версию Python.
Флаги сверены с документацией wpull.readthedocs.io (версия 2.0.1, октябрь 2026). Сам Wpull локально не запускался.
Использование
Одна страница
wpull example.com/about
Архивация сайта в WARC
Пример из README (сокращён):
wpull example.com \
--warc-file example \
--recursive --level inf \
--page-requisites \
--span-hosts-allow linked-pages,page-requisites \
--wait 0.5 --random-wait --waitretry 600 \
--tries 3 --retry-connrefused --retry-dns-error \
--timeout 60 --session-timeout 21600 \
--sitemaps \
--reject-regex "/login\.php" \
--delete-after \
--database example.db \
--output-file example.log
--delete-afterудаляет скачанные файлы с диска: остаётся только WARC.--databaseпозволяет перезапустить прерванный обход с того же места.- По умолчанию Wpull соблюдает robots.txt. В примере README он отключён через
--no-robots; решайте сами, нужно ли это.
Большой сайт
wpull example.com \
--recursive --level 5 \
--warc-file example --warc-max-size 1000000000 --warc-cdx \
--concurrent 2 --wait 1 \
--database example.db
Ограничить объём можно через --quota (общий объём загрузки).
Плагины
Плагин — класс-наследник wpull.application.plugin.WpullPlugin, который подключается флагом --plugin-script. Функции регистрируются декораторами hook (меняют поведение и возвращают значение) и event (уведомления). Пример по документации:
# skip_logout.py
from wpull.application.plugin import WpullPlugin, PluginFunctions, hook
from wpull.pipeline.session import ItemSession
class SkipLogout(WpullPlugin):
@hook(PluginFunctions.accept_url)
def accept_url(self, item_session: ItemSession, verdict: bool, reasons: dict) -> bool:
if "logout" in item_session.request.url:
return False
return verdict
wpull example.com --recursive --warc-file example --plugin-script skip_logout.py
Другие точки расширения: get_urls (добавить свои URL), handle_response, handle_error, resolve_dns, exit_status. Полный список — в разделе Plugin Scripting Hooks документации.
Сравнение с Wget
| Функция | Wget | Wpull |
|---|---|---|
| WARC | ✅ (1.14+) | ✅ |
| Возобновление большого обхода | ⚠️ только -N/-c по файлам |