В отличие от Python-urllib из этой серии, Scrapy — не встроенная в язык программирования настройка по умолчанию, а полноценный, профессиональный open-source фреймворк для промышленного веб-скрапинга. Именно поэтому его репутация двойственная: с одной стороны, это уважаемый, активно поддерживаемый инструмент, на котором построены тысячи легитимных проектов сбора данных; с другой — токен Scrapy в логах говорит лишь о том, что кто-то использует профессиональный инструмент, а не о том, зачем именно и с каким намерением.
Важный нюанс, который отличает Scrapy от urllib: настройки по умолчанию иные
Здесь стоит исправить возможное заблуждение по аналогии с предыдущим разбором Python-urllib. У Scrapy, по официальной документации проекта, ситуация с robots.txt устроена иначе: в стандартном шаблоне нового проекта настройка ROBOTSTXT_OBEY по умолчанию установлена в True — то есть фреймворк из коробки уважает правила robots.txt, если разработчик явно не отключил эту защиту. Это не значит, что весь трафик Scrapy гарантированно добросовестен: любой автор скрипта может одной строкой поставить ROBOTSTXT_OBEY = False, и множество онлайн-туториалов по обходу защиты от скрапинга прямо инструктируют именно так и поступить. Но по умолчанию, в отличие от многих совсем простых скриптовых инструментов, эта защита хотя бы предусмотрена архитектурой фреймворка.
Параметры
| Параметр | Значение |
| Токен / паттерн | scrapy |
| Природа | Открытый Python-фреймворк для промышленного веб-скрапинга и краулинга, а не имя одного оператора |
| User-Agent по умолчанию | Формат вида Scrapy/X.Y.Z (+https://scrapy.org), если автор проекта не задал собственный через настройку USER_AGENT |
| Поведение по умолчанию для robots.txt | ROBOTSTXT_OBEY = True в стандартном шаблоне нового проекта — соблюдение включено «из коробки», но легко отключается разработчиком |
| Оператор | ❌ Множество независимых, никак не связанных друг с другом проектов и разработчиков |
| Типичные дополнительные признаки | Настройки вроде DOWNLOAD_DELAY и AutoThrottle встроены в фреймворк для контроля вежливости обхода, но включение этих настроек — тоже выбор конкретного разработчика, а не гарантия |
| Список IP-адресов | ❌ Неприменимо — фреймворк используется на серверах и в облачных средах тысяч независимых проектов |
Почему это не отменяет осторожности
Даже с учётом более благоприятной настройки по умолчанию, чем у urllib, дефолтная строка Scrapy/X.Y.Z (+https://scrapy.org) в логах — сама по себе слабый сигнал добросовестности: она означает лишь то, что автор скрипта не потрудился заменить UA на что-то узнаваемое и специфичное для своего проекта, что обычно рекомендуется профильными руководствами именно для того, чтобы администраторы сайтов могли отличить конкретный легитимный сервис от анонимного скрапинга. Часть проектов на Scrapy — легитимные агрегаторы, мониторинги цен по договорённости, академические исследования; часть — прямой парсинг контента без какого-либо согласования с владельцем сайта. По одному токену эти сценарии неразличимы.
Подключите домен и посмотрите живую ленту: кто пришёл, с какой сети, что запрашивал и по какому правилу был пропущен или заблокирован.
Как найти в логах
grep -i "scrapy" /var/log/nginx/access.log
Поскольку это не единый оператор, а общий след множества независимых проектов, привычная схема верификации через IP/ASN здесь может подтвердить происхождение отдельного запроса, но не скажет ничего о характере всего класса трафика в целом — у каждого экземпляра свой хостинг и своя инфраструктура.
Как настроить доступ
Для публичного сайта без установленной договорённости с конкретным скрапером разумная политика по умолчанию — рассматривать нераспознанный дефолтный UA Scrapy как сигнал автоматизации без установленной политики:
if ($http_user_agent ~* "scrapy") {
return 403;
}
Если внутри организации есть собственные легитимные проекты на Scrapy (мониторинг, внутренняя аналитика, партнёрские интеграции), правильное решение — не оставлять общий доступ открытым для всех, кто представляется этим фреймворком, а задать собственному проекту узнаваемый User-Agent и внести конкретные IP-адреса в белый список:
# settings.py
USER_AGENT = 'CompanyName-InternalBot/1.0 (+https://example.com/bot-info)'
Правило в robots.txt для легитимных Scrapy-проектов, которые оставили ROBOTSTXT_OBEY = True по умолчанию, действительно сработает — в отличие от многих совсем простых скриптов; но полагаться на это как на единственную линию защиты не стоит, поскольку отключить эту настройкуـ так же просто, как её включить.
Частые вопросы
Scrapy — это один конкретный бот или сервис?
Чем Scrapy отличается от Python-urllib в плане robots.txt?
Значит ли это, что весь трафик Scrapy добросовестен?
Как должен выглядеть легитимный проект на Scrapy в отличие от анонимного скрапинга?
Что делать, если внутри компании есть свои легитимные проекты на Scrapy?
Стоит ли полагаться только на robots.txt для контроля этого трафика?
Команда TrafficVeil разрабатывает инструменты защиты сайтов от ботов, DDoS и веб-атак. Разборы ботов пишем по логам подключённых доменов и открытым данным операторов.