As plataformas de mídia social usam CAPTCHAs para proteção contra a coleta automatizada de dados. Pesquisadores de mercado, monitores de marcas e pesquisadores acadêmicos precisam enfrentar esses desafios para coletar dados sociais públicos para análise.
CAPTCHAs em plataformas sociais
| Plataforma | Tipo CAPTCHA | Quando acionado | Contexto |
|---|---|---|---|
| reCAPTCHA v2 | Login, pesquisa, acesso ao perfil | Limitação de taxa | |
| reCAPTCHA v2 | Login, pesquisas repetidas | Ponto de verificação de segurança | |
| Twitter/X | Cloudflare Turnstile | Login, acesso à API | Prevenção de bots |
| TikTok | reCAPTCHA v3 | Visualizações de perfil, pesquisa | Qualidade do tráfego |
| Cloudflare Turnstile em staging | Raspagem de perfil | Detecção de bots | |
| reCAPTCHA v2 | Login, navegação pesada | Prevenção de abusos |
Raspador de pesquisa de mídia social
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 ""
Hashtag e pesquisa de tendências
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
Monitoramento de menção à marca
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))
Recomendações de proxy
| Plataforma | mais adequado proxy | Por que |
|---|---|---|
| Móvel (4G) | Espera tráfego de dispositivos móveis | |
| Residencial | Sinaliza IPs DC agressivamente | |
| Twitter/X | Residencial | Cloudflare bloqueia DCs |
| TikTok | Móvel (4G) | Projetado para acesso móvel |
| ISP residencial | Espera IPs de desktop/corporate | |
| Rotativo residencial | Limites de taxa por IP |
Diretrizes de limitação de taxa
| Plataforma | Taxa de solicitação segura | Duração da sessão |
|---|---|---|
| 1 solicitação/10 seg. | Máx. 5 minutos e depois descanse | |
| 1 solicitação / 5 seg. | Máx. 10 minutos | |
| Twitter/X | 1 solicitação / 3 seg. | Máx. 15 minutos |
| TikTok | 1 solicitação / 5 seg. | Máx. 5 minutos |
| 1 solicitação/10 seg. | Máx. 5 minutos | |
| 1 solicitação / 2 seg. | Máx. 30 minutos |
Solução de problemas
| Problema | Causa | Correção |
|---|---|---|
| CAPTCHA cada solicitação | IP sinalizado | Gire o IP, use rede mobile autorizada |
| Conta bloqueada | Muitas ações | Reduza a frequência, use várias contas |
| Página vazia retornada | Conteúdo por trás do login | Autenticar primeiro |
| Ciclo de desafio Cloudflare | Incompatibilidade de sinal de navegador do navegador | Use um navegador com foco na privacidade ou o Puppeteer QA de navegador |
| Conteúdo diferente do navegador | Diferenças de localização/cookie | Combine o proxy geográfico com o público-alvo |
Perguntas frequentes
A coleta de mídia social para pesquisa é permitida?
A recolha pública de dados para investigação não comercial é comum. Os tribunais decidiram que a recolha de dados públicos não viola a CFAA. No entanto, sempre respeite os Termos de Serviço e os limites de taxas da plataforma.
Por que as plataformas sociais me CAPTCHA tão rapidamente?
As plataformas sociais investem pesadamente na detecção de bots. Eles analisam padrões de navegação, frequência de solicitações e impressões digitais de dispositivos. Use proxies móveis e padrões de navegação realistas.
Devo usar uma API em vez de raspagem?
Se a plataforma oferece uma API com os dados que você precisa, prefira essa. APIs são mais confiáveis e compatíveis com ToS. Use scraping + CaptchaAI apenas para dados não disponíveis por meio de APIs oficiais.
Guias Relacionados
- Proxies móveis para resolução de CAPTCHA
- Persistência de sessão do navegador
- Integração de navegadores com configuração controle de QA
Colete dados de pesquisa de mídia social de forma confiável -obtenha sua chave CaptchaAIe lidar com CAPTCHAs da plataforma automaticamente.