Crawl4AI и Firecrawl стали стандартным способом подавать веб-данные в LLM-пайплайны — они обходят сайты, рендерят и возвращают чистый Markdown, который ваша модель реально может использовать. А затем вы наводите их на настоящую цель и узнаёте то, что рано или поздно узнаёт каждый скрейпер: слой извлечения никогда не был сложной частью. Сложность в том, что ваш краулер работает с одного дата-центрового IP, и веб это видит.
В гайде показана рабочая настройка прокси для обоих инструментов — self-hosted Crawl4AI и оба режима Firecrawl — плюс стратегия сессий, которая не даёт задачам RAG-инжеста умирать на 50-й странице. Это расширение наших гайдов по прокси для AI-агентов и browser-use на краулинговые фреймворки.
Crawl4AI (open-source, self-hosted) принимает прокси на уровне BrowserConfig — один прокси на экземпляр краулера:
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
browser_cfg = BrowserConfig(
headless=True,
proxy_config={
"server": "us.jibaoproxy.com:913",
"username": "USERNAME",
"password": "PASSWORD",
},
)
async with AsyncWebCrawler(config=browser_cfg) as crawler:
result = await crawler.arun(
url="https://example.com/docs",
config=CrawlerRunConfig(),
)
print(result.markdown[:500])
Для глубоких обходов меняйте личность на экземпляр краулера, а не на страницу — страницы в рамках одного визита на сайт должны делить один выходной IP (человек не меняет город между страницей 3 и страницей 4):
def crawler_for(site_id: str) -> BrowserConfig:
# Sticky-сессия на сайт: cookie + IP двигаются вместе
return BrowserConfig(
headless=True,
proxy_config={
"server": "us.jibaoproxy.com:913",
"username": f"USERNAME-session-{site_id}",
"password": "PASSWORD",
},
)
# сайт A обходится через выход A, сайт B через выход B, параллельно
Облачный API: проксирование — это параметр запроса, Firecrawl маршрутизирует через свои пулы. Вы управляете уровнем качества, но не самими IP:
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR-KEY")
result = app.scrape_url(
"https://example.com/pricing",
params={"proxy": "stealth"}, # basic | stealth | auto
)
Подвох: запросы на уровне stealth тарифицируются кратно базовым кредитам, и вы не можете точно зафиксировать страну или держать sticky-сессии между вызовами. Годится для эпизодических страниц; дорого и неточно на объёмах инжеста.
Self-hosted Firecrawl: вы подаёте собственный прокси через переменные окружения, с полным контролем:
# .env для self-hosted Firecrawl
PROXY_SERVER=http://us.jibaoproxy.com:1000
PROXY_USERNAME=USERNAME
PROXY_PASSWORD=PASSWORD
Self-hosted + собственный резидентный шлюз — рационально по цене, как только вы инжестите на масштабе: вы платите за трафик по гигабайтам, а не за страницы по кредитам с stealth-множителем.
semaphore_count / задержек в Crawl4AI существуют ровно для этого — 2–4 одновременные страницы на сайт более чем достаточно; распределяйте параллелизм по сайтам.ETag/Last-Modified, где фреймворк это позволяет.| Конфигурация | За что платите | Когда лучше всего |
|---|---|---|
| Firecrawl облако, stealth-прокси | Кредиты за страницу × stealth-множитель | Малый объём, ноль операционки |
| Self-hosted Firecrawl + резидентные ГБ | Только трафик (~$10/ГБ) | Стабильный объём инжеста |
| Crawl4AI + резидентные ГБ | Только трафик, полный контроль | Кастомные пайплайны, глубокие обходы |
Типичная текстовая страница стоит 100–300 КБ через прокси — примерно 3 000–10 000 страниц на ГБ. Циклы "блок-и-ретрай" — вот что разрывает бюджет, ещё одна причина чинить детект до масштабирования объёма.
proxy_config в BrowserConfig; sticky-личность на сайт, ротация между сайтами.proxy: "stealth", дорого на объёме; self-hosted: собственный шлюз через переменные окружения.Резидентные выходы, sticky-сессии, цена за ГБ — $5 бесплатного баланса, без карты.
Начать бесплатноНовым пользователям — 5U при регистрации, бонус к первому пополнению. Акция ограничена по времени.