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ś.
import requests
from bs4 import BeautifulSoup
PROXY = "http://USER:PASS@gate.quantumproxies.io:8000"
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.
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,
}

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, geografia wyjściowego IP jest eksperymentem: aby uchwycić cenę, którą widzi kupujący z USA, przeprowadzasz przez amerykańskie proxy rezydencjalne; 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
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.
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 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.

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 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 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.