web_parser
Universal Web Parser (EASY + PRO)
Готовый к работе асинхронный парсер/краулер на Python 3.11+. Один файл — . Работает в двух режимах:
- EASY — для обычных пользователей: даёте TXT со списком сайтов, получаете CSV/JSONL/SQLite с готовыми метаданными.
- PRO — для продвинутых: гибкий JSON‑конфиг, CSS/XPath, пагинация, сбор внутренних ссылок, фильтры URL, кэш,
, ретраи, прокси.robots.txt
Быстрый девиз: “Минимум настроек, максимум пользы. При необходимости — полный контроль.”
Содержание
Особенности
- Асинхронный сбор на aiohttp, чистое логирование, аккуратные ретраи.
- EASY‑режим: без правки кода — TXT со списком сайтов → готовый файл данных.
- PRO‑режим: селекторы CSS/XPath (
,::text,::texts), пагинация, обнаружение ссылок.::attr(name) - Уважение
, задержки, ограничение одновременных запросов.robots.txt - Кэш HTML на диск (TTL) + файл состояния для возобновления.
- Экспорт в CSV, JSONL, SQLite (имя таблицы задаётся опцией).
- Реалистичные User‑Agent строки, поддержка прокси (random/round_robin).
Требования и установка
- Python: 3.11 и выше.
- Зависимости:
Совет: создайте виртуальное окружение
(Windows:python -m venv .venv && source .venv/bin/activate)..venv\\Scripts\\activate
Быстрый старт
EASY‑режим (самый простой вариант)
- Создайте
(по одному URL на строку; пустые строки и строки сsites.txtигнорируются):#
https://quotes.toscrape.com/
https://books.toscrape.com/
https://www.python.org/
- Запустите сбор и получите CSV:
Другие варианты сохранения:
- Чтобы обойти также несколько внутренних страниц того же домена:
По умолчанию EASY собирает: , , , , , , , , , , (до 50), (до 50), (усечён до ~2000 символов).
PRO‑режим (тонкая настройка)
Работа через JSON‑конфиг. Сначала посмотрите текущие дефолты:
Сохраните их в файл и отредактируйте под свой сайт:
Запуск с конфигом:
Проверка селекторов на одном URL (без сохранения):
Примеры команд
Файл sites.txt (для EASY)
- Каждый URL с новой строки.
- Пустые строки и строки, начинающиеся на
, игнорируются.# - Если протокол опущен, он будет автоматически проставлен как
.https://
Пример:
https://quotes.toscrape.com/
https://books.toscrape.com/
www.python.org
# комментарий
Форматы вывода
CSV
- Удобен для Excel/Google Sheets.
- Списки преобразуются в одну строку (через запятую).
JSONL
- По одной записи в строке. Хорош для потоковой обработки и больших объёмов.
SQLite
- Один файл базы данных. Таблица задаётся опцией
.--sqlite-table - Пример запроса:
Как это работает под капотом
- Асинхронные запросы через aiohttp.
- Вежливость: случайные задержки,
, respect_robots.per_host_delay - Кэш HTML (
, TTL) — ускоряет повторные прогоны..cache/ - Файл состояния (
) — защищает от повторного обхода и позволяет продолжать..state/visited_urls.txt - Обработка ошибок с ретраями и экспоненциальной паузой.
Конфигурация PRO — подробности
Пример конфига (CSS)
Пример конфига (XPath)
Суффиксы:
— строка,::text— список строк,::texts— значение атрибута. Для ссылок/картинок значения автоматически приводятся к абсолютным URL через::attr(href).urljoin
Пагинация и обход ссылок
: указывает селектор кнопки «вперёд» и атрибут со ссылкой.follow_next: дополнительный сбор ссылок на странице (например, ссылки на карточки):discover_links
Фильтры URL
— только URL, подходящие под любой из regex.url_filters.include— отбрасываются, если подходят под любой из regex.url_filters.exclude
Сеть: параллелизм, задержки, кэш, прокси
— одновременных запросов.concurrency— случайная задержка между запросами.delay_range: [min, max]— пауза между запросами к одному хосту.per_host_delay— время жизни HTML в кэше (секунды).cache_ttl— список прокси,proxies.proxy_mode: random | round_robin
Тюнинг производительности
- Умеренно повышайте
(например, 8 → 16), наблюдая за стабильностью.concurrency - Для «тяжёлых» сайтов увеличьте
(например, 0.5–1.0 сек).per_host_delay - Временно отключите
только для локальных тестов на своих стендах.respect_robots - При повторных прогонах используйте кэш (
) и состояние — это ускорит сбор.cache_ttl
Диагностика и отладка
- Включите подробные логи:
.--debug - Снимки HTML сохраняются в
(только при.snapshots/).--debug - Быстрый тест селекторов:
.test-url - Проверяйте регулярки фильтров URL на сайте regex101.com (внимательно экранируйте
).\
ЧАВО (FAQ)
Ничего не собралось. Что делать?
- Запустите
и посмотрите, что возвращают селекторы.test-url - Возможно, сайт отдаёт разметку динамически (JS). Попробуйте XPath, другие селекторы или статические страницы.
- Включите
и изучите снапшот HTML в--debug..snapshots/
Как не перегружать сайт?
Установите , уменьшите , включите (по умолчанию включён).
Можно ли идти глубже по сайту в EASY?
Да: и . По умолчанию — только стартовая.
Как добавить прокси?
В конфиге: , или .
Где лежат кэш и состояние?
Кэш: (TTL управляется ).
Состояние: .
Как открыть SQLite‑вывод?
Юридические и этические заметки
- Всегда проверяйте условия использования и правовые ограничения целевого сайта.
- Соблюдайте
и разумные лимиты скорости.robots.txt - Не собирайте персональные данные без правового основания.
Структура проекта
.
├── universal_web_parser.py # основной файл
├── sites.txt # список сайтов (для EASY)
├── data/ # папка для результатов (CSV/JSONL/SQLite)
├── .cache/ # кэш HTML
├── .state/ # файл состояния посещённых URL
└── .snapshots/ # HTML-снимки для отладки (при --debug)
Лицензия
Код предоставляется «как есть». Используйте и модифицируйте свободно. При цитировании лучше указывать источник: Universal Web Parser (EASY + PRO).
Контакты и помощь
Нужна настройка под конкретный сайт (карточки товаров, каталоги, новости, антибот‑обход, прокси‑ротация)? Опишите домен и желаемые поля — подготовим готовый конфиг/пример запуска.