Kullanım Senaryoları

CAPTCHA İşleme ile Sosyal Medya Araştırma Verisi Toplama

Sosyal medya platformları, otomatik veri toplamaya karşı koruma sağlamak için CAPTCHA'ları kullanır. Pazar araştırmacıları, marka gözlemcileri ve akademik araştırmacıların, analiz için halka açık sosyal verileri toplamak amacıyla bu zorlukların üstesinden gelmesi gerekiyor.


Sosyal Platformlardaki CAPTCHA'lar

platformu CAPTCHA Türü Tetiklendiğinde Bağlam
instagram reCAPTCHA v2 Giriş yapma, arama, profil erişimi Hız sınırlaması
Facebook reCAPTCHA v2 Giriş yapın, tekrarlanan aramalar Güvenlik kontrol noktası
Twitter/X Cloudflare Turnstile Giriş, API erişimi Bot önleme
Tiktok reCAPTCHA v3 Profil görünümleri, arama Trafik kalitesi
LinkedIn Cloudflare doğrulama akışı Profil kazıma Bot tespiti
Reddit reCAPTCHA v2 Giriş yapın, yoğun gezinme Kötüye kullanımın önlenmesi

Sosyal Medya Araştırma Kazıyıcı

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 ve Trend Araştırması

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

Marka Adı Takibi

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))

Vekil Önerileri

platformu En İyi Vekil neden
instagram Mobil (4G) Mobil cihaz trafiği bekleniyor
Facebook Konut DC IP'lerini agresif bir şekilde işaretler
Twitter/X Konut Cloudflare DC'leri engelliyor
Tiktok Mobil (4G) Mobil erişim için tasarlandı
LinkedIn İSS konutu Masaüstü/corporate IP'leri bekleniyor
Reddit Konut rotasyonu IP başına hız sınırları

Hız Sınırlama Yönergeleri

platformu Güvenli Talep Oranı Oturum Süresi
instagram 1 talep / 10 sn Maksimum 5 dakika sonra dinlenin
Facebook 1 talep / 5 sn Maksimum 10 dakika
Twitter/X 1 talep / 3 sn Maksimum 15 dakika
Tiktok 1 talep / 5 sn Maksimum 5 dakika
LinkedIn 1 talep / 10 sn Maksimum 5 dakika
Reddit 1 talep / 2 sn Maksimum 30 dakika

Sorun giderme

Sorun Sebep Düzeltme
CAPTCHA her istek IP işaretli IP'yi döndürün, kendi sunucu altyapınız kullanın
Hesap kilitlendi Çok fazla eylem Sıklığı azaltın, birden fazla hesap kullanın
Boş sayfa geri döndü Girişin arkasındaki içerik Önce kimlik doğrulaması yapın
Cloudflare meydan okuma döngüsü Tarayıcı test profil yapılandırması uyuşmazlığı Gizlilik odaklı tarayıcıyı veya Puppeteer gizliliğini kullanın
Tarayıcıdan farklı içerik Konum/cookie farkları Coğrafi proxy'yi hedef kitleyle eşleştirin

SSS

Araştırma için sosyal medya kazımasına izin veriliyor mu?

Ticari olmayan araştırmalar için kamuya açık veri toplanması yaygındır. Mahkemeler, kamuya açık verilerin kazınmasının CFAA'yı ihlal etmediğine karar verdi. Ancak Hizmet Şartlarına ve platform ücret sınırlarına her zaman saygı gösterin.

Sosyal platformlar neden beni bu kadar çabuk CAPTCHA yapıyor?

Sosyal platformlar bot tespitine büyük yatırım yapıyor. Tarama modellerini, istek sıklığını ve cihazın parmak izlerini analiz ederler. Kendi sunucu altyapınız'leri ve gerçekçi tarama modellerini kullanın.

Kazımak yerine API kullanmalı mıyım?

Platform ihtiyacınız olan verileri içeren bir API sunuyorsa bunu tercih edin. API'ler daha güvenilir ve Hizmet Şartları uyumludur. Kazıma + CaptchaAI'yi yalnızca resmi API'ler aracılığıyla kullanılamayan veriler için kullanın.


İlgili Kılavuzlar


Sosyal medya araştırma verilerini güvenilir bir şekilde toplayın —CaptchaAI anahtarınızı alınve platform CAPTCHA'larını otomatik olarak yönetin.

Bu makale için yorumlar devre dışı bırakılmıştır.