robots.txt и условия использования
robots.txt — это записка владельца сайта о том, куда ботам ходить можно, а куда нет.
Файл/robots.txtв корне сайта содержит правила для роботов: какие пути разрешены (Allow), какие запрещены (Disallow) и для каких ботов. Это добровольный стандарт, но уважать его — основа этичного скрейпинга.
Прежде чем скрейпить, открой https://сайт/robots.txt — это первое, что делает ответственный разработчик. Файл написан простыми правилами: User-agent указывает, к каким ботам относятся правила, а Disallow/Allow — какие пути закрыты или открыты. Пример:
# robots.txt
User-agent: *
Disallow: /admin/
Disallow: /cart/
Allow: /catalog/
Crawl-delay: 5
Sitemap: https://shop.example/sitemap.xmlЗдесь любому боту запрещены /admin/ и /cart/, разрешён /catalog/, рекомендована пауза 5 секунд, и указана карта сайта. В стандартной библиотеке Python есть готовый разборщик robots.txt — urllib.robotparser, он работает в браузере:
Попробуй сам ▶
from urllib.robotparser import RobotFileParser
rules = '''
User-agent: *
Disallow: /admin/
Disallow: /cart/
Allow: /catalog/
'''
rp = RobotFileParser()
rp.parse(rules.splitlines())
for path in ['/catalog/123', '/admin/secret', '/cart/checkout', '/about']:
ok = rp.can_fetch('*', path)
mark = 'можно ' if ok else 'НЕЛЬЗЯ'
print(f'{mark} -> {path}')robots.txt и условия использования (ToS)
robots.txt — технический сигнал, а ToS (Terms of Service) — юридический документ. Они разные. По прецеденту hiQ против LinkedIn (США) сбор публичных данных без авторизации не считается «взломом» по закону CFAA, и ToS не связывают того, кто не логинился. Но это не индульгенция: ToS могут запрещать скрейпинг договорно, а суды и регуляторы учитывают соблюдение robots.txt как признак добросовестности.
Как работает под капотом
RobotFileParser читает правила, сопоставляет путь запроса с шаблонами Disallow/Allow для нужного User-agent и возвращает can_fetch() — можно ли идти. Scrapy с ROBOTSTXT_OBEY=True делает это автоматически перед каждым запросом. Важно: robots.txt не имеет технической силы — он никого не блокирует, это именно просьба. Поэтому его соблюдение — вопрос этики и репутации, а не технического принуждения.
Что ещё лежит в robots.txt и sitemap
robots.txt полезен не только запретами. Директива Crawl-delay прямо называет рекомендованную паузу между запросами — её стоит уважать. Секции с разными User-agent позволяют сайту задать особые правила для конкретных ботов: иногда поисковикам разрешено больше, чем остальным. А строка Sitemap: указывает на карту сайта — XML-файл со списком всех важных URL. Для скрейпера это подарок: вместо слепого обхода по ссылкам можно взять готовый перечень нужных страниц прямо из sitemap, что и быстрее, и бережнее к сайту.
Важно трезво понимать статус robots.txt. Технически он ничего не блокирует — это текстовый файл с просьбой, и сервер не откажет в доступе тому, кто его проигнорировал. Сила robots.txt не техническая, а репутационно-правовая: регуляторы (например, французский CNIL) и суды рассматривают его соблюдение как признак добросовестности, а игнорирование — как отягчающий сигнал. Поэтому уважать Disallow стоит даже там, где это легко обойти: так ты остаёшься на правильной стороне и этики, и потенциального спора.
Частые ошибки
- Не читать robots.txt вообще. Это первый и самый дешёвый шаг проверки.
- Путать robots.txt и ToS. Первое — технический сигнал, второе — договор; нарушать можно оба по-разному.
- Считать публичность данных полным разрешением. Публичность снижает риск по CFAA, но не отменяет ToS, авторские права и защиту персональных данных.
Best practices
- Всегда читай
/robots.txtи уважайDisallowиCrawl-delay. - Прочитай ToS: если скрейпинг прямо запрещён — это весомый юридический риск.
- Используй
sitemap.xmlиз robots.txt — это легальная и удобная карта нужных URL.
На стороне самого скрейпера соблюдение robots.txt легко автоматизировать: один раз скачать файл, разобрать его RobotFileParser и перед каждым URL проверять can_fetch. В Scrapy это и вовсе сводится к ROBOTSTXT_OBEY = True. Маленькая привычка проверять разрешения программно избавляет от случайных заходов в закрытые зоны вроде /admin/ и делает поведение бота предсказуемым и объяснимым — что важно, если когда-нибудь придётся отчитываться, что именно и на каком основании ты собирал.
Итог: robots.txt — добровольная, но важная просьба сайта; urllib.robotparser проверяет её в пару строк. ToS — отдельный юридический слой. Уважай оба.