حالات الاستخدام

جمع بيانات أبحاث وسائل التواصل الاجتماعي باستخدام تقنية CAPTCHA

تستخدم منصات التواصل الاجتماعي اختبارات CAPTCHA للحماية من جمع البيانات تلقائيًا. يحتاج باحثو السوق ومراقبو العلامات التجارية والباحثون الأكاديميون إلى التغلب على هذه التحديات لجمع البيانات الاجتماعية العامة لتحليلها.


اختبارات CAPTCHA عبر المنصات الاجتماعية

منصة نوع التحقق عندما يتم تفعيلها السياق
انستغرام reCAPTCHA v2 تسجيل الدخول والبحث والوصول إلى الملف الشخصي الحد من المعدل
الفيسبوك reCAPTCHA v2 تسجيل الدخول، عمليات البحث المتكررة نقطة تفتيش أمنية
تويتر/X Cloudflare Turnstile تسجيل الدخول، الوصول إلى API منع البوت
تيك توك reCAPTCHA v3 مشاهدات الملف الشخصي، والبحث جودة حركة المرور
ينكدين Cloudflare Challenge تجريف الملف الشخصي كشف البوت
رديت 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) يتوقع حركة مرور الأجهزة المحمولة
الفيسبوك سكني علامات DC IPs بقوة
تويتر/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 دقيقة

استكشاف الأخطاء وإصلاحها

المشكلة السبب الإجراء
كابتشا كل طلب تم وضع علامة IP تدوير IP، واستخدام الوكيل المحمول
الحساب مغلق إجراءات كثيرة جدًا تقليل التردد، واستخدام حسابات متعددة
تم إرجاع صفحة فارغة المحتوى وراء تسجيل الدخول المصادقة أولا
حلقة التحدي Cloudflare عدم تطابق بصمة المتصفح استخدم متصفحًا يركز على الخصوصية أو Puppeteer الخفي
محتوى مختلف عن المتصفح الموقع /cookie الاختلافات مطابقة الوكيل الجغرافي للجمهور المستهدف

الأسئلة الشائعة

هل يُسمح بتجريف وسائل التواصل الاجتماعي للبحث؟

يعد جمع البيانات العامة للأبحاث غير التجارية أمرًا شائعًا. قضت المحاكم بأن حذف البيانات العامة لا ينتهك قانون CFAA. ومع ذلك، احترم دائمًا شروط الخدمة وحدود أسعار النظام الأساسي.

لماذا تقوم منصات التواصل الاجتماعي بإجراء اختبار CAPTCHA بهذه السرعة؟

تستثمر المنصات الاجتماعية بكثافة في الكشف عن الروبوتات. يقومون بتحليل أنماط التصفح وطلب التردد وبصمات أصابع الجهاز. استخدم وكلاء الهاتف المحمول وأنماط التصفح الواقعية.

هل يجب علي استخدام واجهة برمجة التطبيقات (API) بدلاً من الكشط؟

إذا كان النظام الأساسي يوفر واجهة برمجة التطبيقات (API) بالبيانات التي تحتاجها، ففضل ذلك. تعتبر واجهات برمجة التطبيقات أكثر موثوقية ومتوافقة مع ToS. استخدم الكشط + CaptchaAI فقط للبيانات غير المتوفرة من خلال واجهات برمجة التطبيقات الرسمية.


أدلة ذات صلة


التعليقات غير مفعّلة لهذا المقال.