Большую часть истории веба краулер оценивали один раз, на входе. Сервер смотрел на юзер-агент, иногда на IP, и решал, впускать запрос или нет. Что краулер делал дальше, никого не касалось, пока сайт не ложился, да и тогда жалоба уходила в ящик для жалоб, который никто не читал.
В третью неделю октября 2026 года это изменилось, трижды за четыре дня. 13 октября Google задокументировала, что её фетчер Google-Agent подписывает часть своих запросов с помощью Web Bot Auth. 15 и 16 октября исследовательский краулер, представлявшийся адресом Roblox, прочитал robots.txt трёх любительских сайтов с 3D-моделями, проигнорировал его и выкачал 145,5 ГБ. А 16 октября Cloudflare объявила, что Verified bots теперь оцениваются непрерывно: по тому, соблюдают ли они robots.txt и замедляются ли после 429.
Вместе эти три события описывают новое правило. Идентичность открывает дверь. Поведение решает, будут ли вам рады в следующем месяце. Для любого, кто запускает краулер, вопрос теперь звучит не «могу ли я это скачать?», а «что обо мне скажет история моих запросов?»
- Cloudflare теперь ведёт для каждого Verified bot накопительную оценку на основе двух сигналов: соответствует ли его трафик опубликованному сайтом
robots.txtс течением времени и сбавляет ли он темп после429. Оценки будут публичными на Radar, а владельцы сайтов зададут порог. - Веб также начинает назначать цену поведению: Pay Per Use платит издателям, когда ИИ-продукт использует страницу, а Monetization Gateway отвечает на запросы кодом
402и ценой. Краулер, который не может доказать, кто он, участвовать не может. - Краулеру, который проходит проверку, нужны четыре привычки, и ни одна из них не сложная: читать
robots.txtдо первого запроса, тратить запросы из бюджета на хост, относиться к429как к договору и никогда не скачивать заново страницу, которая не изменилась. Ниже цикл, который делает все четыре вещи, и трассировка, которую он выдаёт.
Три события одной недели
Сначала о краулере. Open3DLab, SFMLab и SmutBase: три небольших сайта одной команды, где хранятся пользовательские 3D-модели. 26 октября они опубликовали свои логи: за 34 часа 15 и 16 октября клиент, называвший себя trellis2-data-sourcing/1.0 (3D foundation model research; [redacted]@roblox.com) , сделал 26 429 запросов с одного адреса AWS, прочитал страницы 18 926 проектов и скачал 1 027 файлов из 712 из них. Он запросил robots.txt и не стал ему следовать. 423 проекта были лицензированы только для некоммерческого использования. Когда сайты заблокировали его 18 октября, он вернулся 19-го и снова 20-го и, по словам сайтов, «не снизил число попыток скачивания, столкнувшись с нашими блокировками». Roblox, согласно заявлению, опубликованному позже, сообщила, что агент одного из исследователей скрейпил сайты по ошибке и был отключён.
В этом краулере ничего не было скрыто. В его юзер-агенте был адрес электронной почты. Он приходил с одного IP. По меркам программы Verified bots он был честен в отношении своей идентичности. И это было ровно то поведение, которое программа теперь измеряет и наказывает, а сайты смогли доказать его по собственным логам, поэтому история попала на первую страницу Hacker News, а не в ящик для жалоб.
Анонс Cloudflare, опубликованный на следующий день после основного прогона краулера, скуп на механику и точен в намерениях. «Непрерывная подотчётность для Verified bots» описывает два начальных сигнала. Первый спрашивает, согласуется ли наблюдаемый трафик бота с опубликованными предпочтениями сайта с течением времени, где RFC 9309 служит эталоном того, как читается robots.txt . Второй спрашивает, что происходит после того, как сайт возвращает 429: «Замедляется ли он, делает ли паузу или продолжает слать запросы в том же темпе?» Результаты складываются в «объяснимый уровень доверия», ярлык, который пост намеренно называет историей, а не вердиктом, потому что «единичные нарушения» значат мало, а «повторяющиеся паттерны поведения, игнорирующего предпочтения сайта» значат много. Оценки будут опубликованы на Radar, а владельцы сайтов смогут выбрать уровень, при котором трафик Verified bots ещё пропускается.
Вклад Google тише и в некотором смысле весомее. Её страница о Web Bot Auth, обновлённая 13 октября, сообщает, что часть запросов от Google-Agent, фетчера, стоящего за агентами на инфраструктуре Google, подписана и аутентифицируется как https://agent.bot.goog. Реализация помечена как экспериментальная. Но страница Google-Agent находится в списке фетчеров, запускаемых пользователем, а руководство для этого списка не изменилось: «Поскольку загрузка запрошена пользователем, эти фетчеры, как правило, игнорируют правила robots.txt». То есть крупнейший оператор краулеров на планете теперь подписывает запросы агента, который, по его же документации, не читает файл, по которому оценивают всех остальных. Это не лицемерие; это контур будущего спора. Подписи устанавливают, кто отправил запрос. О том, был ли запрос желанным, они не говорят ничего.
Что на самом деле измеряет уровень доверия
Полезно быть конкретным о масштабе. На Cloudflare Connect, проходившем с 19 по 21 октября, Мэттью Конрой, старший директор компании по управлению продуктом, сказал, что агенты сделали более 600 миллиардов запросов в её сети за прошлый квартал, почти вчетверо больше, чем в конце 2025 года, и что «меньше одного из десяти автоматизированных запросов приходит от бота, который себя идентифицирует». Прогноз Мэттью Принса на той же сессии: агентский трафик превысит человеческий в тысячу раз в течение пяти лет, с оговоркой, что все его прежние прогнозы оказались слишком консервативными. Отчёт DataDome за 3-й квартал, опубликованный 15 октября, добавляет деталь, объясняющую, почему идентичность вдруг стала продуктом: в выборке трафика агента Muse от Meta 99,3% запросов приходили из диапазонов облаков и CDN, 81,2% из них принадлежали самой Cloudflare, и агент себя не объявляет. Репутация IP, инструмент, на который вся отрасль опиралась двадцать лет, не может отличить агента от граничной сети, в которой он работает.
Значит, оценка должна опираться на поведение, а поведение нужно наблюдать во времени. Это и есть уровень доверия. Если читать его как инженерную спецификацию, а не как пост о политике, у него четыре входа.
Идентичность служит предусловием, а не оценкой. Web Bot Auth, схема подписей на Ed25519, о которой мы писали, когда она вышла вместе с pay-per-crawl, с сентября является документом рабочей группы IETF, а 29 октября вышла в редакции draft-ietf-webbotauth-httpsig-protocol-01. OpenAI и AWS подписывают; Google экспериментирует; собственный Web Search API Cloudflare, запущенный 2 октября с Ceramic.ai, Exa и Linkup за ним, отмечает, что все трое «обязались соблюдать стандарты Cloudflare для верифицированных ботов». Без стабильной идентичности не к чему привязать историю, поэтому неподписанный трафик не оценивается вовсе. Он просто попадает в класс «запрещено по умолчанию».
Опубликованные предпочтения составляют первый сигнал, и словарь ещё не устоялся. RFC 9309 задаёт базу: группы, Allow и Disallow, побеждает самое длинное совпадение. Поверх него лежат Content Signals от Cloudflare, которые несут цель, а не путь: search, ai-input, ai-train, а с 31 августа и четвёртое поле, use, со значениями reference и full. Собственная точка доступа Cloudflare для краулинга теперь отклоняет запрос кодом 400 , когда заявленный краулером contentUse разрешает больше, чем у сайта. Параллельная работа IETF, словарь AI Preferences, 14 сентября дошла до черновика 08 и остаётся Internet-Draft; августовская веха рабочей группы прошла без стандарта. Иначе говоря, оценивать начали раньше, чем дописали грамматику.
Реакция на обратную связь идёт вторым сигналом, и именно на нём большинство краулеров проваливается, не замечая этого. Код 429 не ошибка, которую нужно повторить, а инструкция, и когда в нём есть Retry-After , это инструкция с числом внутри. Пост Cloudflare говорит прямо: замедление или пауза после 429 «повышает доверие, а повторное игнорирование сигнала его снижает». Большинство библиотек для повторов делают наоборот. Они повторяют неудавшийся запрос с короткой задержкой и оставляют конкурентность, вызвавшую 429 , ровно там, где она была.
Эффективность пока не входит в начальную оценку, но войдёт. Июльский пресс-релиз Cloudflare утверждал, что «более 50% трафика ИИ-краулеров уходит на повторную загрузку неизменившихся страниц», а её пилот с OpenAI, идущий с июля примерно на 1% её сети, отдаёт краулеру сигналы об изменениях и отфильтровывает страницы, которых не существует или которые лишь редиректят. Пост сообщает о сотнях миллионов вновь обнаруженных страниц и содержит одну фразу, которую стоит запомнить: «Сигнал о странице не даёт разрешения на доступ к ней». Сигналы строятся для краулеров, которые уже ведут себя прилично; это не способ войти.
За всеми четырьмя стоят деньги. Pay Per Use, в бете с 30 сентября, платит издателю, когда ИИ-компания сообщает, что использовала страницу, а не когда она её загрузила, потому что, как формулирует Cloudflare, «плата за каждый обход заставляет покупателя платить до того, как он знает, что ему нужно». Monetization Gateway, запущенный в тот же день, отвечает на запрос кодом 402 Payment Required и ценой, с расчётом по протоколу x402. Обоим нужен покупатель с проверяемой идентичностью и чистой историей. Уровень доверия и есть кредитный рейтинг для этого рынка.
Чего просят сайты: замер сегодняшним утром
Сколько из этого реально дошло до файлов robots.txt ? 30 октября мы запросили robots.txt с 2 000 первых доменов списка Tranco, представившись исследовательским юзер-агентом, по одному запросу на хост. 1 130 отдали читаемый файл. Остальное: API- и CDN-хосты, которым нечего сказать, 434 имени, не ответившие вовсе, и 145 хостов, ответивших 403 краулеру, который представился, что само по себе небольшое открытие.
| Директива | Сайтов | Доля от 1 130 |
|---|---|---|
| Называет хотя бы один ИИ-краулер по юзер-агенту | 381 | 33,7% |
| Полностью запрещает хотя бы один ИИ-краулер | 292 | 25,8% |
Полностью запрещает GPTBot
|
208 | 18,4% |
Задаёт Crawl-delay
|
143 | 12,7% |
Содержит строку Content-Signal |
71 | 6,3% |
Отправляет aipref-заголовок Content-Usage |
0 | 0% |
Две детали важнее заголовка. Во-первых, цель уже разделяют вручную: из 208 сайтов, полностью блокирующих GPTBot , 21 называет OAI-SearchBot и пропускает его, а 18 делают то же для ChatGPT-User. Операторы говорят «индексируй меня, цитируй меня, не обучайся на мне» единственным доступным им словарём: один юзер-агент на одну цель. Во-вторых, из 71 сайта со строкой Content-Signal 39 несут идентичную search=yes, ai-train=no, use=reference, то есть управляемое значение по умолчанию от Cloudflare. Новый словарь приходит через CDN, а не из редакторов владельцев сайтов, и 35% загруженных нами файлов вернулись с заголовком cf-ray . Так табло становится правилами.
Цикл загрузки, который проходит проверку
Ни одна из четырёх привычек не сложна. Сложно их удерживать, когда обход опаздывает, а очередь полна, поэтому им место в фетчере, а не в регламенте. Ниже эталонный цикл на 226 строк на Python со стандартной библиотекой, приведённый в четырёх частях, которые имеют значение, и запущенный против локального сервера, у которого есть своё мнение: robots.txt , который запрещает /private/, ETag на каждой странице и 429 с Retry-After: 2 для любого клиента быстрее двух запросов в секунду.
Прочитайте правила до первого запроса
RFC 9309 говорит, что краулер, который читает robots.txt , должен ему следовать, может его кэшировать и не должен хранить кэшированную копию дольше 24 часов. Он также говорит, что делать, когда файл не читается: 4xx означает, что правил нет, 5xx или сетевой сбой означают, что доступ следует считать запрещённым и попробовать позже. Кэш ниже делает ровно это, по хостам, и открывает наружу Crawl-delay , чтобы бюджет мог им пользоваться.
def _load(self, scheme: str, host: str) -> urllib.robotparser.RobotFileParser | None: url = f"{scheme}://{host}/robots.txt" req = urllib.request.Request(url, headers={"User-Agent": self.user_agent}) parser = urllib.robotparser.RobotFileParser(url) try: with urllib.request.urlopen(req, timeout=10) as resp: parser.parse(resp.read().decode("utf-8", "replace").splitlines()) return parser except urllib.error.HTTPError as e: if 400 <= e.code < 500: parser.parse([]) return parser return None except Exception: return None def allowed(self, url: str) -> bool: parts = urllib.parse.urlsplit(url) host = parts.netloc with self._lock: cached = self._cache.get(host) if cached is None or time.time() - cached[0] > ROBOTS_TTL: cached = (time.time(), self._load(parts.scheme, host)) self._cache[host] = cached parser = cached[1] return parser is not None and parser.can_fetch(self.user_agent, url)
В первый раз, когда мы запускали демо, тестовый сервер ещё не успел подняться. Каждый URL вернулся как disallowed, включая те, которые правила разрешили бы, потому что цикл не смог прочитать правила. Это правильный исход. Краулер, который не может выяснить, чего хочет сайт, не должен гадать в свою пользу.
Относитесь к 429 как к договору
Бюджет на хост реализован как корзина токенов, в этом нет ничего примечательного. Важно, что он делает, когда приходит 429 . Он соблюдает Retry-After , если он есть, отступает с джиттером, если нет, вдвое снижает темп и, чего большинство реализаций не делает, опускает потолок до 80% от темпа, на котором пришёл 429. Сайт только что назвал вам свой предел. Снова подбираться к нему каждые несколько минут и есть тот «повторяющийся паттерн», ради которого построен уровень доверия. Пять 429 за минуту размыкают предохранитель, и хост оставляют в покое на пять минут; в это время лог должен читать человек.
def on_429(self, retry_after: float | None) -> float: """Honour Retry-After when given, else back off exponentially with jitter.""" with self._lock: now = time.monotonic() self._recent_429 = [t for t in self._recent_429 if now - t < self.trip_window] + [now] # The rate that drew the 429 is the host's limit: cap recovery # below it so one 429 is a lesson, not a cycle. self._ceiling = max(self.rate * 0.8, 0.05) self.rate = max(self.rate / 2, 0.05) if len(self._recent_429) >= 5: self._open_until = now + self.cooldown return self.cooldown if retry_after is not None: pause = retry_after else: pause = min(60.0, 2 ** len(self._recent_429)) * random.uniform(0.5, 1.5) self._open_until = now + pause return pause
Спросите, изменилась ли страница, прежде чем просить страницу
Половина трафика ИИ-краулеров на повторную загрузку неизменившихся страниц: у Cloudflare есть коммерческий интерес в этой цифре, но она не выглядит неправдоподобной, а решение старше проблемы на двадцать пять лет. Запомните валидаторы, которые присылает страница, отправьте их обратно и примите 304 как ответ. Хранилище ниже намеренно наивное; в продакшене это колонка в таблице URL.
class ConditionalStore: """Remember validators per URL so a re-crawl asks 'has this changed?' first.""" def __init__(self): self._validators: dict[str, dict[str, str]] = {} def headers_for(self, url: str) -> dict[str, str]: v = self._validators.get(url, {}) out = {} if "etag" in v: out["If-None-Match"] = v["etag"] if "last-modified" in v: out["If-Modified-Since"] = v["last-modified"] return out def remember(self, url: str, headers) -> None: v = {} if headers.get("ETag"): v["etag"] = headers["ETag"] if headers.get("Last-Modified"): v["last-modified"] = headers["Last-Modified"] if v: self._validators[url] = v
Записывайте каждое решение
Метод fetch связывает три части вместе и записывает каждый исход строкой JSON: что запрашивали, что сказали правила, что ответил сайт, сколько цикл ждал и на каком темпе работал. Когда Open3DLab опубликовал логи, самой разрушительной строкой была та, что краулер «не снизил число попыток скачивания, столкнувшись с нашими блокировками». Журнал аудита и есть способ заявить обратное так, чтобы вам поверили. И это же, не случайно, то, чего EDPB требует в руководстве по веб-скрейпингу, консультации по которому закрылись сегодня: надёжные источники, метка времени на каждую запись и проверка перед использованием.
def fetch(self, url: str) -> tuple[str, int, bytes | None]: """Return (outcome, status, body). Outcomes: fetched, unchanged, disallowed, throttled, error.""" if not self.robots.allowed(url): self._record(url=url, outcome="disallowed") return "disallowed", 0, None budget = self._budget(url) waited = budget.acquire() req = urllib.request.Request(url, headers={"User-Agent": self.user_agent, **self.store.headers_for(url)}) try: with urllib.request.urlopen(req, timeout=30) as resp: body = resp.read() self.store.remember(url, resp.headers) budget.on_success() self._record(url=url, outcome="fetched", status=resp.status, bytes=len(body), waited=round(waited, 2)) return "fetched", resp.status, body except urllib.error.HTTPError as e: if e.code == 304: budget.on_success() self._record(url=url, outcome="unchanged", status=304, waited=round(waited, 2)) return "unchanged", 304, None if e.code == 429: pause = budget.on_429(parse_retry_after(e.headers.get("Retry-After"))) self._record(url=url, outcome="throttled", status=429, retry_after=e.headers.get("Retry-After"), pause=round(pause, 2), rate=round(budget.rate, 3)) return "throttled", 429, None self._record(url=url, outcome="error", status=e.code) return "error", e.code, None
Как выглядит трассировка
Два прогона против локального сайта. Вежливый, на одном запросе в секунду, загружает три страницы товаров, получает отказ правил по одному пути без единого отправленного пакета, затем перезапрашивает те же три страницы и получает три 304. Нетерпеливый стартует с пяти запросов в секунду при лимите в два.
polite pass 1: ['fetched', 'fetched', 'fetched', 'disallowed'] polite pass 2: ['unchanged', 'unchanged', 'unchanged'] (4.0s for 7 fetches) impatient run: ..T..T..T............................... 3 x 429 in 40 tries, 33.2s, 1.11 pages/s achieved rate trajectory: [5.0, 2.76, 0.76, 0.92, 1.12, 1.22, 1.22, 1.22, 1.22, 1.22] {"url": ".../private/report", "outcome": "disallowed"} {"url": ".../products/1", "outcome": "unchanged", "status": 304, "waited": 1.0} {"url": ".../catalog/2", "outcome": "throttled", "status": 429, "retry_after": "2", "pause": 2.0, "rate": 2.5} {"url": ".../catalog/8", "outcome": "throttled", "status": 429, "retry_after": "2", "pause": 2.0, "rate": 0.76} {"url": ".../catalog/39", "outcome": "fetched", "status": 200, "bytes": 67, "waited": 0.82} naive run: ..T..T..T..T..T..T..T..T..T..T..T..T..T.
Три 429 подряд, каждый соблюдён ровно те две секунды, что просил сайт, каждый вдвое снижает темп и опускает потолок. После третьего: 31 загрузка подряд без троттлинга, темп устоялся на 1,2 запроса в секунду при лимите 2. Обычный цикл повторов, который пережидает Retry-After и затем продолжает в том же темпе, поймал 13 429 на тех же 40 запросах, по одному на каждый третий запрос, и всё равно загружал меньше страниц в секунду: 0,94 против 1,11. За день это тысячи записей в чьей-то истории доверия, и каждая из них тот самый повторяющийся паттерн, ради которого построен уровень доверия.
- Он не подписывает запросы. Web Bot Auth требует пары ключей, опубликованного каталога JWKS и реализации HTTP Message Signatures; предыдущий пост разбирает механизм. Добавляйте это перед
fetch, а не внутрь. - Он не читает Content Signals и словарь aipref, потому что ни у одного пока нет устоявшегося парсера. Когда появится, им место в
RobotsCacheрядом сcrawl_delay. - Он не решает, что вы можете делать с байтами. Чистый уровень доверия говорит, что вы загружали вежливо. Лицензии и тест законного интереса EDPB касаются использования, и никакой фетчер их не закрывает.
Что это меняет, если вы краулите через Crawlbase
Crawlbase не читает robots.txt за вас и не будет делать вид, что читает. Политика ваша, и история тоже. Что делает Crawling API , так это делает видимой сторону сайта в разговоре, чтобы ваш цикл мог на неё реагировать. Каждый ответ несёт собственный статус цели в original_status и вердикт Crawlbase в cb_status: сайт, ответивший 403 , возвращается как 705, сайт, ответивший 429 , как 706, и ни то ни другое не тарифицируется, так что отступление стоит только времени. С get_headers=true возвращаются и заголовки ответа сайта, в которых и находятся Retry-After, ETag и Last-Modified . Бюджет и хранилище валидаторов выше работают без изменений с этими полями вместо сырого ответа.
На Enterprise Crawler лимит конкурентности (20 по умолчанию) и скорость отправки (30 URL в секунду на токен) задают верхние границы бюджета на хост, но не заменяют его. Запускайте цикл выше как то, что решает, что попадёт в очередь, и пусть краулер будет тем, что это загружает.
Загружайте любую страницу с реальным статусом сайта, вердиктом Crawlbase и заголовками ответа в одном JSON-ответе, с рендерингом в браузере, когда он нужен. Блокировки и ограничения частоты никогда не тарифицируются. На старте доступно до 5 000 бесплатных запросов, без карты.
Практическая позиция на ближайший год
Есть и контраргумент, и он подкреплён данными. 20 октября разработчик, продающий скрейперы на Apify, опубликовал телеметрию 169 941 запуска своих скрейперов и обнаружил, что вызовы, приходящие через MCP, то есть от ИИ-агентов, завершались успехом в 86,9% случаев против 47,9% у людей в консоли, и что 0,6% из них срабатывали на его фильтр злоупотреблений. «Я понимал историю ровно наоборот», написал он. Агенты, вызывающие API, оказываются самыми воспитанными клиентами в вебе, потому что API сообщает им правила в форме, которую они могут прочитать. Краулер Roblox вёл себя плохо на сайтах, у которых не было такого интерфейса, только текстовый файл, который он решил не разбирать.
В этом контрасте весь аргумент. Веб не закрывается для краулеров. Он заменяет дверь на реестр, а реестр вознаграждает ровно одно: читаемость. Подписывайте запросы, если можете, читайте предпочтения независимо от того, согласны ли вы с ними, позвольте 429 задавать ваш темп, отправляйте валидаторы и ведите лог. Делайте это, и уровень доверия станет бесплатным активом, который накапливается. Пропустите, и каждый ваш обход станет уликой для другой стороны, с меткой времени, поставленной кем-то другим.
Заключение
Октябрь 2026 года стал месяцем, когда у поведения краулеров появилось досье. Cloudflare начала оценивать Verified bots по согласованности с robots.txt и реакции на 429 , Google начала подписывать агента, который пропускает robots.txt, а краулер, который не делал ни того ни другого, оказался на первой странице с приложенными логами. Оценка только началась, словарь всё ещё черновик, и лишь треть крупнейших сайтов вообще написала хоть какую-то директиву для ИИ. Но направление задано, и инженерия, которой оно требует, сводится к HTTP двадцатилетней давности, сделанному аккуратно: сначала прочитать правила, тратить из бюджета, подчиняться 429, проверять перед загрузкой и записывать всё. Если вы запускаете краулер, прогоните цикл выше через Crawlbase и прочитайте его лог раньше, чем это придётся сделать кому-то другому.
Часто задаваемые вопросы (FAQ)
Применяется ли уровень доверия к краулеру, который не является Verified bot?
Нет. Оценка привязана к идентичности, поэтому неподписанный и неверифицированный трафик не оценивается; с ним, как и раньше, работают правила сайта для ботов. Практический эффект тот же: у краулера без идентичности нет истории, которую можно заработать, поэтому он не может выйти из класса «запрещено по умолчанию».
Можно ли когда-нибудь безопасно повторить запрос сразу после 429?
Только когда ответ говорит об этом, а он не говорит никогда. Код 429 с Retry-After даёт вам число; соблюдайте его. Без него он велит отступать экспоненциально и снижать установившийся темп. Повтор того же запроса при той же конкурентности и есть то, что оценка призвана ловить.
Обязан ли я подчиняться Content Signals и словарю aipref?
И то и другое относится к предпочтениям, а не к контролю доступа, и ни одно пока не опубликовано как стандарт. Точка доступа Cloudflare для краулинга уже проверяет уровень use , а уровень доверия читает согласованность с «опубликованными предпочтениями» сайта, которые разрастутся и до них. Читать их сейчас ничего не стоит и заранее начинает историю.
Чем это отличается от того, что Google и Bing делали всегда?
Googlebot читает robots.txt и отступает при ошибках уже два десятилетия, и это поведение никто, кроме Google, не измерял. Изменилось то, что теперь третья сторона наблюдает поведение на миллионах сайтов, публикует результат и позволяет владельцам сайтов действовать по нему в правилах на границе сети.
Сколько Crawlbase берёт, когда сайт ограничивает мне частоту?
Ничего. Цель, ответившая 429 , возвращается как cb_status 706, ответившая 403 как 705, и ни то ни другое не считается успешным запросом, так что отступить и повторить позже стоит только времени.
Обходите любой сайт в масштабе, без борьбы с инфраструктурой.
Crawlbase берёт на себя прокси, отпечатки и CAPTCHA, чтобы ваша команда занималась конвейерами данных, а не поддержкой инфраструктуры обхода. До 5 000 запросов бесплатно, карта не нужна.
