Когда wget недостаточно: почему обычные дампы бесят
Попробуйте скормить локальной LLM сырой HTML с wget. Получите мешанину из скриптов, стилей и рекламы. Модель запутается. Вы потратите контекст на мусор. Результат? Бесполезные ответы.
Pagesource решает эту проблему. Он не просто качает страницы. Он извлекает чистый контент, сохраняет структуру, убирает шум. Получается читабельный дамп, который LLM понимает с первого взгляда.
Забудьте про curl | grep. Современные SPA-сайты требуют выполнения JavaScript. Pagesource использует Playwright - реальный браузер, который рендерит страницу как пользователь.
Что умеет Pagesource (и чего не умеет)
Инструмент прост до безобразия. Установка - одна команда. Использование - еще проще. Но под капотом скрывается мощь.
1 Основные возможности
- Рекурсивный обход - задаете глубину, Pagesource проходит по всем ссылкам
- Чистый контент - удаляет скрипты, стили, навигацию, оставляет только текст и семантику
- Структурированный вывод - сохраняет иерархию заголовков (h1-h6), списки, таблицы
- Поддержка JavaScript - работает с React, Vue, Angular и другими SPA
- Экспорт в разные форматы - Markdown, текстовые файлы, JSON
- Ограничение по домену - не уходит на внешние сайты
2 Чего НЕ ждать
- Не парсит сложные формы - если нужна авторизация, придется допиливать
- Не обходит капчи - это не инструмент для скрапинга защищенных сайтов
- Медленный на больших сайтах - каждый запрос требует рендеринга в браузере
Установка: 30 секунд вместо 30 минут
Никаких танцев с бубном. Если у вас есть Python и pip - все готово.
pip install pagesource-cli
Playwright установится автоматически. Но браузеры нужно скачать отдельно:
playwright install chromium
Базовые команды: от простого к сложному
Начнем с элементарного. Хотите дамп одной страницы?
pagesource https://example.com -o example.md
Получите Markdown-файл с чистым контентом. Но настоящая магия начинается с рекурсией.
3 Рекурсивный дамп документации
Допустим, нужно скачать документацию FastAPI для локальной LLM. Глубина 2 уровня, ждем загрузку 5 секунд:
pagesource https://fastapi.tiangolo.com -d 2 -t 5000 -o fastapi_docs
Флаг -d задает глубину, -t - таймаут в миллисекундах. Pagesource создаст папку fastapi_docs с иерархией файлов.
Реальные кейсы: где Pagesource спасает проект
Кейс 1: Анализ конкурентов без интернета
Летите на самолете. Нет Wi-Fi. Но нужно проанализировать 5 сайтов конкурентов. Запускаете Pagesource заранее:
#!/bin/bash
sites=(
"https://competitor1.com"
"https://competitor2.com"
"https://competitor3.com"
)
for site in "${sites[@]}"; do
folder_name=$(echo $site | sed 's|https://||' | sed 's|/|_|g')
pagesource "$site" -d 1 -o "competitors/$folder_name"
sleep 2 # анти-бан пауза
done
Теперь у вас есть локальные копии. Подключаете локальную LLM в Obsidian и анализируете в оффлайне.
Кейс 2: Создание контекста для кодогенерации
Хотите, чтобы LLM писала код в стиле конкретной библиотеки? Дампните ее документацию и исходники:
# Документация React
pagesource https://react.dev/learn -d 2 -o react_context
# Плюс официальные примеры
pagesource https://github.com/facebook/react/tree/main/examples -o react_examples
Теперь при использовании промптов для кодирования у модели будет точный контекст. Она не будет выдумывать несуществующие API.
Кейс 3: Миграция старого сайта
Есть legacy-сайт на HTML 4. Нужно перенести контент в новую CMS. Pagesource извлекает текст, заголовки, изображения:
pagesource http://old-site.com --format json -o site_structure.json
JSON содержит чистый контент и метаданные. Легко парсится скриптами для импорта.
Pagesource vs Альтернативы: честное сравнение
| Инструмент | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Pagesource | Чистый контент, JS-рендеринг, структурированный вывод | Медленный, требует браузера | Для LLM, анализа, миграций |
| wget/curl | Быстрый, простой, везде работает | Не выполняет JS, сырой HTML | Статические сайты, файлы |
| Scrapy | Мощный, гибкий, асинхронный | Сложная настройка, перебор для простых задач | Промышленный скрапинг |
| Playwright/Selenium | Полный контроль, любые взаимодействия | Нужно писать код, тяжелые | Тестирование, сложные сценарии |
Pagesource занимает нишу между wget и полноценным скрапинг-фреймворком. Он для тех, кому нужен контент, а не гибкость.
Интеграция с локальными LLM: магия начинается здесь
Вот где Pagesource раскрывается полностью. Представьте пайплайн:
- Дамп сайта с документацией
- Очистка и структурирование
- Индексация для семантического поиска
- Вопросы к LLM с релевантным контекстом
Пример с Ollama и Llama 3.1:
# Дамп документации
pagesource https://docs.python.org/3/ -d 1 -o python_docs
# Создаем контекстный файл
cat python_docs/*.md > python_context.txt
# Задаем вопрос с контекстом
ollama run llama3.1 "Используя документацию Python, объясни, как работают декораторы. Контекст: $(head -c 2000 python_context.txt)"
LLM отвечает точно, не выдумывая. Потому что у нее есть исходный материал.
Для больших контекстов используйте модели с поддержкой 128к токенов, например, Youtu-LLM-2B. Они обработают целые сайты без потерь.
Продвинутые трюки: за рамками документации
Фильтрация по CSS-селекторам
Нужен только основной контент? Игнорируйте навигацию, футеры, сайдбары:
pagesource https://news.ycombinator.com --selector ".athing" -o hn_posts
Скачаются только посты, без комментариев и меню.
Параллельный дамп
Ускоряем процесс в 4 раза:
pagesource https://large-site.com -d 2 --workers 4 -o site_dump
Но осторожно: слишком много воркеров - и вас забанят.
Кастомные заголовки
Некоторые сайты требуют особых headers:
pagesource https://api.example.com \
--headers '{"User-Agent": "Mozilla/5.0", "Accept": "application/json"}' \
-o api_docs
Кому подойдет Pagesource (а кому нет)
Берите, если:
- Работаете с локальными LLM и нужен качественный контекст
- Мигрируете старые сайты (особенно с помощью LLM как патчинг-инженера)
- Анализируете конкурентов оффлайн
- Создаете датасеты для обучения моделей
- Нужен быстрый дамп без написания кода
Не берите, если:
- Нужен высокопроизводительный скрапинг (тысячи страниц в час)
- Работаете с сайтами, требующими сложной авторизации
- Хотите обходить анти-бот системы
- Имеете ограничения по памяти (браузеры жрут RAM)
Ошибки, которые все совершают (и как их избежать)
Ошибка 1: Дамп всего интернета с глубиной 10. Результат: бесконечный процесс и полный диск. Решение: начинайте с глубины 1-2, оцените объем.
Ошибка 2: Игнорирование robots.txt. Результат: бан IP. Решение: всегда проверяйте /robots.txt перед дампом.
Ошибка 3: Дамп динамических SPA без таймаута. Результат: пустые страницы. Решение: используйте -t 3000 (3 секунды) для загрузки контента.
Что дальше? Будущее инструмента
Pagesource сегодня - это удобный CLI. Завтра может стать частью идеального стека для локальных LLM.
Представьте интеграцию:
- Автоматическая индексация дампов для RAG (Retrieval-Augmented Generation)
- Плагин для VS Code: дамп сайта прямо из редактора
- Поддержка автономных исследовательских агентов
- Экспорт в форматы для продвинутых LLM-приложений
Пока этого нет. Но инструмент уже сегодня решает реальные задачи. Просто, без наворотов. Иногда это именно то, что нужно.
Совет напоследок: не дампите просто так. Имея локальные копии сайтов, вы создаете зависимость от их актуальности. Раз в месяц обновляйте дампы. Или настройте автоматический пайплайн. Иначе LLM будет отвечать на основе устаревшей информации. А это хуже, чем отсутствие информации вообще.