Trường Hợp Sử Dụng

Thu thập dữ liệu nghiên cứu thị trường bằng cách xử lý CAPTCHA

Nghiên cứu thị trường yêu cầu dữ liệu từ các trang web của đối thủ cạnh tranh, nền tảng đánh giá, bảng công việc và thư mục ngành — hầu hết trong số đó đều được bảo vệ bằng CAPTCHA. CaptchaAI tự động hóa quá trình giải quyết để đường dẫn dữ liệu của bạn không bị gián đoạn.

Các nguồn dữ liệu phổ biến và CAPTCHA của chúng

Loại nguồn Ví dụ Loại CAPTCHA
Đánh giá trang web G2, Trustpilot, Yelp reCAPTCHA v2/v3
Bảng việc làm LinkedIn, Thật vậy Cloudflare Challenge
Danh bạ doanh nghiệp Trang Vàng, Crunchbase Cloudflare Turnstile, reCAPTCHA
Truyền thông xã hội Twitter/X, Reddit khác nhau
Cơ sở dữ liệu sáng chế USPTO, Bằng sáng chế của Google reCAPTCHA v2
Dữ liệu chính phủ Hồ sơ SEC, điều tra dân số CAPTCHA hình ảnh

Quy trình thu thập dữ liệu

import requests
import time
import re
import csv
import os

API_KEY = os.environ["CAPTCHAAI_API_KEY"]

def solve_captcha(params):
    params["key"] = API_KEY
    resp = requests.get("https://ocr.captchaai.com/in.php", params=params)
    if not resp.text.startswith("OK|"):
        raise Exception(f"Submit: {resp.text}")

    task_id = resp.text.split("|")[1]
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id,
        })
        if result.text == "CAPCHA_NOT_READY":
            continue
        if result.text.startswith("OK|"):
            return result.text.split("|", 1)[1]
        raise Exception(f"Solve: {result.text}")
    raise TimeoutError()

class MarketResearchCollector:
    def __init__(self):
        self.session = requests.Session()
        self.session.headers["User-Agent"] = (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 Chrome/120.0.0.0"
        )

    def fetch(self, url):
        """Fetch a page, solving CAPTCHAs as needed."""
        resp = self.session.get(url)

        # Detect reCAPTCHA
        match = re.search(
            r'data-sitekey=["\']([A-Za-z0-9_-]+)["\']', resp.text
        )
        if match:
            token = solve_captcha({
                "method": "userrecaptcha",
                "googlekey": match.group(1),
                "pageurl": url,
            })
            resp = self.session.post(url, data={
                "g-recaptcha-response": token,
            })

        # Detect Turnstile
        match = re.search(
            r'data-sitekey=["\']([0-9x][A-Za-z0-9_-]+)["\']', resp.text
        )
        if match and "cf-turnstile" in resp.text:
            token = solve_captcha({
                "method": "turnstile",
                "sitekey": match.group(1),
                "pageurl": url,
            })
            resp = self.session.post(url, data={
                "cf-turnstile-response": token,
            })

        return resp.text

    def collect_reviews(self, urls):
        """Collect review data from multiple pages."""
        reviews = []
        for url in urls:
            try:
                html = self.fetch(url)
                page_reviews = self._parse_reviews(html)
                reviews.extend(page_reviews)
                print(f"  Collected {len(page_reviews)} reviews from {url}")
                time.sleep(2)  # Polite delay
            except Exception as e:
                print(f"  Error on {url}: {e}")
        return reviews

    def collect_company_profiles(self, urls):
        """Collect company profile data."""
        profiles = []
        for url in urls:
            try:
                html = self.fetch(url)
                profile = self._parse_profile(html)
                if profile:
                    profiles.append(profile)
                    print(f"  Collected: {profile.get('name', 'Unknown')}")
                time.sleep(2)
            except Exception as e:
                print(f"  Error on {url}: {e}")
        return profiles

    def _parse_reviews(self, html):
        """Extract review data from HTML."""
        reviews = []
        # Generic review extraction patterns
        for match in re.finditer(
            r'class="review-text"[^>]*>(.*?)</div>', html, re.DOTALL
        ):
            reviews.append({
                "text": match.group(1).strip()[:500],
            })
        return reviews

    def _parse_profile(self, html):
        """Extract company profile from HTML."""
        name = re.search(r'<h1[^>]*>(.*?)</h1>', html)
        desc = re.search(
            r'class="description"[^>]*>(.*?)</div>', html, re.DOTALL
        )
        return {
            "name": name.group(1).strip() if name else None,
            "description": desc.group(1).strip()[:300] if desc else None,
        }

    def export_csv(self, data, filename):
        """Export collected data to CSV."""
        if not data:
            return
        keys = data[0].keys()
        with open(filename, "w", newline="", encoding="utf-8") as f:
            writer = csv.DictWriter(f, fieldnames=keys)
            writer.writeheader()
            writer.writerows(data)
        print(f"Exported {len(data)} records to {filename}")

Cách sử dụng

collector = MarketResearchCollector()

# Collect competitor reviews
review_urls = [
    "https://example-reviews.com/product/competitor-a",
    "https://example-reviews.com/product/competitor-b",
    "https://example-reviews.com/product/competitor-c",
]
reviews = collector.collect_reviews(review_urls)
collector.export_csv(reviews, "competitor_reviews.csv")

# Collect company profiles
profile_urls = [
    "https://example-directory.com/company/alpha-corp",
    "https://example-directory.com/company/beta-inc",
]
profiles = collector.collect_company_profiles(profile_urls)
collector.export_csv(profiles, "company_profiles.csv")

Trường hợp sử dụng

Thông tin về giá cả cạnh tranh

Theo dõi giá của đối thủ cạnh tranh trên các nền tảng thương mại điện tử. Theo dõi sự thay đổi về giá, chương trình khuyến mãi và lượng hàng tồn kho.

Phân tích tình cảm thương hiệu

Thu thập đánh giá và xếp hạng từ các nền tảng đánh giá. Tổng hợp dữ liệu tình cảm trên nhiều nguồn.

Phân tích thị trường việc làm

Tìm kiếm các tin tuyển dụng để hiểu xu hướng tuyển dụng, mức lương và nhu cầu kỹ năng trong ngành của bạn.

Nghiên cứu cảnh quan bằng sáng chế

Thu thập hồ sơ bằng sáng chế từ cơ sở dữ liệu công cộng để theo dõi xu hướng đổi mới và hoạt động R&D của đối thủ cạnh tranh.

Mẹo chia tỷ lệ

Yếu tố Khuyến nghị
Khoảng cách yêu cầu 2-5 giây giữa các trang
Bộ sưu tập đồng thời 5-10 cho thang điểm vừa phải
Xoay vòng proxy Cần thiết cho hơn 100 trang/hour
Chống trùng lặp dữ liệu Khấu trừ dựa trên hàm băm trước khi lưu trữ
Lên lịch Chạy hàng ngày hoặc hàng tuần cho dữ liệu xu hướng

Câu hỏi thường gặp

Việc thu thập dữ liệu thị trường có hợp pháp không?

Việc quét dữ liệu công khai thường được cho phép. Luôn kiểm tra các điều khoản dịch vụ của trang web và tuân thủ các quy định của địa phương. Không cạo dữ liệu cá nhân mà không có sự đồng ý.

Cái này có giá bao nhiêu với CaptchaAI?

Việc tìm kiếm nghiên cứu thị trường điển hình sẽ kích hoạt CAPTCHA trên ~30% số trang. Đối với 1.000 trang/day, dự kiến có ~300 giải với tổng số tiền là 0,5-3 USD.

Làm cách nào để xử lý các trang web chặn hoàn toàn trình thu thập dữ liệu?

Kết hợp CaptchaAI với tính năng xoay proxy và các mẫu yêu cầu thực tế. Xem của chúng tôiCạo mà không bị chặnhướng dẫn.

Hướng dẫn liên quan

Os comentários estão desativados para este artigo.