Как сделать оффлайн-копию сайта с документацией через wget
wget - утилита командной строки, есть в каждом Линуксе.
Чаще всего применяется для загрузки отдельных файлов по ссылке - когда есть URL не обязательно открывать веб-браузер.
Например, документация на wget
(и на другие полезные утилиты типа grep
и sed
) доступна в виде одной HTML-страницы и загружается так:
Опция -m
(mirror)
Менее известная возможность wget
- создание оффлайн-копии (зеркала) всего сайта. Включется опциями командной строки:
Бытует мнение, что современные сайты нагружены скриптами и поэтому их невозможно зеркалировать, тем более через примитивный wget
.
На самом деле большинство сайтов с документацией - это набор простых страничек и изображений, плюс немного стилей и скриптов.
Такое легко зеркалируется, рассмотрим на примере двух генераторов документации:
Sphinx
Особенности генератора документации Sphinx:
- Документация часто находится не в корне сайта, а на втором уровне, по пути
/en/stable
- для удобства просмотра можно вырезать лишние уровни - Можно не загружать подкаталог
_modules
- там не особо полезный исходный код в виде HTML-страниц - Можно не загружать подкаталог
_sources
с исходным текстом документации в разметке reStructuredText
Всё это настраивается ключами команды wget
.
Чтобы не прописывать ключи для каждого сайта, добавлена bash-функция try_mirror_sphinx
.
Заодно в ней добавлена проверка, чтобы уже загруженные ранее сайты не загружались повторно.
Далее идёт 10 вызовов на разных сайтах для примера:
#!/bin/bash
count_slash () {
(grep -o / <<< "$1") | wc -l
}
try_mirror_sphinx () {
[[ -d "$1" ]] && return
wget -mpEk --no-parent --cut-dirs=$(count_slash "$2") \
-X "/$2/_modules,/$2/_sources" \
"https://$1/$2"
}
try_mirror_sphinx docs.aiohttp.org en/stable/
try_mirror_sphinx docs.gunicorn.org en/stable/
try_mirror_sphinx docs.litestar.dev 2/
try_mirror_sphinx docs.podman.io en/stable/
try_mirror_sphinx jinja.palletsprojects.com en/stable/
try_mirror_sphinx magicstack.github.io asyncpg/current/
try_mirror_sphinx pip.pypa.io en/stable/
try_mirror_sphinx redis.readthedocs.io en/stable/
try_mirror_sphinx supervisord.org
try_mirror_sphinx www.qemu.org docs/master/
После выполнения этого скрипта получаем оффлайн-документацию указанных проектов.
MkDocs
Особенность генератора документации MkDocs - скрипт и индекс для оффлайн-поиска надо скачивать отдельно.
Это делается дополнительными вызовами wget
.
Для удобства вся работа для заданного домена оформлена в bash-функцию try_mirror_mkdocs
:
#!/bin/bash
try_mirror_mkdocs () {
[[ -d "$1" ]] && return
wget -mpEk "https://$1/"
local worker
worker=$(grep '"__config"' "$1/index.html" | grep -Eo 'assets/.+\.js')
# assets/javascripts/workers/search.*.min.js
wget -m "https://$1/$worker"
wget -m "https://$1/search/search_index.json"
ln -s "$1/search/search_index.json" "$1/search/search_index.js"
}
try_mirror_mkdocs www.python-httpx.org
try_mirror_mkdocs www.starlette.io
try_mirror_mkdocs www.uvicorn.org
После выполнения этого скрипта получаем оффлайн-документацию ещё нескольких проектов. В отличие от Sphinx здесь для работы оффлайн-копии необходим веб-сервер, например из Python: