Jak scrape Amazon danych produktów z proxies

Dowiedz się, jak zeskrobać dane Amazon produktu, w tym ceny, opinie i rankingi za pomocą proxy mieszkalnych. Kompletne przykłady kodu Python i Node.js ze strategiami antydetekcji.

Jak scrape Amazon danych produktów z proxies

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 danychStrona źródłowaUse Case
Nazwa produktu, zdjęcia, opisStrona szczegółowa produktuTworzenie katalogów, analiza treści
Bieżąca cena, cena transakcji, cena listySzczegółowy opis / wykaz ofertMonitorowanie cen, przeszacowanie cen
Opinie i oceny klientówStrony przeglądoweAnaliza sentymentów, badania produktów
Best Sellers Rank (BSR)Strona szczegółowa produktuSzacowanie popytu na rynku
Kup Box sprzedawca, informacje wysyłkiStrona szczegółowa produktuŚledzenie konkurentów
Ranking wyników wyszukiwaniaStrona wyników wyszukiwaniaSEO i optymalizacja reklamy
Hierarchia kategoriiPrzeglądanie węzłówMapowanie 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:8080

W 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 requests

Obsł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 results

Wdraż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:8080

Rotacja 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:8080

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

Gotowy, aby zacząć?

Dostęp do ponad 50 mln rezydencjalnych IP w ponad 148 krajach z filtrowaniem AI.

Zobacz cenyProxy rezydencjalne
← Powrót do Bloga