Jak zeskrobać dane z aukcji i sprzedaży na eBay na potrzeby badań cenowych

Historia sprzedanych aukcji na eBay to najbliższa rzecz do darmowej bazy danych cen rynkowych — jeśli znasz dwa parametry URL, które ją odblokowują. Oto jak zeskrobać aukcje, warianty i rzeczywiste ceny transakcji na dużą skalę.

eBay jest jednym z największych rynków peer-to-peer w sieci, co czyni go kopalnią złota dla badań cenowych, śledzenia konkurencji i wyceny odsprzedaży. Posiada oficjalny SDK dla deweloperów, ale najważniejsze dane — za ile przedmioty faktycznie się sprzedały — najłatwiej zebrać bezpośrednio z publicznych stron wyszukiwania. Ten przewodnik pokazuje, jak zeskrobać aukcje eBay, dane wariantów i rzeczywiste ceny sprzedaży, plus konfigurację proxy, która utrzymuje skrobak przy życiu po pierwszych kilkuset żądaniach.

URL wyszukiwania jest API

Kiedy wyszukujesz na eBay, zapytanie jest całkowicie zakodowane w URL, a garść parametrów kontroluje dokładnie, co wraca. Opanuj te pięć, a możesz programowo sterować katalogiem eBay bez dotykania przeglądarki:

Parametr sortowania _sop zasługuje na wzmiankę: jego wartości porządkują wyniki według nowo wystawionych, najniższej całkowitej ceny z wysyłką lub kończących się wkrótce, co pozwala kształtować ukierunkowane kanały — najnowsze aukcje do monitorowania zmian, najtańsze całkowite do wyszukiwania okazji. Ograniczenie za pomocą _sacat zawęża szerokie słowo kluczowe do odpowiedniego działu, usuwając szum, zanim przeanalizujesz pojedynczy wiersz. Słowo kluczowe, kategoria i sortowanie razem pozwalają wyrazić większość zapytań badawczych jako pojedynczy URL, co sprawia, że automatyzacja eBay jest przyjemna.

import requests
from urllib.parse import urlencode

proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}

def search_url(keyword, page=1, per_page=60, category=0):
    params = {"_nkw": keyword, "_sacat": category,
              "_ipg": per_page, "_pgn": page}
    return "https://www.ebay.com/sch/i.html?" + urlencode(params)

r = requests.get(search_url("vintage seiko watch"),
                 proxies=proxies, timeout=20)
print(r.status_code)  # parse r.text with your HTML library of choice
Schemat rurociągu skrobania eBay: zbuduj URL wyszukiwania z parametrów, pobierz przez proxy rezydencyjne, przeanalizuj aukcję i zapisz wiersze
Publiczna strona wyszukiwania eBay zachowuje się jak API — parametry to zapytanie, a znacznik to odpowiedź.

Sprzedane i zakończone aukcje: rzeczywista cena rynkowa

To jest punkt końcowy, który ma znaczenie dla wyceny. Aktywne aukcje mówią tylko, co sprzedawcy mają nadzieję uzyskać; wiele nigdy się nie sprzedaje. eBay ujawnia rzeczywistą historię transakcji na tej samej stronie wyszukiwania za pomocą dwóch dodatkowych parametrów: LH_Complete=1 pokazuje wszystkie zakończone aukcje, a LH_Sold=1 zawęża do przedmiotów, które faktycznie się sprzedały. Na sprzedanej aukcji cena to ostateczna wartość sprzedaży, a nie cena wywoławcza — co czyni to najczystszym darmowym źródłem rzeczywistej wartości rzeczy:

def sold_url(keyword, page=1):
    # append the completed + sold filters to any search
    return ("https://www.ebay.com/sch/i.html?"
            f"_nkw={keyword.replace(' ', '+')}"
            "&LH_Complete=1&LH_Sold=1"
            f"&_ipg=60&_pgn={page}")

# every sold row = a real transaction: use median, not mean,
# to shrug off outliers and shill bids
r = requests.get(sold_url("nike dunk low panda 10"),
                 proxies=proxies, timeout=20)

Ponieważ strona sprzedanych używa tego samego znacznika co standardowe wyszukiwanie, twój parser listy obsługuje ją bez zmian — po prostu dodajesz dwa filtry. Weź medianę z ostatnich 30-60 sprzedanych cen zamiast średniej, a uzyskasz solidną wartość rynkową, której mogą zaufać procesy monitorowania cen konkurencji.

Analizowanie aukcji: cena, specyfika i warianty

Aukcja z jednym wariantem jest prosta: cena znajduje się w głównym elemencie ceny, tabela specyfikacji przedmiotu (stan, marka, model, rozmiar) to zestaw par etykieta/wartość, a opis znajduje się w iframe, który można pobrać osobno. Uważaj na regionalną konwersję cen eBay — niektóre regiony otrzymują przeliczoną cenę obok oryginalnej, więc uchwyć obie.

Produkty z wieloma wariantami (telefon z opcjami modelu, pamięci i koloru) są trudniejsze, ponieważ ceny za opcję są aktualizowane przez JavaScript. Te dane nie znajdują się w widocznym HTML — są to ukryte dane sieciowe, przechowywane w zmiennej JavaScript o nazwie MSKU wewnątrz tagu <script>. Wyodrębnij ten JSON, a uzyskasz cenę i stan każdego wariantu za jednym razem, bez renderowania strony:

import re, json

def extract_msku(html):
    # the variant matrix lives in a JS object keyed 'MSKU'
    m = re.search(r'"MSKU"\s*:\s*(\{.*?\})\s*[,}]', html, re.S)
    if not m:
        return {}          # single-variant listing, no matrix
    data = json.loads(m.group(1))
    # data now holds per-variant price, currency and stock flags
    return data

variants = extract_msku(r.text)
Porównanie pokazujące aktywne aukcje eBay jako ceny wywoławcze w porównaniu do sprzedanych aukcji jako rzeczywiste ceny transakcji
Dla wyceny zawsze zeskrobuj filtr sprzedanych: aktywne ceny to życzenia, ceny sprzedane to rynek.

Pozostanie niezablokowanym na dużą skalę

Jedna aukcja to drobiazg. Skala to miejsce, gdzie eBay stawia opór — z ograniczeniami szybkości, wyzwaniami CAPTCHA i dynamiczną zawartością, która oznacza wzorce automatyczne. IP z centrów danych są szybko ograniczane na rynkach; niezawodnym rozwiązaniem są proxy rezydencyjne, które prezentują się jako zwykli kupujący, rotowane, aby żadne pojedyncze IP nie zgromadziło oczywistego wybuchu. Zrób przerwy między żądaniami, respektuj każde 429 z wycofaniem i lokalizuj swoje wyjście, gdy potrzebujesz cen specyficznych dla regionu, ponieważ eBay dostosowuje wyniki i walutę według geografii.

Kiedy cel dodaje cięższe zarządzanie botami lub wolisz nie utrzymywać stosu analizy i rotacji samodzielnie, Scraper API obsługuje rotację IP, renderowanie JS i ponowne próby za jednym punktem końcowym i zwraca czysty HTML, JSON lub markdown. Dla szerszego przewodnika po rynku, nasz przewodnik na temat automatyzacji rynku na Amazon, eBay i Etsy obejmuje bezpieczeństwo konta i geotargetowanie.

Zeskrobuj eBay z czystymi proxy rezydencyjnymi

Od skrobania do zestawu danych

Gdy wiersze płyną, dyscyplina to deduplikacja i historia. Kluczuj każdy rekord według jego identyfikatora przedmiotu eBay, aby ponowne skrobanie aktualizowało istniejący wiersz zamiast go duplikować, i zapisuj cenę z sygnaturą czasową i stanem przedmiotu przy każdym pobraniu — cena sprzedaży ma znaczenie tylko w kontekście daty i tego, czy przedmiot był nowy czy używany. Utrzymuj ruchome okno ostatnich danych sprzedaży na produkt i masz na żywo wycenę, która sama się odświeża, co jest podstawą każdego narzędzia do odsprzedaży, repricingu lub arbitrażu. Połącz to z alertami na nagłe ruchy cen, a zestaw danych zaczyna samodzielnie monitorować.

Czy skrobanie eBay jest legalne?

To ogólna informacja, nie porada prawna. Zbieranie publicznie dostępnych danych z aukcji — cen, stanów, historii sprzedaży — w rozsądnych ilościach jest powszechnie traktowane jako legalne. Granica, na którą należy uważać, to dane osobowe: imiona sprzedawców, lokalizacje i dane kontaktowe są chronione przez RODO w UE i podobne przepisy gdzie indziej, więc unikaj ich przechowywania bez uzasadnionej podstawy prawnej. Skrob sygnał rynkowy, nie ludzi.

Często zadawane pytania

Jak zeskrobać sprzedane aukcje eBay?

Weź dowolny URL wyszukiwania eBay i dodaj LH_Complete=1&LH_Sold=1. To przełącza wyniki na zakończone aukcje, które faktycznie się sprzedały, gdzie wyświetlana cena to ostateczna wartość transakcji. Strona używa tego samego znacznika co normalne wyszukiwanie, więc ten sam parser wyodrębnia tytuł, cenę i datę sprzedaży na potrzeby badań cenowych.

Czy mogę zeskrobać ceny eBay bez oficjalnego API?

Tak. Publiczne strony wyszukiwania i aukcji zwracają wszystko, co widzi kupujący, bez limitu ani OAuth. Parametry wyszukiwania (_nkw, _sacat, _pgn, _ipg) sterują zapytaniami i paginacją, a strony produktów zawierają cenę, specyfikację przedmiotu i dane wariantów. Będziesz potrzebować rotujących proxy rezydencyjnych, aby utrzymać wolumen bez ograniczeń szybkości.

Jak uzyskać ceny wariantów eBay?

Aukcje z wieloma opcjami przechowują ceny i stany dla każdego wariantu w obiekcie JavaScript o nazwie MSKU osadzonym w tagu skryptu, a nie w widocznym HTML. Wyodrębnij ten blok JSON, a uzyskasz cenę każdej kombinacji bez renderowania strony lub klikania każdej opcji — znacznie szybciej i bardziej niezawodnie niż sterowanie przeglądarką.

Dlaczego mój skrobak eBay jest blokowany?

eBay stosuje ograniczenia szybkości i wyzwania CAPTCHA do ruchu, który wygląda na automatyczny, a zakresy IP z centrów danych są szybko ograniczane. Rozłóż żądania na rotujące IP rezydencyjne, rób przerwy z opóźnieniami, wycofaj się przy każdym 429 i utrzymuj spójne nagłówki. Jeśli wyzwania się utrzymują, Scraper API, który rotuje IP i renderuje JavaScript, usuwa ciężar utrzymania.

Zeskrob stronę wyszukiwania jak API, odblokuj historię sprzedaży za pomocą dwóch parametrów, wydobądź macierze wariantów z osadzonego JSON i przekieruj to wszystko przez czyste IP rezydencyjne. Zrób to, a eBay stanie się na żywo zestawem danych cenowych, który kontrolujesz.

Wyodrębnij dane z eBay bez zarządzania stosem