Dlaczego Scrape Amazon Product Data?
Amazon przechowuje ponad 350 mln produktów na wielu rynkach na całym świecie. Dla przedsiębiorstw handlu elektronicznego dane te są nieocenione: ceny konkurencyjne, opisy produktów, recenzje klientów, ranking najlepszych sprzedawców i sygnały inwentaryzacyjne mogą prowadzić do mądrzejszych decyzji. Czy budujesz narzędzie monitorowania cenDane dotyczące produktu Amazon są jednym z najwyższych wartości docelowych w sieci.
Wyzwaniem jest to, że Amazon inwestuje mocno w anty-bot obrony. Bez właściwej strategii proxy, Twoje scratpers trafi CAPTCHA, bloki IP, i mylące odpowiedzi w ciągu kilku minut. Ten przewodnik prowadzi Cię przez architekturę, kod i konfigurację proxy potrzebne do skrobania Amazon niezawodnie w skali.
Amazon 's Anti- Bot Protections
Zanim napiszesz jedną linię kodu, musisz zrozumieć, z czym masz do czynienia. Amazon stosuje warstwowy system wykrywania, który analizuje każde przychodzące żądanie.
Prośba o wydruk palca
Amazon sprawdza nagłówki HTTP, odciski palców TLS i prosi o zamówienie. Żądania brakujących standardowych nagłówków przeglądarki lub przy użyciu znanych podpisów bot są oznakowane natychmiast. W Accept-Language, Accept-Encodingoraz User-Agent nagłówki muszą być spójne i realistyczne.
Analiza behawioralna
Wnioski przychodzące w tempie, którego żaden człowiek nie mógł osiągnąć, lub zgodnie z przewidywalnymi wzorami (np. sekwencyjne ASIN), ograniczają szybkość wyzwalania. Amazon śledzi zachowania sesyjne w wielu próbach, więc każdy IP musi zachowywać się jak prawdziwy klient.
Wyzwania CAPTCHA
W przypadku gdy Amazon podejrzewa zautomatyzowany ruch, zamiast danych o produktach obsługuje stronę CAPTCHA. W związku z tym Komisja stwierdza, że spółka LuxOpCo nie jest przedsiębiorstwem powiązanym z Amazonem. Aby przyjrzeć się bliżej metodom wykrywania, zobacz nasz przewodnik na jak systemy anty-bot wykrywają proxy.
Kluczowe podejście: Proxy mieszkaniowe z prawidłową rotacją są niezbędne do długotrwałego skrobania Amazon. Proxy Datacenter zostaną zablokowane w ciągu kilku godzin.
Dane można wyodrębnić z Amazon
| Punkt danych | Strona źródłowa | Use Case |
|---|---|---|
| Nazwa produktu, zdjęcia, opis | Strona szczegółowa produktu | Tworzenie katalogów, analiza treści |
| Bieżąca cena, cena transakcji, cena listy | Szczegółowy opis / wykaz ofert | Monitorowanie cen, przeszacowanie cen |
| Opinie i oceny klientów | Strony przeglądowe | Analiza sentymentów, badania produktów |
| Best Sellers Rank (BSR) | Strona szczegółowa produktu | Szacowanie popytu na rynku |
| Kup Box sprzedawca, informacje wysyłki | Strona szczegółowa produktu | Śledzenie konkurentów |
| Ranking wyników wyszukiwania | Strona wyników wyszukiwania | SEO i optymalizacja reklamy |
| Hierarchia kategorii | Przeglądanie węzłów | Mapowanie taksonomiczne |
Ustawienie konfiguracji proxy
Brama proxyHat proxy zapewnia różnorodność IP i geocelowanie potrzebne do scrating Amazon. Podłącz się przez naszą bramę i obróć IP automatycznie na każde żądanie lub w razie potrzeby utrzymuj lepkie sesje.
Podstawowe połączenie
# HTTP proxy
http://USERNAME:PASSWORD@gate.proxyhat.com:8080
# With geo-targeting (US Amazon)
http://USERNAME-country-US:PASSWORD@gate.proxyhat.com:8080
# With sticky session (maintain same IP for a browsing session)
http://USERNAME-session-amz001:PASSWORD@gate.proxyhat.com:8080W przypadku skanowania Amazonek zalecamy obranie za cel kraju pasującego do rynku, na którym się znajdujesz. Drapanie amazon.de? Użyj niemieckich IP. Użyj japońskich IP. Sprawdź dostępne lokalizacje dla pełnej listy.
Wdrażanie Pythona
Oto kompletny procesor Python dla danych Amazon produktów za pomocą Python SDK ProxyHat wraz z życzeniami i zupą.
Roszpunka produktu podstawowego
import requests
from bs4 import BeautifulSoup
import random
import time
import json
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
]
def get_amazon_product(asin, marketplace="com"):
"""Scrape product data from Amazon by ASIN."""
url = f"https://www.amazon.{marketplace}/dp/{asin}"
headers = {
"User-Agent": random.choice(USER_AGENTS),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
}
proxies = {
"http": PROXY_URL,
"https": PROXY_URL,
}
response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
if response.status_code != 200:
return None
soup = BeautifulSoup(response.text, "html.parser")
product = {
"asin": asin,
"title": extract_title(soup),
"price": extract_price(soup),
"rating": extract_rating(soup),
"review_count": extract_review_count(soup),
"bsr": extract_bsr(soup),
"availability": extract_availability(soup),
}
return product
def extract_title(soup):
el = soup.find("span", {"id": "productTitle"})
return el.get_text(strip=True) if el else None
def extract_price(soup):
el = soup.find("span", {"class": "a-price-whole"})
if el:
fraction = soup.find("span", {"class": "a-price-fraction"})
price = el.get_text(strip=True).rstrip(".")
if fraction:
price += "." + fraction.get_text(strip=True)
return price
return None
def extract_rating(soup):
el = soup.find("span", {"class": "a-icon-alt"})
if el and "out of" in el.get_text():
return el.get_text(strip=True).split(" ")[0]
return None
def extract_review_count(soup):
el = soup.find("span", {"id": "acrCustomerReviewCount"})
return el.get_text(strip=True) if el else None
def extract_bsr(soup):
el = soup.find("th", string=lambda t: t and "Best Sellers Rank" in t)
if el:
return el.find_next("td").get_text(strip=True)
return None
def extract_availability(soup):
el = soup.find("div", {"id": "availability"})
return el.get_text(strip=True) if el else None
# Example usage
if __name__ == "__main__":
asins = ["B0CHX3QBCH", "B0D5BKRY4R", "B0CRMZHDG7"]
for asin in asins:
product = get_amazon_product(asin)
if product:
print(json.dumps(product, indent=2))
time.sleep(random.uniform(2, 5)) # Random delay between requestsObsługa pagnacji dla wyników wyszukiwania
def scrape_search_results(keyword, max_pages=5):
"""Scrape Amazon search results with pagination."""
results = []
for page in range(1, max_pages + 1):
url = f"https://www.amazon.com/s?k={keyword}&page={page}"
headers = {
"User-Agent": random.choice(USER_AGENTS),
"Accept-Language": "en-US,en;q=0.9",
}
proxies = {"http": PROXY_URL, "https": PROXY_URL}
response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
if response.status_code != 200:
print(f"Page {page}: status {response.status_code}")
break
soup = BeautifulSoup(response.text, "html.parser")
items = soup.find_all("div", {"data-component-type": "s-search-result"})
for item in items:
asin = item.get("data-asin", "")
title_el = item.find("h2")
price_el = item.find("span", {"class": "a-price-whole"})
results.append({
"asin": asin,
"title": title_el.get_text(strip=True) if title_el else None,
"price": price_el.get_text(strip=True) if price_el else None,
"page": page,
})
time.sleep(random.uniform(3, 7))
return resultsWdrażanie Node.js
Dla projektów Node.js, wykorzystanie Węzeł ProxyHat SDK z cheerio do parsowania.
const axios = require("axios");
const cheerio = require("cheerio");
const { HttpsProxyAgent } = require("https-proxy-agent");
const PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080";
const agent = new HttpsProxyAgent(PROXY_URL);
const USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
];
async function scrapeProduct(asin, marketplace = "com") {
const url = `https://www.amazon.${marketplace}/dp/${asin}`;
const { data } = await axios.get(url, {
httpsAgent: agent,
headers: {
"User-Agent": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],
"Accept-Language": "en-US,en;q=0.9",
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
},
timeout: 30000,
});
const $ = cheerio.load(data);
return {
asin,
title: $("#productTitle").text().trim() || null,
price: $(".a-price-whole").first().text().trim() || null,
rating: $(".a-icon-alt").first().text().trim().split(" ")[0] || null,
reviewCount: $("#acrCustomerReviewCount").text().trim() || null,
availability: $("#availability").text().trim() || null,
};
}
async function scrapeMultiple(asins) {
const results = [];
for (const asin of asins) {
try {
const product = await scrapeProduct(asin);
results.push(product);
console.log(`Scraped: ${product.title}`);
} catch (err) {
console.error(`Failed ${asin}: ${err.message}`);
}
// Random delay 2-5 seconds
await new Promise((r) => setTimeout(r, 2000 + Math.random() * 3000));
}
return results;
}
// Usage
scrapeMultiple(["B0CHX3QBCH", "B0D5BKRY4R"]).then((results) => {
console.log(JSON.stringify(results, null, 2));
});Proxy strategie rotacji dla Amazon
Wykrywanie Amazon staje się bardziej agresywne, im więcej wniosków pochodzi z jednego IP. Oto strategie rotacji, które najlepiej działają.
Per- Request Rotation
W przypadku przeglądów produktów masowych, w których każde żądanie jest niezależne, należy obrócić IP na każde żądanie. Jest to domyślne zachowanie z bramą ProxyHat: każde nowe połączenie otrzymuje świeży adres IP.
Obrót oparty na sesjach
Podczas zeskrobywania wyników wyszukiwania na wielu stronach, zachować ten sam IP dla całej sesji. Zmiana strony pośredniej IP wygląda podejrzanie dla Amazonki. Użyj lepkich sesji ProxyHat:
# Maintain same IP for up to 10 minutes
http://USERNAME-session-search001:PASSWORD@gate.proxyhat.com:8080Rotacja ukierunkowana na cele geograficzne
Dopasuj swoją lokalizację proxy do rynku Amazon. Dostęp do Amazon.de z amerykańskiego IP podnosi flagi. Kraje docelowe:
# German IPs for amazon.de
http://USERNAME-country-DE:PASSWORD@gate.proxyhat.com:8080
# Japanese IPs for amazon.co.jp
http://USERNAME-country-JP:PASSWORD@gate.proxyhat.com:8080
# UK IPs for amazon.co.uk
http://USERNAME-country-GB:PASSWORD@gate.proxyhat.com:8080Aby uzyskać więcej informacji na temat technik rotacji, przeczytaj nasz szczegółowy przewodnik na temat najlepsze proxy do skrobania stron internetowych w 2026.
Najlepsze praktyki dla Amazon Scraping
- Losowanie opóźnień: Stosować przypadkowe interwały 2- 7 sekund pomiędzy żądaniami. Nigdy nie drap za stałą stawkę.
- Obróć User- Agenci: Utrzymanie puli co najmniej 10 realistyczne przeglądarki User- Agent struny i obrócić je.
- Obsługa CAPTCHA z wdzięcznością: Jeśli otrzymasz odpowiedź CAPTCHA, wycofaj się na 30- 60 sekund i spróbuj ponownie z nowym IP.
- Szacunek robot.txt: Chociaż w większości jurysdykcji nie są prawnie wiążące, stosowanie dyrektyw robots.txt wykazuje dobrą wiarę.
- Użyj proxy mieszkalnych: Dane IP są łatwo identyfikowane i blokowane przez Amazon. Proxy mieszkalne udostępniają te same zakresy IP co prawdziwi klienci.
- Monitoruj wskaźniki sukcesu: Śledź stawkę HTTP 200. Jeśli spadnie poniżej 90%, zmniejszyć współzależność lub dostosować strategię rotacji.
- Odpowiedzi na cache: Jeżeli dane nie uległy zmianie, nigdy nie skracaj tego samego adresu URL dwa razy. Dane produktu Cache i ustawić odświeżające odstępy w zależności od tego, jak często zmieniają się ceny.
Skalowanie Amazon Scraper
Przesuwając się z setek do milionów produktów, architektura ma znaczenie.
Architektura oparta na kolejkach
Użyj kolejki wiadomości (Redis, RabbitMQ lub SQS) do zarządzania listą ASIN. Procesy Worker wyciągają ASIN z kolejki, skracają je i wrzucają wyniki do magazynu danych. To oddziela planowanie od skrobania i pozwala na skalowanie pracowników niezależnie.
Kontrola połączeń
Zacznij od 5- 10 równoległych wniosków i stopniowo wzrastać, monitorując wskaźniki sukcesu. Z basenem mieszkalnym ProxyHat, można zazwyczaj uruchomić 20- 50 jednoczesnych sesji bez problemów. Zobacz web scrating use case strona dla zalecanych konfiguracji.
Pipeline danych
Przechowywać surowy HTML w magazynie obiektów (S3) do ponownego przetwarzania i przetwarzania danych w PostgreSQL lub magazynie danych. Ta separacja pozwala na naprawianie błędów parsujących bez ponownego drapania.
Pro tip: Amazon strony produktów często zmieniać strukturę. Przechowuj surowy HTML, aby można było ponownie wyodrębnić dane przy zmianie selektorów, nie uderzając ponownie Amazon.
Rozważania prawne i etyczne
Ściąganie stron internetowych jest legalne w większości jurysdykcji dla publicznie dostępnych danych, ale odpowiedzialne praktyki mają znaczenie. Zbieraj tylko dane publicznie wyświetlane. Nie próbuj uzyskać dostępu do uwierzytelnionych stron, kont sprzedających lub danych prywatnych. Rate- ograniczyć swoje żądania, aby uniknąć degradacji usługi Amazon dla innych użytkowników. Przechowuj tylko potrzebne dane i obsługuj je zgodnie z obowiązującymi przepisami dotyczącymi prywatności.
Key Takeaways
- System antybotowy Amazona wymaga proxy mieszkaniowej z geocelowaniem, aby dopasować targi docelowe.
- Obróć IP na życzenie dla luzem lookup; użyj lepkich sesji do przeglądania stron.
- Randomizuj opóźnienia, Agenci User- i żądaj wzorów, aby uniknąć wykrycia.
- Zbuduj architekturę opartą na kolejkach do skalowania ponad kilka tysięcy produktów.
- Przechowywać surowy HTML dla odporności na zmiany wyboru.
- Stosowanie ProxyHat 's residential proxy wysokie wskaźniki sukcesu na wszystkich rynkach Amazon.
Gotowy do rozpoczęcia zeskrobywania danych Amazon? Nasze Przewodnik do zeskrobywania danych e-commerce obejmuje pełną strategię, a można zbadać ProxyHat proxy infrastruktury na nasz Strona cenowa.






