# Jak zeskrobać dane produktów Amazon na dużą skalę w Pythonie

Trzy-liniowy tutorial BeautifulSoup działa raz, a potem Amazon podaje Ci CAPTCHA. Oto, co faktycznie psuje się na dużą skalę — zmieniające się selektory cen, geo-ceny, blokady IP — i pipeline, który to przetrwa.

Skrobanie danych produktów Amazon wygląda trywialnie w każdym początkującym tutorialu: `requests`, BeautifulSoup, pobierz tytuł i cenę, gotowe. To działa dokładnie do momentu, gdy uruchomisz to kilkaset razy, a wtedy Amazon podaje Ci stronę z weryfikacją robotów, a Twój selektor cen zwraca `None`. Ten przewodnik dotyczy wersji, która przetrwa kontakt z prawdziwą stroną — pipeline'u ASIN-first, selektorów, które faktycznie się psują, dlaczego ten sam produkt pokazuje inną cenę dla różnych IP, oraz konfiguracji proxy, która trzyma Cię z dala od ściany CAPTCHA. Chodzi o publiczne dane produktów (tytuły, ceny, oceny, dostępność), a nie o cokolwiek za logowaniem.

## Struktura URL: ASIN-y są kluczem

Każdy produkt Amazon ma ASIN — 10-znakowy identyfikator jak `B08N5WRWNW` — i cały katalog się na nim opiera. Strona produktu to po prostu `https://www.amazon.com/dp/<ASIN>`, a ten sam ASIN jest mapowany w różnych rynkach (`amazon.co.uk/dp/<ASIN>`, `amazon.de/dp/<ASIN>`). Strony wyszukiwania i kategorii znajdują się pod `/s?` z parametrami zapytań i węzłów przeglądania. Tak więc skalowalny pipeline ma dwa etapy: odkryj ASIN-y z wyszukiwania lub stron bestsellerów, a następnie uzupełnij każdy z nich z jego strony `/dp/`. Jedno zastrzeżenie — "nadrzędny" ASIN (produkt z wariantami rozmiaru lub koloru) rozwiązuje się do automatycznie wybranego wariantu dziecka, więc uchwyć wariant ASIN, na który faktycznie trafiłeś.

```python
import requests
from bs4 import BeautifulSoup

PROXY = "http://USER:PASS@residentialpremium.quantumproxies.io:8080"
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
           "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
           "Accept-Language": "en-US,en;q=0.9"}

def product(asin, domain="com"):
    url = f"https://www.amazon.{domain}/dp/{asin}"
    r = requests.get(url, headers=HEADERS,
                     proxies={"http": PROXY, "https": PROXY}, timeout=20)
    soup = BeautifulSoup(r.text, "html.parser")
    return parse(soup, asin)
```

## Selekcjoner, który wszyscy kopiują, a Amazon wycofał

Prawie każdy stary tutorial odczytuje cenę z `span#priceblock_ourprice`. Amazon serwuje wiele układów bloków cenowych i testuje je A/B, więc ten pojedynczy ID jest pusty na większości stron dzisiaj. Trwałe podejście to próba kilku znanych kontenerów cenowych w kolejności i przyjęcie pierwszego, który pasuje — oraz traktowanie brakującej ceny jako rzeczywistego stanu (zwykle brak w magazynie), a nie awarii.

```python
def parse(soup, asin):
    title = soup.select_one("#productTitle")
    price = None
    for sel in ["span.a-price span.a-offscreen",   # current layout
                "#priceblock_ourprice",             # legacy
                "#priceblock_dealprice",            # deal layout
                "#corePrice_feature_div .a-offscreen"]:
        el = soup.select_one(sel)
        if el and el.get_text(strip=True):
            price = el.get_text(strip=True)
            break
    rating = soup.select_one("span.a-icon-alt")
    return {
        "asin": asin,
        "title": title.get_text(strip=True) if title else None,
        "price": price,                 # None -> likely out of stock
        "rating": rating.get_text(strip=True) if rating else None,
    }
```

![Pipeline Amazon oparty na ASIN w pięciu krokach: strony wyszukiwania i bestsellerów, zdeduplikowana lista ASIN-ów, IP wyjściowe przypięte do rynku docelowego, każda strona /dp/ hydratowana w celu odczytania tytułu, ceny i oceny, a potem płaskie wiersze CSV; karta pokazuje schemat wiersza, w którym domena marketplace jest zapisywana w każdym wierszu.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335159/blog/generated/qp-b9-021-diag1.png)
*Odkryj ASIN-y z wyszukiwania, uzupełnij każdy z jego strony /dp/, i przypnij wyjściowe IP do rynku, którego cenę chcesz.*

## Dlaczego ten sam produkt pokazuje dwie ceny

To jest fakt, który cicho niszczy zestawy danych cenowych. Amazon lokalizuje cenę i dostępność do miejsca dostawy kupującego — ustawienie "Dostarcz do" — które w dużej mierze wywnioskowuje z Twojego IP. Zeskrob `amazon.com` z niemieckiego IP centrum danych i możesz otrzymać ceny w euro, inne oferty lub innego zwycięzcę Buy Box niż widzi kupujący z USA. Jeśli zbierasz [dane cen konkurencyjnych](https://quantumproxies.io/blog/competitor-price-monitoring-with-proxies), geografia wyjściowego IP *jest* eksperymentem: aby uchwycić cenę, którą widzi kupujący z USA, przeprowadzasz przez amerykańskie [proxy rezydencjalne](https://quantumproxies.io/residential-proxies); dla rynku UK, wyjście UK. Jeden produkt, wiele cen, jedna na każdy rynek, który próbkujesz.

[Zdobądź geo-targetowane proxy rezydencjalne](https://quantumproxies.io/residential-proxies)

## Dlaczego naiwne skrobaki są blokowane

Amazon uruchamia zautomatyzowane systemy zarządzania żądaniami: zbyt szybki wybuch z jednego IP i otrzymujesz CAPTCHA, blokadę IP lub okrojoną stronę. Trzy rzeczy utrzymują skrobak przy życiu na dużą skalę. Po pierwsze, rotuj IP, aby żaden pojedynczy adres nie niósł całego obciążenia — rotacyjna pula rezydencjalna rozkłada żądania na wiele prawdziwych IP konsumenckich. Po drugie, zachowaj tempo: losowe opóźnienia i limit współbieżności, a nie płaską pętlę. Po trzecie, wysyłaj spójne nagłówki — prawdziwy User-Agent przeglądarki i `Accept-Language`, a nie domyślny ciąg Pythona. Gdy strona wraca podejrzanie krótka lub zawiera marker weryfikacji robotów, odrzuć ją i spróbuj ponownie na świeżym IP zamiast analizować śmieci.

```python
import time, random

def fetch_many(asins, domain="com"):
    rows = []
    for asin in asins:
        for attempt in range(3):
            data = product(asin, domain)
            if data["title"]:            # got a real page
                rows.append(data)
                break
            time.sleep(1.5 + random.random())  # back off, rotate, retry
        time.sleep(random.uniform(1, 3))         # pace between products
    return rows
```

## Wyszukiwanie, bestsellery i paginacja

Strony produktów to szczegóły; strony wyszukiwania i bestsellerów to sposób, w jaki odkrywasz, co pobrać. Wyszukiwanie słów kluczowych to `/s?k=<query>&page=<n>`; bestsellery są powiązane z węzłami przeglądania kategorii. Przejdź przez strony, wyciągnij ASIN-y z każdej karty wyników, a następnie wprowadź je do etapu produktu powyżej. Trzymaj te dwa etapy oddzielnie — pozwala to na deduplikację ASIN-ów, wznowienie crawl, i ponowne wycenienie znanej listy ASIN-ów według harmonogramu bez ponownego odkrywania jej przy każdym uruchomieniu. Dla szerszej budowy, nasz przewodnik po [najlepszych proxy do skrobania sieci](https://quantumproxies.io/blog/best-proxies-for-web-scraping) obejmuje stronę puli tego.

Dla samego wyjścia, utrzymuj schemat wiersza płaski i stabilny: `asin`, źródłowy `url`, `title`, `price`, `rating`, liczba recenzji, `image_url` i domena `marketplace`, z której pobrano. Zapisz domenę w każdym wierszu, aby mieszany zestaw danych rynkowych nigdy nie mylił ceny US z ceną UK. Uchwyć ASIN nawet wtedy, gdy cena jest pusta — odczyt braku w magazynie to punkt danych, a nie luka, a śledzenie, kiedy produkt wypada i wraca do magazynu, jest często tak samo wartościowe jak cena. Plik CSV lub tabela bazy danych z tymi kolumnami wpasowuje się czysto w śledzenie cen, alerty dostępności lub badanie Buy Box bez dalszego przekształcania.

![Strona produktu Amazon z zaznaczonymi miejscami, w których naiwny scraper się psuje: stary identyfikator priceblock_ourprice jest pusty, cena i waluta zależą od geolokalizacji IP, kod 200 może oznaczać stronę robot-check, a serie z jednego IP kończą się banem; karta podaje rozwiązanie dla każdego problemu, od kilku selektorów ceny po rotację z losowymi opóźnieniami.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335159/blog/generated/qp-b9-021-diag2.png)
*Prawie każda awaria skrobania Amazon to jedna z tych pięciu — i każda ma konkretne rozwiązanie.*

## Proxy vs API do skrobania: kiedy się przełączyć

Ręcznie napisane `requests` plus dobra pula rezydencjalna to właściwy wybór, gdy kontrolujesz wolumen, a cel pozostaje współpracujący. Gdy utrzymujesz rotacyjne selektory, obsługę CAPTCHA, przypinanie geolokalizacji i logikę ponownych prób dla tysięcy ASIN-ów dziennie, to utrzymanie staje się pracą. [Scraper API](https://quantumproxies.io/scraper-api) to upraszcza: wyślij URL Amazon, otrzymaj z powrotem uporządkowane dane produktu z rotacją, renderowaniem i geolokalizacją obsłużoną za Ciebie. Uczciwa zasada — DIY, gdy tarcie jest niskie, przełącz się, gdy utrzymanie anty-botów kosztuje więcej czasu inżynierskiego niż dane są warte. Nasze [porównanie budowy vs zakupu](https://quantumproxies.io/blog/build-vs-buy-scraping-infrastructure) przedstawia liczby na tej linii.

## Najczęściej zadawane pytania

### Jak zeskrobać dane produktów Amazon za pomocą Pythona?

Pobierz stronę produktu pod `/dp/<ASIN>` za pomocą `requests` i prawdziwego User-Agent przeglądarki, a następnie przeanalizuj tytuł, cenę, ocenę i dostępność za pomocą BeautifulSoup. Wypróbuj kilka selektorów cen, a nie tylko wycofany `priceblock_ourprice`. Przeprowadź przez rotacyjne proxy rezydencjalne, aby wybuchy nie wywoływały blokady, i przypnij wyjściową geolokalizację do rynku, którego ceny chcesz.

### Czy skrobanie danych produktów Amazon jest legalne?

Zbieranie publicznie widocznych danych produktów — tytułów, cen, ocen — jest zazwyczaj traktowane inaczej niż omijanie logowań czy kopiowanie chronionych treści, ale warunki Amazon ograniczają zautomatyzowany dostęp, a obraz prawny różni się w zależności od jurysdykcji i zastosowania. To ogólna informacja, a nie porada prawna: skrob tylko publiczne dane, respektuj limity szybkości i uzyskaj poradę prawną dla czegokolwiek komercyjnego lub na granicy.

### Dlaczego mój skrobak Amazon otrzymuje inną cenę niż strona internetowa?

Amazon lokalizuje ceny i dostępność do miejsca dostawy, które wywnioskowuje z Twojego IP. Jeśli Twoje proxy wychodzi w innym kraju niż rynek, który studiujesz, zobaczysz złą walutę i oferty. Przypnij wyjściowe IP do docelowego rynku — amerykańskie IP rezydencjalne dla cen US, brytyjskie IP dla cen UK — aby dane odpowiadały temu, co widzi prawdziwy kupujący tam.

### Jak uniknąć zablokowania podczas skrobania Amazon?

Rotuj między wieloma IP rezydencjalnymi, aby żaden pojedynczy adres nie niósł obciążenia, ograniczaj z losowymi opóźnieniami i limitem współbieżności, i wysyłaj spójne nagłówki przeglądarki. Waliduj każdą odpowiedź — 200 może nadal być stroną z weryfikacją robotów — i ponawiaj próbę na świeżym IP zamiast analizować zablokowaną. Przy dużej skali, Scraper API obsługuje to wszystko za Ciebie.

Amazon na dużą skalę nie jest trudny, ponieważ parsowanie jest trudne — jest trudny, ponieważ strona walczy z tobą, a cena zależy od tego, gdzie stoisz. Buduj ASIN-first, dopasuj kilka kontenerów cenowych, przypnij swoją geolokalizację, rotuj swoje IP i traktuj krótką odpowiedź jako blokadę, a nie dane. Zrób to dobrze, a tutorial dla początkujących w końcu się skaluje.

[Zeskrobuj Amazon za pomocą QuantumProxies Scraper API](https://quantumproxies.io/scraper-api)
