Скрейпинг профилей компаний для B2B-лидогенерации
Как извлекать данные о компаниях из деловых социальных сетей и каталогов для B2B-продаж: адаптация к техническим ограничениям, TLS-фингерпринтинг, Python-скрипт и масштабирование.
Команда InfraProxy
20 февраля 2026 г.
Почему скрейпинг деловых сетей ломается в 2026 году
Деловые социальные сети и профессиональные каталоги — ценный источник B2B-лидов: профили компаний, численность сотрудников, отрасль, геолокация, контакты. При этом эти платформы относятся к числу самых защищённых. В 2026 году попытки автоматического сбора данных без специализированного стека почти всегда заканчиваются блокировками.
Агрессивная антибот-защита. Деловые платформы используют многоуровневую защиту: детектирование headless-браузеров, анализ поведения, блокировку по IP и по сессии. Обычный HTTP-клиент получает 403 или CAPTCHA уже после нескольких запросов.
JavaScript-зависимый контент. Карточки компаний, описания, контакты и блоки вакансий рендерятся в браузере. Без выполнения JavaScript HTML содержит пустой каркас.
Rate limiting. Ограничения на частоту запросов и подозрительные паттерны приводят к временной блокировке аккаунта или IP.
Для стабильного сбора нужен API для скрейпинга с полным стеком обхода: резидентные прокси, TLS-фингерпринтинг, JavaScript-рендеринг и обработка CAPTCHA-ответа.
Полноценный Python-скрипт за 12 строк
Интеграция с Scraper API сводится к минимальному коду:
import httpx
import os
API_KEY = os.environ.get("SCRAPER_API_KEY")
url = "https://example.com/company/acme-corp"
payload = {
"url": url,
"use_antibot": True,
"tls_profile": "chrome124",
"use_js_render": True,
"solve_captcha": True,
"extract_rules": {
"name": "h1, .company-name",
"industry": ".industry, [data-industry]",
"employees": ".employee-count, .headcount",
"location": ".headquarters, .location",
"description": ".about-section, .company-description",
"website": "a[href*='website']@href"
}
}
resp = httpx.post(
"https://api.example.com/v1/scrape",
json=payload,
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60.0
)
data = resp.json()
print(data.get("extract"))
Один запрос возвращает структурированный JSON с полями компании. Вся логика обработка ограничений выполняется на стороне API.
Ключевые флаги API
| Параметр | Назначение |
|---|---|
use_antibot |
Включение стека адаптация к техническим ограничениям |
tls_profile |
TLS-отпечаток браузера (chrome124, firefox) |
use_js_render |
Рендеринг JavaScript для динамического контента |
solve_captcha |
Автоматическое обработка CAPTCHA-ответа при появлении |
session_id |
Привязка запросов к одной сессии (один IP, общие cookies) |
TLS-фингерпринтинг как первая линия обороны
TLS-отпечаток (JA3/JA4) — один из главных сигналов для антибот-систем. Python-клиент с OpenSSL имеет отпечаток, отличный от Chrome или Firefox. Несоответствие User-Agent и TLS сразу выдаёт автоматизацию.
Параметр tls_profile: "chrome124" указывает API использовать TLS-отпечаток актуальной версии Chrome. Это значительно снижает долю блокировок ещё до проверки поведения и CAPTCHA.
Компромиссы: латентность, токены, рендеринг
Латентность. Запрос с JavaScript-рендерингом занимает 5–15 секунд вместо 1–2 при простом HTTP. Для batch-обработки это компенсируется параллельностью.
Стоимость токенов. Рендеринг и обработка CAPTCHA-ответа увеличивают стоимость запроса. Планируйте бюджеты под объёмы.
Зависимость от рендеринга. Для деловых сетей use_js_render фактически обязателен — без него контент не подгружается. Альтернативы нет.
Асинхронный скрейпинг в масштабе (10K+ страниц)
При объёмах в тысячи профилей используйте асинхронный подход с ограничением concurrency:
import asyncio
import httpx
async def scrape_companies(urls: list[str], max_concurrent: int = 10) -> list[dict]:
sem = asyncio.Semaphore(max_concurrent)
async def fetch_one(client: httpx.AsyncClient, url: str):
async with sem:
payload = {
"url": url,
"use_antibot": True,
"tls_profile": "chrome124",
"use_js_render": True,
"solve_captcha": True,
"extract_rules": extract_rules
}
resp = await client.post(API_URL, json=payload, headers={"Authorization": f"Bearer {API_KEY}"})
resp.raise_for_status()
return resp.json().get("extract")
async with httpx.AsyncClient(timeout=90.0) as client:
tasks = [fetch_one(client, url) for url in urls]
return await asyncio.gather(*tasks)
Ограничьте max_concurrent (10–15), чтобы не провоцировать rate limiting на целевой платформе.
Batch API с webhook-колбэками
Для больших объёмов удобнее batch-режим:
- Отправьте массив URL в batch-эндпоинт
- Получите
job_id - Укажите webhook URL для уведомления о готовности
- Скачайте результат по завершении
Так не нужно опрашивать статус вручную, а обработка выполняется фоном.
Важные нюансы
session_id для многостраничного сбора
При обходе нескольких страниц одной компании (профиль, вакансии, сотрудники) используйте один и тот же session_id для всех запросов. API будет направлять трафик через один IP и сохранять cookies — снижается вероятность CAPTCHA и блокировок.
Хрупкость extract_rules
Селекторы в extract_rules зависят от структуры DOM. При редизайне платформы правила могут перестать работать. Настройте мониторинг пустых или неполных ответов и имейте запасной вариант (например, extract_schema).
Стоимость solve_captcha
Каждый вызов обработка CAPTCHA-ответа тарифицируется отдельно. Оптимизируйте: резидентные прокси и session_id уменьшают долю запросов, доходящих до CAPTCHA.
Резюме
- Деловые сети в 2026 году защищены антибот-системами, JS-рендерингом и rate limiting — нужен специализированный API
- Минимальный Python-скрипт: URL +
extract_rules+ флагиuse_antibot,tls_profile,use_js_render,solve_captcha - TLS-фингерпринтинг — первая линия обороны, без него блокировки высоки
- Учитывайте: латентность, стоимость, зависимость от рендеринга
- Масштабируйте через асинхронные запросы или batch API с webhook
- Важно:
session_idдля многостраничного сбора, хрупкость селекторов, стоимость solve_captcha
Перед рабочим запуском проверьте задачу на разрешённом источнике: возможности Scraper API.
Этичность и ограничения
Перед сбором проверьте официальный API, robots.txt и условия использования источника. Соблюдайте Disallow и Crawl-delay, ограничивайте параллельность, используйте backoff на 429/503 и кэшируйте ответы. Собирайте только публичные данные: без обхода логина и paywall, без персональных данных и перепубликации чужих текстов. Используйте честный User-Agent и обрабатывайте запросы на удаление данных.
Нужно получать публичные данные без поддержки собственной инфраструктуры?
Посмотрите возможности Scraper API, условия теста и примеры интеграции.
Перейти к Scraper APIЧитайте также
Сбор данных с маркетплейсов в масштабе: руководство для B2B
Как собирать публичные данные товарных каталогов: схема данных, лимиты, очереди, контроль качества и выбор между HTML, фидом и официальным API.
РуководстваCAPTCHA в сборе данных: диагностика и безопасная реакция
Как отличить CAPTCHA от 403, 429 и сбоя прокси, снизить нагрузку на источник и решить, когда остановить сбор или перейти на API.
РуководстваСбор новостных данных на Python: архитектура пайплайна
Продакшн-ready пайплайн на Python: extract_rules, TLS-профили, эмуляция поведения, networkidle vs load, session_id и масштабирование через async и batch.