Вежливый Scrapy: robots.txt, задержки, AutoThrottle
Мощный краулер обязан быть вежливым — иначе он навредит и сайту, и тебе.
Scrapy из коробки умеет соблюдать robots.txt, ограничивать скорость и адаптивно тормозить под нагрузку. Это не опции «для галочки», а основа ответственного скрейпинга.
Scrapy способен слать сотни запросов в секунду — и именно поэтому к нему прилагается ответственность. К счастью, вежливость встроена: достаточно правильно выставить настройки. Разберём ключевые из них в settings.py:
# settings.py — вежливые настройки
ROBOTSTXT_OBEY = True # уважать robots.txt сайта
DOWNLOAD_DELAY = 1.0 # пауза 1 сек между запросами
CONCURRENT_REQUESTS_PER_DOMAIN = 2 # не больше 2 параллельных к домену
# адаптивная скорость: тормозит, если сервер отвечает медленно
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# честный User-Agent с контактом
USER_AGENT = 'my-research-bot/1.0 (+https://my-site.example/bot)'
# кэш — чтобы не перезапрашивать при отладке
HTTPCACHE_ENABLED = TrueAutoThrottle: вежливость по обратной связи
AUTOTHROTTLE — умный механизм: он измеряет время ответа сервера и подстраивает задержку. Если сервер «устал» (отвечает медленно), Scrapy сам притормаживает. Это защищает чужой сайт от перегрузки лучше любой фиксированной паузы.
быстрый ответ сервера -> Scrapy чуть ускоряется медленный ответ сервера -> Scrapy замедляется (бережёт сайт) ошибки 429 / 503 -> Scrapy ещё сильнее тормозит цель: нагрузка ~= один параллельный запрос, как вежливый человек
Как работает под капотом
RobotsTxtMiddleware при ROBOTSTXT_OBEY=True перед каждым запросом скачивает и читает /robots.txt сайта и пропускает только разрешённые пути. DOWNLOAD_DELAY добавляет паузу (с лёгким случайным разбросом, чтобы не выглядеть машинно-ровно). AUTOTHROTTLE по времени отклика вычисляет задержку динамически. HTTPCACHE сохраняет ответы локально, чтобы при отладке парсера не бить по сайту снова и снова. Вместе это превращает мощный краулер в вежливого гостя.
Вежливость как инженерная настройка
Удобство Scrapy в том, что этичное поведение здесь не требует силы воли — оно конфигурируется. Помимо задержек и robots.txt, фреймворк умеет ограничивать глубину обхода (DEPTH_LIMIT), общее число страниц (CLOSESPIDER_PAGECOUNT) и время работы — чтобы случайный баг не превратил краулер в бесконечный обход всего интернета. Тайм-ауты и повторы (RETRY_TIMES) делают паука устойчивым к временным сбоям без агрессивного давления на сервер.
Особого внимания заслуживает идентификация. Честный USER_AGENT с названием бота и контактным URL — это не маскировка, а наоборот, открытость: владелец сайта, увидев такой запрос в логах, понимает, кто к нему пришёл и как связаться. Многие администраторы спокойно относятся к вежливым, представившимся ботам и блокируют именно анонимные агрессивные. Поэтому связка «низкая частота + AutoThrottle + честный UA + соблюдение robots.txt» — это не только техническая страховка от блокировок, но и репутационная: она показывает, что ты собираешь данные открыто и ответственно.
Частые ошибки
- Выключать
ROBOTSTXT_OBEYради скорости. Игнор robots.txt — сигнал недобросовестности и аргумент против тебя в споре. - Ставить нулевую задержку и высокий параллелизм. Это фактически мини-DDoS чужого сервера.
- Не включать кэш при отладке. Каждый перезапуск парсера бьёт по живому сайту без нужды.
Best practices
- Держи
ROBOTSTXT_OBEY = TrueиAUTOTHROTTLE_ENABLED = True. - Ставь разумные
DOWNLOAD_DELAYи низкий параллелизм на домен. - Указывай честный
USER_AGENTс контактом и включайHTTPCACHEпри разработке.
Полезно завести привычку тестового прогона. Перед полным обходом запусти паука с жёстким ограничением (CLOSESPIDER_PAGECOUNT=10) и посмотри логи: какие коды ответов приходят, не ловишь ли 429, корректно ли извлекаются поля. Маленький прогон выявляет проблемы, не нагружая сайт тысячами запросов впустую. Только убедившись, что паук ведёт себя вежливо и парсит верно, запускают полный краулинг. Этот «разведочный» подход экономит и нервы, и доброе имя перед владельцем ресурса.
Стоит помнить и о времени суток. Запускать тяжёлый краулинг по чужому сайту разумнее в часы низкой нагрузки (ночью по часовому поясу сервера), когда твои запросы менее заметны на фоне обычного трафика и не мешают живым пользователям. Это простой, но красноречивый жест уважения к владельцу ресурса. Вместе с задержками, ограничением параллелизма и AutoThrottle выбор удачного времени делает сбор данных практически незаметным для сайта — а именно незаметность и есть признак по-настоящему вежливого скрейпера.
Итог: вежливость в Scrapy — это пара строк в настройках: robots.txt, задержки, AutoThrottle и честный User-Agent. Мощность инструмента обязывает использовать её ответственно.