Pazar araştırması, çoğu CAPTCHA korumalı olan rakip web sitelerinden, inceleme platformlarından, iş kurullarından ve endüstri dizinlerinden veri gerektirir. CaptchaAI, veri hattınızın kesintisiz kalması için çözümü otomatikleştirir.
Ortak Veri Kaynakları ve CAPTCHA'ları
| Kaynak Türü | Örnekler | CAPTCHA Türü |
|---|---|---|
| Siteleri inceleyin | G2, Trustpilot, Yelp | reCAPTCHA v2/v3 |
| İş panoları | LinkedIn, Gerçekten | Cloudflare doğrulama akışı |
| İş rehberleri | YellowPages, Crunchbase | Turnstile, reCAPTCHA |
| Sosyal medya | Twitter/X, Reddit | Çeşitli |
| Patent veritabanları | USPTO, Google Patentleri | reCAPTCHA v2 |
| Hükümet verileri | SEC kayıtları, nüfus sayımı | Resim CAPTCHA'sı |
Veri Toplama Hattı
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}")
Kullanım
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")
Kullanım Durumları
Rekabetçi Fiyatlandırma İstihbaratı
E-ticaret platformlarındaki rakip fiyatlarını izleyin. Fiyat değişikliklerini, promosyonları ve stok seviyelerini takip edin.
Marka Duyarlılığı Analizi
İnceleme platformlarından incelemeleri ve derecelendirmeleri toplayın. Duygu verilerini birden fazla kaynaktan toplayın.
İş Piyasası Analizi
Sektörünüzdeki işe alım eğilimlerini, maaş aralıklarını ve beceri talebini anlamak için iş ilanlarını inceleyin.
Patent Ortamı Araştırması
Yenilik trendlerini ve rakiplerin Ar-Ge faaliyetlerini takip etmek için kamuya açık veritabanlarından patent başvurularını toplayın.
Ölçeklendirme İpuçları
| Faktör | Tavsiye |
|---|---|
| Boşluk isteme | Sayfalar arasında 2-5 saniye |
| Eşzamanlı toplayıcılar | Orta ölçek için 5-10 |
| Vekil rotasyonu | 100'den fazla sayfa için gereklidir/hour |
| Veri tekilleştirme | Depolamadan önce karma tabanlı tekilleştirme |
| Planlama | Trend verileri için günlük veya haftalık olarak çalıştırın |
SSS
Piyasa verilerini kazımak yasal mı?
Kamuya açık verilerin kazınmasına genellikle izin verilir. Her zaman sitenin hizmet şartlarını kontrol edin ve yerel düzenlemelere uyun. Kişisel verileri rızanız olmadan kazımayın.
CaptchaAI ile bunun maliyeti ne kadar?
Tipik pazar araştırması kazımaları, sayfaların ~%30'unda CAPTCHA'ları tetikler. 1.000 sayfa/day için toplamda 0,5-3 USD karşılığında ~300 çözüm bekleyin.
Kazıyıcıları tamamen engelleyen siteleri nasıl halledebilirim?
CaptchaAI'yi proxy rotasyonu ve gerçekçi istek modelleriyle birleştirin. Bizimkilere bakınEngellenmeden Kazımarehber.