Платформы социальных сетей используют CAPTCHA для защиты от автоматического сбора данных. Исследователям рынка, специалистам по мониторингу брендов и академическим исследователям необходимо решать эти проблемы, чтобы собрать общедоступные социальные данные для анализа.
CAPTCHA на социальных платформах
| Платформа | Тип капчи | При срабатывании | Контекст |
|---|---|---|---|
| Инстаграм | reCAPTCHA v2 | Вход, поиск, доступ к профилю | Ограничение скорости |
| Фейсбук | reCAPTCHA v2 | Вход, повторные поиски | Контрольно-пропускной пункт безопасности |
| Твиттер/X | Cloudflare Turnstile | Вход, доступ к API | Предотвращение ботов |
| ТикТок | reCAPTCHA v3 | Просмотры профиля, поиск | Качество трафика |
| страница Cloudflare-защиты в staging | Парсинг профиля | Обнаружение ботов | |
| Реддит | reCAPTCHA v2 | Войти, тяжелый просмотр | Предотвращение злоупотреблений |
Парсер для исследований в социальных сетях
import requests
import time
import re
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
def solve_captcha(method, sitekey, pageurl, **kwargs):
data = {
"key": CAPTCHAAI_KEY,
"method": method,
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
}
data.update(kwargs)
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data=data)
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
r = result.json()
if r["request"] != "CAPCHA_NOT_READY":
return r["request"]
raise TimeoutError("Solve timeout")
class SocialMediaResearcher:
def __init__(self, proxy=None):
self.session = requests.Session()
if proxy:
self.session.proxies = {"http": proxy, "https": proxy}
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) "
"AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 "
"Mobile/15E148 Safari/604.1",
"Accept-Language": "en-US,en;q=0.9",
})
def authenticate(self, login_url, credentials, sitekey):
"""Login with CAPTCHA handling."""
# Load login page
self.session.get(login_url)
# Solve CAPTCHA
token = solve_captcha("userrecaptcha", sitekey, login_url)
# Submit login
resp = self.session.post(login_url, data={
**credentials,
"g-recaptcha-response": token,
})
return resp.status_code == 200
def collect_profiles(self, profile_urls):
"""Collect public profile data with CAPTCHA handling."""
profiles = []
for url in profile_urls:
try:
resp = self.session.get(url, timeout=30)
# Handle CAPTCHA if triggered
if self._has_captcha(resp.text):
resp = self._handle_captcha(resp.text, url)
profiles.append({
"url": url,
"data": self._parse_profile(resp.text),
"status": "success",
})
time.sleep(5) # Slow down between profiles
except Exception as e:
profiles.append({
"url": url,
"error": str(e),
"status": "failed",
})
return profiles
def _has_captcha(self, html):
return any(tag in html.lower() for tag in [
'data-sitekey', 'g-recaptcha', 'cf-turnstile',
'challenge-platform', 'captcha',
])
def _handle_captcha(self, html, url):
match = re.search(r'data-sitekey="([^"]+)"', html)
if not match:
return self.session.get(url)
sitekey = match.group(1)
if 'cf-turnstile' in html:
token = solve_captcha("turnstile", sitekey, url)
return self.session.post(url, data={"cf-turnstile-response": token})
else:
token = solve_captcha("userrecaptcha", sitekey, url)
return self.session.post(url, data={"g-recaptcha-response": token})
def _parse_profile(self, html):
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
return {
"name": self._safe_text(soup, "h1, .profile-name"),
"bio": self._safe_text(soup, ".bio, .profile-bio"),
"followers": self._safe_text(soup, "[data-followers], .followers"),
"posts": self._safe_text(soup, "[data-posts], .posts-count"),
}
def _safe_text(self, soup, selector):
el = soup.select_one(selector)
return el.get_text(strip=True) if el else ""
Хэштег и исследование тенденций
def research_hashtag(hashtag, platform_url, pages=5):
"""Collect posts for a specific hashtag."""
researcher = SocialMediaResearcher(
proxy="http://user:pass@mobile.proxy.com:5000"
)
all_posts = []
for page in range(pages):
url = f"{platform_url}/explore/tags/{hashtag}?page={page}"
resp = researcher.session.get(url, timeout=30)
if researcher._has_captcha(resp.text):
resp = researcher._handle_captcha(resp.text, url)
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, "html.parser")
posts = soup.select(".post-item, article")
for post in posts:
all_posts.append({
"text": post.get_text(strip=True)[:500],
"hashtag": hashtag,
"page": page,
})
time.sleep(5)
return all_posts
Мониторинг упоминаний бренда
import json
from datetime import datetime
class BrandMonitor:
def __init__(self, brand_name, keywords, proxy=None):
self.brand = brand_name
self.keywords = keywords
self.researcher = SocialMediaResearcher(proxy=proxy)
def daily_scan(self, platform_urls):
"""Run daily brand mention scan across platforms."""
report = {
"brand": self.brand,
"date": datetime.now().isoformat(),
"platforms": {},
}
for name, url in platform_urls.items():
mentions = []
for keyword in self.keywords:
search_url = f"{url}/search?q={keyword}"
try:
resp = self.researcher.session.get(search_url, timeout=30)
if self.researcher._has_captcha(resp.text):
resp = self.researcher._handle_captcha(
resp.text, search_url,
)
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, "html.parser")
results = soup.select(".search-result, .post")
mentions.append({
"keyword": keyword,
"count": len(results),
})
time.sleep(5)
except Exception as e:
mentions.append({
"keyword": keyword,
"error": str(e),
})
report["platforms"][name] = mentions
return report
# Usage
monitor = BrandMonitor(
brand_name="CaptchaAI",
keywords=["captchaai", "captcha ai", "captcha solver"],
proxy="http://user:pass@mobile.proxy.com:5000",
)
report = monitor.daily_scan({
"twitter": "https://twitter-alternative.example.com",
"reddit": "https://www.reddit.com",
})
print(json.dumps(report, indent=2))
Рекомендации по прокси
| Платформа | подходящий прокси | Почему |
|---|---|---|
| Инстаграм | Мобильная связь (4G) | Ожидается трафик мобильных устройств |
| Фейсбук | Жилой | Агрессивно помечает IP-адреса DC |
| Твиттер/X | Жилой | Cloudflare блокирует DC |
| ТикТок | Мобильная связь (4G) | Создан для мобильного доступа |
| Интернет-провайдер для жилых помещений | Ожидает настольные IP-адреса /corporate | |
| Реддит | Жилой вращающийся | Ограничения скорости на IP |
Рекомендации по ограничению ставок
| Платформа | Безопасная скорость запросов | Продолжительность сеанса |
|---|---|---|
| Инстаграм | 1 запрос / 10 сек. | Макс 5 минут, затем отдых |
| Фейсбук | 1 запрос / 5 сек. | Макс 10 мин. |
| Твиттер/X | 1 запрос / 3 секунды | Макс 15 мин. |
| ТикТок | 1 запрос / 5 сек. | Макс 5 минут |
| 1 запрос / 10 сек. | Макс 5 минут | |
| Реддит | 1 запрос/2 сек. | Макс 30 мин. |
Поиск неисправностей
| Проблема | Причина | Исправить |
|---|---|---|
| CAPTCHA каждый запрос | IP отмечен | Меняйте IP, используйте авторизованный сетевой выход |
| Аккаунт заблокирован | Слишком много действий | Сократите частоту, используйте несколько учетных записей. |
| Возвратилась пустая страница | Содержимое входа в систему | Сначала пройдите аутентификацию |
| Цикл испытаний Cloudflare | Несовпадение сигналы браузера в браузере | Используйте браузер, ориентированный на конфиденциальность, или стандартная конфигурация браузера Puppeteer. |
| Содержимое, отличное от браузера | Местоположение/cookie различия | Сопоставьте геопрокси с целевой аудиторией |
Часто задаваемые вопросы
Разрешено ли собирать данные из социальных сетей для исследований?
Сбор публичных данных для некоммерческих исследований является обычным явлением. Суды постановили, что сбор общедоступных данных не нарушает CFAA. Однако всегда соблюдайте Условия обслуживания и ограничения скорости платформы.
Почему социальные платформы так быстро проверяют меня CAPTCHA?
Социальные платформы вкладывают значительные средства в обнаружение ботов. Они анализируют шаблоны просмотра, частоту запросов и сигналы браузера устройств. Используйте авторизованный сетевой выход и реалистичные шаблоны просмотра.
Должен ли я использовать API вместо парсинга?
Если платформа предлагает API с необходимыми вам данными, отдайте предпочтение этому. API более надежны и соответствуют ToS. Используйте очистку + CaptchaAI только для данных, недоступных через официальные API.
Связанные руководства
- авторизованный сетевой выход для решения CAPTCHA
- Сохранение сеанса браузера
- Интеграция со скрытыми браузерами
Надежный сбор данных исследований в социальных сетях —получите ключ CaptchaAIи автоматически обрабатывать CAPTCHA платформы.