grab-site
grab-site — предварительно настроенный веб-краулер Archive Team для резервного копирования сайтов. Он рекурсивно обходит сайт и пишет WARC-файлы; внутри используется форк wpull (ludios_wpull).
Когда использовать
✅ Подходит, если нужно:
- быстро запустить WARC-краулер с дашбордом, где видны все текущие обходы, очередь URL и скачиваемые адреса;
- менять игнор-паттерны на лету, без перезапуска обхода, чтобы не утонуть в «мусорных» URL (календари, бесконечные фильтры);
- использовать готовые, хорошо проверенные наборы игнор-паттернов (для форумов, MediaWiki, Reddit и др.);
- самостоятельно архивировать сайты в стиле Archive Team. Для коллективных срочных задач Archive Team использует ArchiveBot (управляется через IRC); grab-site — его автономная альтернатива для собственного сервера.
❌ Не лучший выбор, если:
- нужен рендеринг JavaScript — grab-site не выполняет JavaScript; для таких сайтов — Browsertrix Crawler или Brozzler;
- нужна распределённая архитектура — один обход работает на одной машине; для масштаба — Brozzler (общее состояние в RethinkDB) или Heritrix;
- нужен просмотр архива — откройте WARC в ReplayWeb.page или pywb.
Особенности
- WARC на выходе: стандартные
.warc.gzи CDX-индекс. - Дашборд: веб-интерфейс
gs-serverдля всех запущенных обходов. - Динамические игнор-паттерны: правила можно менять во время обхода.
- Обнаружение дубликатов (dupespotter): со страниц, повторяющих уже виденные, ссылки не извлекаются.
- Очередь URL на диске, а не в памяти — по README, при удаче можно обойти сайт примерно в 10 млн страниц.
Установка
grab-site работает только на Python 3.7 или 3.8 с определёнными версиями зависимостей. Пакета на PyPI нет — устанавливайте из репозитория в отдельное виртуальное окружение. Ва риант из README для Ubuntu/Debian:
sudo apt-get install --no-install-recommends \
wget ca-certificates git build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev libffi-dev libxml2-dev \
libxslt1-dev libre2-dev pkg-config
# Python 3.8 через pyenv (от обычного пользователя, не root)
~/.pyenv/bin/pyenv install 3.8.15
~/.pyenv/versions/3.8.15/bin/python -m venv ~/gs-venv
~/gs-venv/bin/pip install --no-binary lxml --upgrade git+https://github.com/ArchiveTeam/grab-site
# добавьте в ~/.bashrc или ~/.zshrc
PATH="$PATH:$HOME/gs-venv/bin"
В дистрибутивах без Python 3.7/3.8 можно использовать uv:
uv tool install --python=3.8 --no-binary-package lxml git+https://github.com/ArchiveTeam/grab-site/
Инструкции для macOS, NixOS и Windows — в README.
Команды сверены с README репозитория
ArchiveTeam/grab-site(октябрь 2026).
Использование
Дашборд
Сначала запустите дашборд и откройте http://127.0.0.1:29000/:
gs-server
gs-server по умолчанию слушает все сетевые интерфейсы; порт и адрес задаются переменными окружения GRAB_SITE_PORT и GRAB_SITE_INTERFACE.
Базовый обход
grab-site 'https://example.com/'
grab-site создаёт в текущей директории отдельный каталог обхода (далее — DIR; имя строится из URL, даты и части идентификатора). В нём лежат WARC-файлы, журналы и управляющие файлы (ignores, igsets, concurrency, delay и др.). Длинные обходы запускайте внутри tmux.
Основные параметры
| Параметр | Назначение |
|---|---|
--1 | скачать только указанный URL и его ресурсы, без рекурсии |
--level=N | глубина рекурсии (по умолчанию без ограничения) |
--igsets=SET1,SET2 | подключить наборы игнор-паттернов (forums, mediawiki, reddit и др.) |
--import-ignores FILE | скопировать файл с паттернами в DIR/ignores перед стартом |
--no-offsite-links | не ходить по ссылкам на другие домены |
--concurrency=N | число параллельных соединений (по умолчанию 2) |
--delay=N | пауза в миллисекундах между запросами (можно диапазон, например 500-1500) |
--max-content-length=N | пропускать ответы больше N байт |
--ua=STRING | свой User-Agent |
--finished-warc-dir=DIR | куда переносить готовые .warc.gz и .cdx |
-i FILE | взять список URL из файла |
--wpull-args=ARGS | дополнительные параметры wpull |
Примеры:
# ограничить глубину
grab-site --level=3 'https://example.com/'
# бережный обход сайта, который может заблокировать за частые запросы
grab-site --concurrency=1 --delay=500-1500 --no-offsite-links 'https://example.com/'
# форум с готовым набором игнор-паттернов
grab-site --igsets=forums 'https://forum.example.com/'
Сайты, требующие входа
Экспортируйте cookies из браузера в файл формата Netscape и передайте его wpull:
grab-site --wpull-args=--load-cookies=/абсолютный/путь/cookies.txt 'https://example.com/'
Изменение игнор-паттернов во время обхода
Пока обход идёт, можно редактировать файлы в каталоге обхода — изменения подхватываются без перезапуска:
DIR/ignores— рег улярные выражения Python 3, по одному на строку; совпавшие URL пропускаются;DIR/igsets— список наборов игнор-паттернов через запятую;rm DIR/igoff— показывать в терминале и на дашборде все отфильтрованные URL,touch DIR/igoff— снова скрыть.
echo '\?sort=' >> DIR/ignores
echo '/calendar/' >> DIR/ignores
Игнор-паттерны не применяются к стартовым URL. Посмотреть очередь: gs-dump-urls DIR/wpull.db todo | sort | less -S. Остановить обход: touch DIR/stop или Ctrl+C.
Сравнение
| Инструмент | Дашборд | WARC | Простота | Рекомендация |
|---|---|---|---|---|
| grab-site | Д а | Да | Высокая | Для обходов с наблюдением и ручной правкой игнор-паттернов |
| Wget | Нет | Да (--warc-file, с версии 1.14) | Высокая | Для простых случаев |
| Heritrix | Да | Да | Низкая | Для сложных и крупных проектов |
Best practices
- Следите за обходом на дашборде и добавляйте игнор-паттерны, как только видите «ловушки» (бесконечные календари, сортировки, сессии в URL).
- Начинайте с бережных настроек (
--concurrency=1,--delay), если сайт может заблокировать. - Ограничивайте размер ответов (
--max-content-length) и следите за свободным местом на диске.