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 — отдельный юридический слой. Уважай оба.

Проверьте себя
1. Чем robots.txt отличается от Terms of Service (ToS)?
AЭто одно и то же
Brobots.txt — технический сигнал-просьба для ботов, ToS — юридический договор об использовании сайта
CToS относится только к ботам
Drobots.txt имеет силу закона
2. Что возвращает метод can_fetch() из urllib.robotparser?
AТекст страницы
BМожно ли указанному боту запрашивать данный путь по правилам robots.txt
CСкорость загрузки
DСписок всех ссылок