Автоматическое сохранение нескольких веб‑страниц в PDF с помощью Wget
Wget позволяет массово скачать веб‑страницы локально. Соберите ссылки в текстовый файл, запустите wget с нужными опциями, затем конвертируйте загруженные HTML в PDF (например, PrinceXML, wkhtmltopdf или macOS Automator). Ниже — пошаговый SOP, обходные варианты и чек‑листы для разных ролей.

Есть много онлайн‑сервисов и расширений, которые превращают страницу в PDF. Но если нужно обработать много ссылок разом, выполнять это по одной — долго и утомительно.
Wget — простой командный инструмент, который можно встроить в скрипт и автоматизировать всю работу: скачать HTML и ресурсы страницы, а затем пакетно преобразовать их в PDF.
Почему именно Wget
Wget — это свободный пакет для загрузки файлов из интернета. Он хорошо подходит для зеркалирования страниц на диск. Коротко о преимуществах:
- Работает без интерактивного ввода — можно запускать в фоне.
- Понимает структуру сайта и умеет следовать ссылкам, создавая локальные копии.
- Устойчив к нестабильным соединениям — при поддержке сервера можно докачивать файлы.
- Поддерживает прокси и настройки окружения.
Важно: Wget уважает robots.txt по умолчанию; но поведение можно конфигурировать. Соблюдайте правила сайта и законы о персональных данных.
Установка Wget
На macOS
Самый быстрый способ — Homebrew. Если Homebrew не установлен, установите его с официального сайта. Затем в Терминале выполните:
brew install wgetЕсли Homebrew уже есть, рекомендуется обновить его и пакеты:
brew update && brew upgrade wgetНа Windows 10
Для Windows доступны сборки Wget. Одна из распространённых — с сайта Eternally Bored. Скачайте 64‑битную версию и положите исполняемый файл в папку, например C:\wget.
Далее добавьте путь в системную переменную окружения Path: Панель управления > Система > Дополнительные параметры системы > Переменные среды. В разделе «Системные переменные» отредактируйте Path и добавьте C:\wget.
Проверьте работу в Командной строке:
wget -hИли в PowerShell:
wget.exe -hПодготовьте файл со ссылками
Чтобы скачать много страниц, сохраните все URL в текстовый файл (по одному на строке). Для сбора ссылок удобно использовать расширения:
- Link Klipper — экспортирует ссылки в CSV или TXT; можно выделять область. Файл сохраняется в папку «Загрузки».
- Snap Links Plus — позволяет лассо‑выделением собрать ссылки и скопировать их в буфер обмена.
Пример простого файла links.txt:
https://example.com/chapter1.html
https://example.com/chapter2.html
https://example.com/chapter3.htmlСохраните этот файл, например, в ~/Downloads/links.txt или C:\Users\You\Downloads\links.txt.
Настройка рабочей директории
Wget извлекает ресурсы (CSS, изображения, JS) и пытается воспроизвести структуру сайта локально. Создайте отдельную папку, чтобы не загромождать рабочую директорию:
mkdir Wgetdown
cd WgetdownРазбор ключевых опций Wget
Команда, которую мы будем использовать:
wget -E -H -k -K -p -i /path/to/links.txtКоротко о каждом ключе:
- -E, –adjust-extension — добавляет расширение .html когда это необходимо.
- -H, –span-hosts — разрешает скачивать ресурсы с других хостов (например, CDN‑картинки).
- -p, –page-requisites — скачивает все необходимые файлы для отображения страницы (CSS, изображения и т. п.).
- -k, –convert-links — преобразует ссылки для оффлайн‑просмотра.
- -K, –backup-converted — создаёт резервную копию оригинала с суффиксом .orig.
- -i, –input-file — считывает URL из файла.
Дополнительно полезные опции:
- -r — рекурсивная загрузка (внимательно с глубиной и лимитами).
- -l N — задать глубину рекурсии (уровни).
- -w N или –wait — пауза между запросами (не нагружайте сервер).
- –limit-rate=100k — ограничить скорость загрузки.
- -nc, –no-clobber — не перезаписывать существующие файлы.
Пример: скачать главу за главой
Предположим, у вас есть список глав в ~/Downloads/links.txt. В директории Wgetdown выполните:
wget -E -H -k -K -p -i ~/Downloads/links.txtЖдите завершения. В папке появится каталог с доменом сайта и набор html‑файлов и ассетов.
Конвертация HTML в PDF
Превращение HTML в PDF — это отдельная задача. Результат зависит от:
- доступных системных шрифтов;
- корректности HTML и CSS;
- поддержки таблиц, плавных обтеканий и медиа;
- необходимости оглавления (TOC).
Ниже — варианты для Windows и macOS и универсальные инструменты.
Windows: PrinceXML
PrinceXML конвертирует HTML/CSS в качественный PDF с сильной типографикой. Хорош для документов со сложным макетом. Бесплатен для некоммерческого использования; для больших объёмов понадобятся лицензии.
Пример вызова (если установлено prince):
prince chapter1.html -o chapter1.pdfmacOS: Automator + cupsfilter
На macOS можно создать Quick Action в Automator, который запускает shell‑скрипт и для каждого файла вызывает cupsfilter — системный конвертер в PDF.
В Automator: создать «Быстрое действие», «Получать вход: файлы или папки» → «Запустить shell‑скрипт» (Pass input as arguments). Содержимое скрипта:
for theFileToProcess in "$@"
do
cupsfilter "$theFileToProcess" > "${theFileToProcess%.*}.pdf"
doneСохраните как HTML2PDF. Выделяете HTML‑файлы в Finder → Сервисы → HTML2PDF.
Универсальные альтернативы
- wkhtmltopdf — движок на базе Qt/WebKit. Хорош для статичных страниц.
- Headless Chrome (Puppeteer) — рендерит страницы как браузер; подходит для сайтов с клиентским JS.
- wkhtmltopdf и headless Chrome позволяют формировать TOC и управлять стилями печати.
Пример с Puppeteer (Node.js):
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('file:///path/to/chapter1.html', {waitUntil: 'networkidle0'});
await page.pdf({path: 'chapter1.pdf', format: 'A4'});
await browser.close();
})();Когда Wget не сработает (ограничения и обходы)
- Динамически генерируемый контент (SPA, heavy JS): Wget не исполняет JavaScript. В таких случаях используйте headless Chrome / Puppeteer или Selenium.
- Аутентификация: если сайт требует логин, нужно настраивать куки/сессию или использовать инструмент, который может имитировать аутентификацию.
- Ограничения по robots.txt и правилам сайта: не обойдите запреты, если они есть.
- Формы и POST‑запросы: Wget ориентирован на GET; для сложных сценариев потребуется скрипт, который отправляет POST‑запросы и сохраняет результаты.
SOP: пошаговый playbook для массовой конвертации
- Соберите ссылки в links.txt (по одной на строке).
- Создайте пустую директорию проекта: mkdir Wgetdown && cd Wgetdown.
- Проверьте настройки: не запускайте с рекурсией без лимитов.
- Выполните загрузку:
wget -E -H -k -K -p -i /path/to/links.txt- Просмотрите скачанные HTML и поправьте при необходимости относительные пути.
- Выберите конвертер:
- Для простого HTML: wkhtmltopdf или cupsfilter.
- Для страниц с JS: Puppeteer (headless Chrome).
- Для типографичных PDF: PrinceXML.
- Запустите пакетную конвертацию (пример для wkhtmltopdf):
for f in *.html; do wkhtmltopdf "$f" "${f%.*}.pdf"; done- Проверка качества: откройте несколько PDF, проверьте шрифты, изображения и оглавление.
- Сохраните результаты и архивируйте исходники.
Чек‑листы по ролям
Для автора контента
- Собрать список всех нужных URL.
- Проверить, что страницы корректно отображаются в браузере.
- Протестировать 1–2 страницы после конвертации.
Для разработчика/инженера
- Настроить окружение (wget, wkhtmltopdf/puppeteer).
- Автоматизировать конвертацию и логирование ошибок.
- Ограничить скорость запросов и настроить retry.
Для администратора/инфраструктуры
- Убедиться, что серверы не блокируют массовые запросы.
- Настроить прокси при необходимости.
- Проконтролировать соблюдение закона и robots.txt.
Мини‑методология проверки качества (QA)
- Выберите репрезентативные страницы (разные шаблоны).
- Сравните визуально в браузере и в PDF: шрифты, отступы, таблицы.
- Проверьте ссылочную целостность (внутренние ссылки ведут на локальные файлы).
- Проверка метаданных PDF (заголовок, автор) по требованию.
- Проведите тест на 10–50 файлов перед массовой обработкой.
Шаблоны и примеры
Пример содержимого links.txt:
https://processedword.net/manual/chapter1
https://processedword.net/manual/chapter2
https://processedword.net/manual/chapter3Пример команд для пакетной конвертации через wkhtmltopdf:
mkdir pdfs
for f in $(find . -name '*.html'); do
name=$(basename "$f" .html)
wkhtmltopdf "$f" "pdfs/${name}.pdf"
doneДиагностика и типичные ошибки
- Пустые страницы в скачанных файлах: возможно, сайт загружает контент через JavaScript. Используйте headless Chrome.
- Отсутствуют изображения: проверьте, не блокирует ли сервер referer или CORS‑ограничения. Включите -H для внешних хостов.
- Битые CSS или некорректные пути: проверьте, добавил ли Wget правильные относительные пути (опция -k).
- Перезапись файлов: используйте -nc, если не хотите заменять файлы.
Безопасность и конфиденциальность
- Всегда проверьте политику использования сайта и robots.txt.
- Не собирайте и не сохраняйте персональные данные без правовой основы.
- Храните скачанные данные в защищённом месте и удаляйте копии, когда они не нужны.
Критерии приёмки
- Все URL из links.txt получили корректные локальные HTML файлы.
- PDF файлы открываются и отображают ключевой контент (заголовки, таблицы, изображения).
- Для страниц с критичным JS поведение проверено через headless Chrome.
- Нет ошибок 4xx/5xx при загрузке (или ошибки задокументированы).
Мини‑справочник: полезные команды
- Скачать по списку ссылок:
wget -E -H -k -K -p -i links.txt- Простой конверт в PDF (wkhtmltopdf):
wkhtmltopdf input.html output.pdf- Пакетная конвертация (bash):
for f in *.html; do wkhtmltopdf "$f" "${f%.*}.pdf"; doneМентальные модели и эвристики
- «Скачать → Проверить → Конвертировать → QA»: разделяйте этапы для быстрого отлова проблем.
- Для динамического контента думайте «рендер в браузере» (Puppeteer), для статического — «рендер в утилите» (wkhtmltopdf).
- На сервере ставьте лимиты запросов, чтобы не выглядеть как ddos‑активность.
Принятие решения: какой инструмент выбрать
flowchart TD
A[Нужна массовая загрузка страниц?] -->|нет| B[Сделать единичный PDF в браузере]
A -->|да| C[Сайт статичный?]
C -->|да| D[wget + wkhtmltopdf или PrinceXML]
C -->|нет| E[Требуется JS‑рендеринг]
E --> F[Puppeteer / Headless Chrome]
D --> G[Пакетная обработка]
F --> G
G --> H[QA и экспорт]Краткое резюме
Wget — надёжный инструмент для массового скачивания страниц и их ресурсов. В связке с инструментами конвертации (wkhtmltopdf, PrinceXML, Puppeteer) он позволяет получить PDF‑копии большого числа страниц. Правильно собранный pipeline, лимиты запросов и проверка качества экономят время и помогают избежать ошибок.
Важно: выбирайте инструмент в зависимости от того, исполняется ли на странице JavaScript, и всегда соблюдайте правовые и этические ограничения при сборе данных.
Похожие материалы
Как заблокировать и разблокировать в WhatsApp
Как смотреть регионально заблокированный контент на iPhone
Dynamic Island на Android: установка и настройка
M.2 SSD: что это и как установить в ПК
Как обновить Chromebook и проверить Chrome OS