Mobil Proxy ile eBay Veri Kazıma
eBay ürün fiyatlarını, satıcı metriklerini ve canlı açık artırma tekliflerini kazıma: splashui Wasm testini yerel olarak geçme, ikili JSON-LD ayrıştırma ve sınırsız hücresel CGNAT proxy'leri.
- Wasm doğrulamasını aşma — 403 hatası almak yerine Chrome'un splashui kontrolünü yerel olarak çözmesini sağlayın.
- İkili JSON-LD ve DOM çıkarma — kırılgan div yapılarını ayrıştırmadan standart fiyatları ve 1600px zoom fotoğraflarını çekin.
- Operatör CGNAT itibarı — paylaşılan mobil IP'ler gerçek alıcıları engellemeden topluca yasaklanamaz.
- Sınırsız bant genişliği — gigabayt başına ek ücret ödemeden görsel ağırlıklı ürün galerilerini tarayın.
Gerçek mobil operatör IP havuzları, veri merkezi alt ağ kara listelerini kolayca aşar.
Gigabayt başına bant genişliği ücreti ödemeden binlerce yüksek çözünürlüklü ürün fotoğrafını tarayın.
Genel Bakış: eBay Sayfaları Nasıl Çalışır
eBay ürün verilerini (fiyatlar, satıcı puanları, teknik özellikler ve canlı açık artırma teklifleri) çıkarmak rakip analizi, fiyat takibi ve e-ticaret araştırması için çok önemlidir. Otomatik bir tarayıcıda eBay'e gittiğinizde üç farklı aşama gerçekleşir:
- 1. İlk Güvenlik Kontrolü: eBay, splashui doğrulamasını (uygulama kimliği orch) kullanarak tarayıcı imzanızı denetler. WebAssembly çalıştırma özelliğine sahip orijinal bir tarayıcı bu iş kanıtını iki ila üç saniyede çözer ve otomatik olarak hedef ürüne yönlendirir.
- 2. Arama Sonuç Kartları: Arama sorguları ul.srp-results içinde modüler ürün kartları (li.s-card) döndürür. Sayısal ilan kimliği doğrudan data-listingid içinde veya ürün URL'sinde yer alır.
- 3. Ürün İlan Sayfaları: Ürün sayfaları, teknik özellikler için anlamsal açıklama listelerinin (
- ) yanı sıra arka planda yapılandırılmış schema.org Product JSON-LD içerir.
[ 1. Start Chrome CDP ] ──► [ 2. Search eBay ] ──► [ 3. Extract JSON-LD & DOM ] ──► [ 4. Save CSV/JSON ]
Adım 1: Chrome'u Başlatın ve Playwright'ı Bağlayın (4 Satır)
eBay'in bot algılaması tarafından engellenmekten kaçınmak için uzaktan hata ayıklama etkinleştirilmiş gerçek bir Chrome tarayıcısı başlatın ve ardından Chrome DevTools Protocol (CDP) üzerinden Playwright'ı bağlayın.
1. Chrome'u Uzaktan Hata Ayıklama ile Başlatın
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug
2. Python'u Tarayıcıya Bağlayın
import asyncio
from playwright.async_api import async_playwright
async def get_page():
p = await async_playwright().start()
browser = await p.chromium.connect_over_cdp("http://localhost:9222")
context = browser.contexts[0]
return await context.new_page()
Adım 2: Ürünleri Arayın ve 2 Saniyelik Kontrolü Yönetin
Arama sonuçlarına giderken eBay kısa bir 'Pardon Our Interruption...' ekranı gösterebilir. Gerçek Chrome istemci tarafındaki Argon2 WebAssembly kontrolünü iki saniyede çalıştırır ve otomatik olarak arama sonuçlarına yönlendirir.
async def search_ebay(page, query):
url = f"https://www.ebay.com/sch/i.html?_nkw={query.replace(' ', '+')}"
await page.goto(url, wait_until="load", timeout=45000)
# If the splashui check appears, wait for automatic redirect
if "splashui" in page.url or "Pardon" in await page.title():
print("Waiting for eBay security check to pass...")
await page.wait_for_url(lambda u: "splashui" not in u, timeout=20000)
# Wait until product cards appear
await page.wait_for_selector("li.s-card, li.s-item", timeout=15000)
return await page.content()
Adım 3: Arama Kartlarını Çıkarın (Başlıklar, Fiyatlar ve Fotoğraflar)
Arama sayfasında her ürün bir li.s-card öğesinin içinde yer alır. Sayısal Ürün Kimliği data-listingid veya standart URL'den çıkarılabilir.
import re
from bs4 import BeautifulSoup
def parse_search_cards(html):
soup = BeautifulSoup(html, "html.parser")
cards = soup.select("ul.srp-results > li.s-card, li.s-item")
items = []
for card in cards:
# Extract numeric Item ID from attribute or link
item_id = card.get("data-listingid")
link = card.select_one("a.s-card__link, a[href*='/itm/']")
if not link:
continue
url = link.get("href", "")
if not item_id:
m = re.search(r"/itm/(?:.*?/)?(\d{9,14})", url)
item_id = m.group(1) if m else None
# Filter out sponsored promo cards like 'Shop on eBay'
if not item_id or not item_id.isdigit():
continue
title_el = card.select_one(".s-card__title, [role='heading']")
raw_title = title_el.get_text(strip=True) if title_el else ""
title = re.sub(r"Opens in a new window or tab", "", raw_title, flags=re.I).strip()
price_el = card.select_one(".s-card__price, .s-item__price")
price = price_el.get_text(strip=True) if price_el else ""
img_el = card.select_one("img.s-card__image, img")
img = img_el.get("src") if img_el else ""
items.append({
"id": item_id,
"title": title,
"price": price,
"url": url,
"image": img
})
return items
Adım 4: Ürün Detaylarını Çıkarın (Hemen Al vs Açık Artırma)
Ürün sayfaları iki farklı biçimde gelir: Sabit Fiyat (Hemen Al) ve Açık Artırma.
Seçenek A: Hemen Al İlanı
Katalog fiyatlandırması ve envanter özellikleri için idealdir. Kırılgan görsel işaretlemeyi kazımak yerine eBay'in gömülü JSON-LD Product şemasını çıkarın:
import json
def parse_product_jsonld(html):
soup = BeautifulSoup(html, "html.parser")
for s in soup.find_all("script", type="application/ld+json"):
try:
data = json.loads(s.string)
if data.get("@type") == "Product":
offers = data.get("offers", {})
return {
"title": data.get("name"),
"price": offers.get("price"),
"currency": offers.get("priceCurrency"),
"availability": offers.get("availability", "").split("/")[-1],
"images": [img.get("url") if isinstance(img, dict) else img
for img in data.get("image", [])]
}
except Exception:
continue
return {}
Teknik Özellikleri Çıkarma (- )
RAM, İşlemci, Depolama ve Model gibi teknik özellikler temiz anlamsal açıklama listelerinde bulunur:
def parse_item_specifics(html):
soup = BeautifulSoup(html, "html.parser")
specs = {}
for dl in soup.select(".ux-layout-section-evo dl, dl"):
for dt, dd in zip(dl.find_all("dt"), dl.find_all("dd")):
key = dt.get_text(strip=True).rstrip(":")
val = dd.get_text(strip=True)
if key and val:
specs[key] = val
return specs
Seçenek B: Açık Artırma İlanı (Teklifler ve Geri Sayım Sayacı)
Açık artırmalar için canlı teklif sayılarını, kalan geri sayım süresini ve mevcut kazanan teklifi takip etmeniz gerekir:
def parse_auction_data(html):
soup = BeautifulSoup(html, "html.parser")
full_text = soup.get_text(separator=" ", strip=True)
# 1. Bids count
bids_match = re.search(r"(\d+)\s+bids?", full_text, re.I)
bids = int(bids_match.group(1)) if bids_match else 0
# 2. Time left countdown
time_match = re.search(r"Ends in\s+([\w\s]+?)(?:[A-Z][a-z]+day|\n|$)", full_text)
time_left = time_match.group(1).strip() if time_match else "Ended"
# 3. Current Bid Price
price_el = soup.select_one(".x-price-primary")
current_bid = price_el.get_text(strip=True) if price_el else ""
return {
"is_auction": bids_match is not None,
"current_bid": current_bid,
"bids_count": bids,
"time_left": time_left
}
Adım 5: Çıkarılan Verileri CSV veya JSON Olarak Kaydedin
Tarayıcınız ilanları topladıktan sonra verileri standart csv veya json modülleriyle kaydedin:
import csv
def save_to_csv(products, filename="ebay_products.csv"):
if not products:
return
keys = products[0].keys()
with open(filename, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=keys)
writer.writeheader()
writer.writerows(products)
print(f"Saved {len(products)} products to {filename}")
IP Engellemelerini Önlemek için 3 Pratik Kural
Pazaryerleri istek sıklığını ve alt ağ kökenini izler. Bu üç kural kazıma engellerinin 99%'unu ortadan kaldırır:
| Belirti | Temel Neden | Nasıl Düzeltilir |
|---|---|---|
| Anında HTTP 403 Forbidden Hatası | Sahte/uyumsuz User-Agent dizesi veya TLS parmak izini sabit kodlama | Gerçek Chrome CDP oturumu kullanın; yerel tarayıcı başlıklarını koruyun |
| 'Pardon Our Interruption' Ekranında Takılma | splashui Wasm kanıtı bitmeden sekmeyi kapatma veya başka sayfaya geçme | wait_for_url(lambda u: 'splashui' not in u, timeout=20000) ekleyin |
| 30–50 İstekten Sonra IP Yasağı | Akamai tarafından işaretlenmiş statik veri merkezi IP alt ağlarında kazıma yapma | Trafiği CGNAT özellikli özel 4G/5G mobil proxy'ler üzerinden yönlendirin |
eBay Neden Veri Merkezi IP'lerini Yakar: Mobil CGNAT ve Konut Karşılaştırması
Alt ağ güveni kazımanın sürekliliğinde belirleyici faktördür. eBay gelen trafiği Otonom Sistem Numarasına (ASN) göre izler, bu da proxy mimarisini kritik hale getirir:
| Proxy Türü | IP Güven Puanı | eBay Engelleme Oranı | Fiyatlandırma Modeli | En Uygun Olan |
|---|---|---|---|---|
| Veri Merkezi | Düşük (Sunucu ASN'si) | %80 ila %95 engellenir | Aylık sabit ücret | eBay için uygun değil |
| Konut (Kullanıma Dayalı) | Orta ila Yüksek | Yüzde 10’un altında | GB başına ödeme ($4–$8/GB) | Küçük tek seferlik aramalar |
| Özel 4G/5G Mobil | En Yüksek (Operatör CGNAT) | Yüzde 1’in altında | Aylık sabit (Sınırsız) | Sürekli katalog kazıma |
Fiziksel mobil proxy'ler EE, Vodafone, AT&T ve Movistar gibi büyük hücresel ağlarda Carrier-Grade NAT (CGNAT) üzerinden çalışır. Mobil operatörler her genel IPv4 adresine binlerce meşru telefon atadığından pazaryerleri gerçek akıllı telefon alıcılarını engellemeden operatör alt ağlarını tamamen yasaklayamaz. PXM2, sınırsız bant genişliğine sahip özel 4G ve 5G modemler sağlayarak ürün galerilerini ve fiyat endekslerini gigabayt başına fatura şoku yaşamadan sürekli olarak taramanıza olanak tanır.
eBay Kazıma için Özel Mobil Proxy Edinin
Aktif PXM2 konumları — sınırsız bant genişliği ve isteğe bağlı IP rotasyonu ile izlediğiniz pazarda özel bir 4G/5G modem seçin:
Amerika Birleşik Devletleri
Birleşik Krallık
Fransa
Sık Sorulan Sorular
eBay neden HTTP 403 veya "Pardon Our Interruption" döndürür?
eBay, ürün kataloğunu Argon2 WebAssembly iş kanıtı hesaplamaları yapan splashui (uygulama kimliği orch) adlı bir ara hizmetle korur. requests veya curl gibi saf HTTP kütüphaneleri WebAssembly çalıştıramaz ve 403 alır. CDP üzerinden gerçek bir tarayıcı çalıştırmak testi 2-3 saniyede çözer ve otomatik olarak hedef ürüne yönlendirir.
Başsız tarayıcı olmadan eBay verilerini kazıyabilir miyim?
Yalnızca harici bir doğrulama çözen proxy kullanıyorsanız veya önceden doğrulanmış oturum belirteçleri oluşturduysanız mümkündür. Kendi barındırdığınız hatlar için Playwright'ı CDP üzerinden kalıcı bir Chrome örneğine bağlamak, gerçek tarayıcı TLS imzalarını ve yerel V8 yürütmesini koruduğu için en güvenilir mimaridir.
Ürün durumunu ve teknik özelliklerini güvenilir şekilde nasıl çıkarabilirim?
Ürün durumunu, koşulları UsedCondition, NewCondition veya RefurbishedCondition gibi standart değerlere dönüştüren yerleşik schema.org Product JSON-LD bloğundan (offers.itemCondition) çıkarın. Teknik özellikler ürün düzeni bölümündeki anlamsal açıklama listelerinde (<dl><dt><dd>) bulunur.
eBay Browse API ile web kazıma arasındaki fark nedir?
Resmi Browse API, katalog senkronizasyonu, sipariş yönetimi ve kimliği doğrulanmış mağaza işlemleri için idealdir ancak günlük istek limitleri taşır ve onay gerektirir. Web kazıma, yerelleştirilmiş kargo tahminleri, aktif satıcı promosyonları ve açık artırma sayaçları dahil olmak üzere gerçek zamanlı, oturum açmamış misafir alıcı görünümünü sağlar.
Yüksek hacimli taramalarda eBay IP yasaklarını nasıl önleyebilirim?
İş parçacığı başına istek aralıklarını 1.5 ile 3.0 saniye arasında tutun, User-Agent bilginizin tarayıcı motoru sürümüyle tam eşleştiğinden emin olun ve trafiği özel 4G veya 5G mobil proxy'ler üzerinden yönlendirin. Mobil operatör IP'leri CGNAT üzerinden binlerce telefon tarafından paylaşıldığından eBay bunları toptan yasaklamaz.
İlgili Mobil Proxy Kılavuzları
eBay kazıma yalnızca bir alandır; kümenin geri kalanı bunun altındaki teknik temelleri kapsar.
Web veri toplama kılavuzları
Temel mobil proxy kılavuzları
Alt Ağ Yasakları Olmadan eBay Kataloglarını Kazıyın
Gerçek operatör CGNAT güvenine sahip özel 4G/5G mobil modemler, isteğe bağlı IP rotasyonu ve ürün görseli taramaları için sınırsız bant genişliği.
Özel Bir Mobil Proxy Alın