Opi Amazon-tuotteiden kaapiminen Pythonilla

Viimeksi päivitetty April 16, 2026
Opi Amazon-tuotteiden kaapiminen Pythonilla

Jos olet seurannut Amazonin kaavintaopasta ja päätynyt vain CAPTCHA-suojien, 503-virheiden tai täysin tyhjien tulosten äärelle — tervetuloa kerhoon. Suurin osa netissä pyörivistä Pythonin Amazon-kaavintaoppaista on kirjoitettu vuosina 2022 tai 2023, ja niissä käytetään valitsimia ja tekniikoita, jotka Amazon on jo ehtinyt paikata.

Olen rakentanut dataa poimivia työkaluja Thunderbitillä vuosien ajan, ja voin sanoa yhden asian varmuudella: Amazon on yksi vaikeimmista sivustoista kaavittavaksi luotettavasti. Alusta vaihtaa HTML-rakennettaan jatkuvasti, käyttää kuusitasoista bottisuojausta ja näyttää jopa erilaisia sivupohjia eri käyttäjille A/B-testauksen kautta. Tässä oppaassa käyn läpi Pythonilla toteutetun Amazon-kaapurin, joka toimii oikeasti vuonna 2025 — mukana toimiviksi todetut CSS-valitsimet, kerroksittainen eston kiertämisen strategia sekä ohjeet ajastamiseen ja vientiin, jotka useimmista oppaista puuttuvat täysin. Ja niille, jotka tarvitsevat vain datan ilman Pythonin kanssa painimista, näytän myös, miten Thunderbit hoitaa saman työn noin kahdella klikkauksella.

Mitä Amazon-tuotteiden kaapiminen tarkoittaa?

Amazon-tuotteiden kaapiminen tarkoittaa julkisesti saatavilla olevan datan — kuten tuotteen nimen, hinnan, arvosanan, arvostelujen määrän, kuvat, saatavuuden ja muun vastaavan — ohjelmallista poimimista Amazonin tuote- ja hakutulossivuilta. Sen sijaan, että kopioisit tietoja käsin sadoista listauksista, kaavin käy jokaisella sivulla, lukee HTML:n ja poimii määrittelemäsi tiedot jäsenneltyyn muotoon, kuten CSV:ksi, Exceliksi tai tietokantaan.

Ajattele sitä vähän kuin palkkaisit väsymättömän harjoittelijan, joka ehtii kiertää tuhat tuotesivua siinä ajassa, kun juot aamukahvisi loppuun. Erona on vain se, ettei tämä harjoittelija koskaan kirjoita mitään väärin eikä tarvitse lounastaukoja.

Miksi Amazon-tuotteita kannattaa kaapia Pythonilla?

Amazonissa on arviolta 350–600 miljoonaa tuotelistausta yli 30 kategoriassa, ja niitä pyörittää noin 9,7 miljoonaa myyjätunnusta. Kolmannen osapuolen myyjät muodostavat nykyään 69 % koko GMV:stä. Jopa pienen osan tästä valikoimasta seuraaminen käsin on mahdotonta. Tästä syystä tiimit kaapivat Amazonia:

KäyttötapausKuka hyötyyMitä poimitaan
Hintaseuranta ja uudelleenhinnoitteluVerkkokaupan operatiiviset tiimit, markkinapaikkamyyjätHinnat, saatavuus, myyjätiedot
Kilpailija-analyysiTuotepäälliköt, bränditiimitTuoteominaisuudet, arvosanat, arvostelumäärät
MarkkinatutkimusAnalyytikot, uustuotetiimitKategoriamuutos, hintajakaumat
Liidien generointiMyyntitiimitMyyjien nimet, bränditiedot, yhteystiedot
Affiliate-markkinointiSisällöntuottajat, diilisivustotHinnat, tarjoukset, tuotetiedot
VarastoseurantaLogistiikka, hankintaVarastotilanne, toimitusarviot

Pelkästään Amazonin hintojen mittakaava tekee automatisoinnista välttämätöntä: Amazon muuttaa hintoja yli 2,5 miljoonaa kertaa päivässä, ja keskimääräisen tuotteen hinta päivittyy noin 10 minuutin välein. Vertailun vuoksi kilpailijat, kuten Best Buy ja Walmart, muuttavat hintoja vain noin 50 000 kertaa kuukaudessa. Ihmistiimi ei yksinkertaisesti pysy perässä.

amazon-product-price-monitor-dashboard.webp

Python antaa sinulle täyden hallinnan kaavintaprosessiin — päätät itse mitä poimitaan, miten virheet käsitellään ja minne data tallennetaan. Mutta samalla olet itse vastuussa ylläpidosta, estojen kiertämisestä ja Amazonin toistuvien HTML-muutosten seuraamisesta.

Mitä Amazonista voi kaapia ja mitä ei?

Julkisesti saatavilta tuotesivuilta voi yleensä poimia seuraavat tiedot:

  • Tuotteen otsikko (nimi, brändi)
  • Hinta (nykyinen, alkuperäinen, tarjoushinta)
  • Arvosana (tähtien keskiarvo)
  • Arvostelujen määrä
  • Tuotekuvat (pääkuvan URL)
  • Saatavuus / varastotilanne
  • ASIN (Amazon Standard Identification Number)
  • Tuotekuvaus ja luettelopisteet
  • Myyjätiedot
  • Tuotevariantit (koko, väri jne.)

Mitä kannattaa välttää:

  • Kirjautumisen takana oleva data: Laajennetut arvostelusivut, henkilökohtaiset tilitiedot, tilaushistoria
  • Henkilötiedot: Ostajien nimet, osoitteet, maksutiedot
  • Tekijänoikeudella suojattu sisältö uudelleenjulkaisuun: Tuotekuvaukset ja kuvat ovat ok analyysiin, mutta älä julkaise niitä omana sisältönäsi

Amazonin robots.txt estää yli 50 nimettyä bottia (mukaan lukien GPTBot, Scrapy ja ClaudeBot) ja kieltää polkuja, kuten käyttäjätilit, ostoskorit ja toivelistat. Tuotesivut eivät ole erikseen kiellettyjä, mutta Amazonin käyttöehdot kieltävät automaattisen käytön. Oikeuskäytännössä on yleensä erotettu käyttöehtojen rikkominen (siviiliasia) ja rikoslain mukaiset rikkomukset CFAA:n alla — lainmukaisuudesta lisää oppaan lopussa.

Tarvittavat työkalut ja kirjastot

Tässä on tämän oppaan Python-pino:

KirjastoTarkoitusMiksi käytämme sitä
requestsHTTP-pyynnötYksinkertainen, laajasti tuettu
beautifulsoup4HTML:n jäsentäminenHelppo CSS-valitsinpohjainen poiminta
lxmlNopea HTML-jäsenninKäytetään BeautifulSoupin parserina
curl_cffiTLS-jäljen jäljittelyn esittäminenErittäin tärkeä Amazonin tunnistuksen kiertämisessä
pandasDatan jäsentäminen ja vientiDataFrame-työkalut, CSV/Excel-vienti

Valinnainen (JavaScriptillä renderöidylle sisällölle):

  • selenium tai playwright — headless-selaimen automaatio

Python-ympäristön määrittäminen

Avaa terminaali ja suorita:

mkdir amazon-scraper && cd amazon-scraper
python -m venv venv
source venv/bin/activate  # Windowsissa: venv\Scripts\activate
pip install requests beautifulsoup4 lxml curl_cffi pandas

Varmista, että kaikki asentui:

import requests, bs4, curl_cffi, pandas
print("Kaikki kunnossa!")

Jos näet tekstin "Kaikki kunnossa!" ilman virheitä, olet valmis.

laptop-coding-workspace.webp

Miksi useimmat Amazon-kaavintaoppaat hajoavat (ja miksi tämä toimii)

Tämä on se osa, jonka useimmat oppaat ohittavat — ja juuri siksi luet tätä artikkelia.

Amazon päivittää usein HTML-rakennettaan, luokkanimiään ja elementtien tunnisteita. Kaavintayhteisön mukaan 10–15 % crawlereista tarvitsee viikoittaisia korjauksia DOM-muutosten ja sormenjälkitekniikoiden vuoksi. Kuuluisin uhri? Valitsin #priceblock_ourprice, joka esiintyi sadoissa vuosien 2018–2023 oppaissa. Kyseistä tunnistetta ei enää ole Amazonin tuotesivuilla.

Pikavertailu siitä, mikä on rikki ja mikä toimii nyt:

TietopisteRikki mennyt valitsin (ennen 2024)Toimiva 2025-valitsin
Hinta#priceblock_ourpricediv#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen
Otsikko#productTitlespan#productTitle (toimii edelleen)
Arvosanaspan.a-icon-alt (joskus väärässä kontekstissa)#acrPopover span.a-icon-alt
Arvostelumäärä#acrCustomerReviewCountspan#acrCustomerReviewText
Saatavuus#availability spandiv#availability span.a-size-medium

Kaikki tämän oppaan koodiesimerkit on testattu Amazonin oikeilla sivuilla vuonna 2025. Näytän sinulle oikeat CSS-valitsimet sekä odotetun tuloksen — ei mitään vuoden 2022 kopiointia.

Ennen kuin aloitat

  • Vaikeustaso: Keskitaso (perus-Pythonin tuntemus oletetaan)
  • Aikaa kuluu: Noin 30–45 minuuttia koko oppaaseen; noin 10 minuuttia peruskaapuriin
  • Tarvitset: Python 3.9+, Chrome-selaimen (Amazon-sivujen tarkasteluun), terminaalin ja halutessasi Thunderbit Chrome -laajennuksen, jos haluat verrata koodittomaan lähestymistapaan

Vaihe 1: Lähetä ensimmäinen pyyntö Amazonille

Avaa mikä tahansa Amazonin tuotesivu selaimessa ja kopioi URL. Aloitamme yksinkertaisella requests.get()-kutsulla:

import requests

url = "https://www.amazon.com/dp/B0DGNFM9YJ"
response = requests.get(url)
print(response.status_code)
print(response.text[:500])

Kun suoritat tämän, saat lähes varmasti 503-tilakoodin tai sivun, jossa lukee "To discuss automated access to Amazon data please contact…". Se on Amazonin WAF (Web Application Firewall), joka tunnistaa Python-skriptisi. Pelkkä requests.get() ilman kunnollisia otsikoita onnistuu Amazonia vastaan vain noin 2 % ajasta.

Näet todennäköisesti jotain tällaista: 503 ja HTML:ssä eston ilmoittavan sivun. Tämä on odotettua — korjaamme sen seuraavassa vaiheessa.

Vaihe 2: Aseta omat otsikot ja TLS-jäljen jäljittely

Pelkkä User-Agent-otsikon lisääminen ei enää riitä. Amazon vertaa HTTP-otsikoitasi TLS-sormenjälkeesi. Jos väität olevasi Chrome 120, mutta TLS-kättely paljastaa Pythonin requests-kirjaston, sinut merkitään heti.

Luotettavin tapa vuonna 2025 on käyttää curl_cffi-kirjastoa selainjäljittelyllä:

from curl_cffi import requests as cfreq

headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://www.google.com/",
    "DNT": "1",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
}

url = "https://www.amazon.com/dp/B0DGNFM9YJ"
response = cfreq.get(url, headers=headers, impersonate="chrome124")
print(response.status_code)
print(len(response.text))

Kun curl_cffi jäljittelee Chrome 124:ää, onnistumisprosentti nousee noin 94 % tasolle — 47-kertainen parannus pelkkään requests-kirjastoon verrattuna. Nyt pitäisi näkyä 200-statuskoodi ja huomattavasti pidempi HTML-vastaus (yli 100 000 merkkiä).

Jos saat yhä 503:n, kokeile toista impersonate-arvoa, esimerkiksi "chrome131", tai lisää lyhyt viive ennen uutta yritystä.

Vaihe 3: Jäsennä HTML ja poimi tuotetiedot

Nyt kun meillä on koko HTML, poimitaan data vahvistetuilla vuoden 2025 valitsimilla:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "lxml")

# Tuotteen otsikko
title_el = soup.select_one("span#productTitle")
title = title_el.get_text(strip=True) if title_el else None

# Hinta
price_el = soup.select_one(
    "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
)
if not price_el:
    price_el = soup.select_one("span.priceToPay .a-offscreen")
if not price_el:
    price_el = soup.select_one(".apexPriceToPay .a-offscreen")
price = price_el.get_text(strip=True) if price_el else None

# Arvosana
rating_el = soup.select_one("#acrPopover span.a-icon-alt")
rating = rating_el.get_text(strip=True) if rating_el else None

# Arvostelujen määrä
reviews_el = soup.select_one("span#acrCustomerReviewText")
reviews = reviews_el.get_text(strip=True) if reviews_el else None

# Saatavuus
avail_el = soup.select_one("div#availability span")
availability = avail_el.get_text(strip=True) if avail_el else None

# Pääkuvan URL
img_el = soup.select_one("#landingImage")
image_url = img_el.get("src") if img_el else None

print(f"Otsikko: {title}")
print(f"Hinta: {price}")
print(f"Arvosana: {rating}")
print(f"Arvostelut: {reviews}")
print(f"Saatavuus: {availability}")
print(f"Kuva: {image_url}")

Odotettu tuloste (esimerkki):

Otsikko: Apple AirPods Pro (2nd Generation) with USB-C
Hinta: $189.99
Arvosana: 4.7 out of 5 stars
Arvostelut: 98,432 ratings
Saatavuus: In Stock
Kuva: https://m.media-amazon.com/images/I/61SUj2...

Huomaa useat varavalitsimet hinnalle — Amazon käyttää eri säilöjä tuotetyypin, tarjousstatuksen ja A/B-testiversion mukaan. Jokaisen poiminnan ympärille lisätty ehtotarkistus estää kaapuria kaatumasta, kun jokin valitsin ei osu kohdalleen.

Vaihe 4: Kaavi useita tuotteita hakutuloksista

Jos haluat oikean aineiston, kannattaa aloittaa Amazonin hakutulossivulta, kerätä ASINit ja kaapia sitten jokainen tuotesivu erikseen.

import time
import random

def get_search_asins(keyword, max_pages=1):
    """Kerää ASINit Amazonin hakutuloksista."""
    asins = []
    for page in range(1, max_pages + 1):
        search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
        resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
        if resp.status_code != 200:
            print(f"Hakusivu {page} palautti tilakoodin {resp.status_code}")
            break

        search_soup = BeautifulSoup(resp.text, "lxml")
        results = search_soup.select('div[data-component-type="s-search-result"]')

        for r in results:
            asin = r.get("data-asin")
            if asin:
                asins.append(asin)

        print(f"Sivu {page}: löytyi {len(results)} tuotetta")
        time.sleep(random.uniform(2, 5))  # Harkittu viive

    return asins

asins = get_search_asins("wireless+earbuds", max_pages=2)
print(f"Kerätty {len(asins)} ASINia")

Jokainen ASIN vastaa siistiä tuote-URL-osoitetta: https://www.amazon.com/dp/{ASIN}. Tämä on luotettavampaa kuin käyttää koko hakutulos-URL:ää, jossa voi olla istuntokohtaisia parametreja.

Vaihe 5: Käsittele sivutus ja kaavi mittakaavassa

Yhdistetään hakutulosten kerääminen ja tuotesivujen kaavinta yhdeksi putkeksi:

import pandas as pd

def scrape_product(asin):
    """Kaavi yksittäinen Amazonin tuotesivu."""
    url = f"https://www.amazon.com/dp/{asin}"
    try:
        resp = cfreq.get(url, headers=headers, impersonate="chrome124")
        if resp.status_code != 200:
            return None

        soup = BeautifulSoup(resp.text, "lxml")

        title_el = soup.select_one("span#productTitle")
        price_el = (
            soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
            or soup.select_one("span.priceToPay .a-offscreen")
            or soup.select_one(".apexPriceToPay .a-offscreen")
        )
        rating_el = soup.select_one("#acrPopover span.a-icon-alt")
        reviews_el = soup.select_one("span#acrCustomerReviewText")
        avail_el = soup.select_one("div#availability span")
        img_el = soup.select_one("#landingImage")

        return {
            "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,
            "rating": rating_el.get_text(strip=True) if rating_el else None,
            "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
            "availability": avail_el.get_text(strip=True) if avail_el else None,
            "image_url": img_el.get("src") if img_el else None,
            "url": url,
        }
    except Exception as e:
        print(f"Virhe kaavittaessa kohdetta {asin}: {e}")
        return None

# Kaavi kaikki kerätyt ASINit
products = []
for i, asin in enumerate(asins):
    print(f"Kaavitaan {i+1}/{len(asins)}: {asin}")
    product = scrape_product(asin)
    if product:
        products.append(product)
    time.sleep(random.uniform(2, 5))  # Satunnainen viive pyyntöjen välillä

df = pd.DataFrame(products)
print(f"\nKaavittu onnistuneesti {len(df)} tuotetta")
print(df.head())

Satunnainen 2–5 sekunnin viive on tärkeä. Täsmälleen säännöllinen ajoitus, esimerkiksi tasan 3 sekuntia joka kerta, näyttää Amazonin käyttäytymisanalyysissä epäilyttävältä. Satunnaiset välit muistuttavat ihmisen selaustapaa.

Vaihe 6: Tallenna Amazon-data CSV:ksi

df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
print("Tallennettu tiedostoon amazon_products.csv")

Sinulla pitäisi nyt olla siisti CSV, jossa on sarakkeet ASINille, otsikolle, hinnalle, arvosanalle, arvosteluille, saatavuudelle, kuvan URL:lle ja tuotteen URL:lle. Tässä kohtaa useimmat oppaat lopettavat — mutta jos rakennat oikeaa työnkulkua, CSV on vasta alkua.

Eston kiertämisen syväluotaus: näin pidät kaapurin toiminnassa

Estetyksi tuleminen on yleisin ongelma kaikille, jotka yrittävät kaapia Amazon-tuotteita Pythonilla. Amazonin kuusikerroksinen puolustus sisältää IP-maineen analyysin, TLS-sormenjäljen tunnistuksen, selaimen ympäristötarkistukset, käyttäytymisen biometrisen analyysin, CAPTCHA-haasteet ja koneoppimiseen perustuvan poikkeamien tunnistuksen. Alla on kerroksittainen strategia näihin kaikkiin.

Kierrätä User-Agentit ja kaikki otsikot

Yksi staattinen User-Agent tunnistetaan nopeasti. Kierrätä nykyaikaisia selainmerkkijonoja:

import random

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
]

def get_headers():
    return {
        "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",
        "Referer": "https://www.google.com/",
        "DNT": "1",
        "Connection": "keep-alive",
    }

Yksi yksityiskohta, johon moni kompastuu: Accept-Language-arvon on vastattava IP-osoitteen viittaamaa maantieteellistä sijaintia. Jos lähetät Accept-Language: en-US saksalaisesta IP:stä, se näyttää epäilyttävältä.

TLS-sormenjäljen jäljittely curl_cffi:llä

Kävimme tämän läpi vaiheessa 2, mutta sitä kannattaa korostaa: tämä yksittäinen tekniikka tuo suurimman parannuksen onnistumisprosenttiin. Tavallinen Python requests yltää Amazonia vastaan noin 2 %:n onnistumiseen. curl_cffi-jäljittelyllä päästään noin 94 %:iin. Se on ero toimivan ja rikki olevan kaapurin välillä.

from curl_cffi import requests as cfreq

# Kierrätä myös impersonointikohteita
BROWSERS = ["chrome120", "chrome124", "chrome131"]

response = cfreq.get(
    url,
    headers=get_headers(),
    impersonate=random.choice(BROWSERS),
)

Proxyn kierrätys

Jos kaavittavia sivuja on enemmän kuin muutama, tarvitset proxyn kierrätystä. Amazon seuraa IP-osoitteita ja blokkaa kaikki IP:t, jotka lähettävät liikaa pyyntöjä.

PROXIES = [
    "http://user:pass@proxy1.example.com:8080",
    "http://user:pass@proxy2.example.com:8080",
    "http://user:pass@proxy3.example.com:8080",
]

proxy = random.choice(PROXIES)
response = cfreq.get(
    url,
    headers=get_headers(),
    impersonate="chrome124",
    proxies={"http": proxy, "https": proxy},
)

Asuinalueen proxyt toimivat paremmin kuin datakeskus-proxyt (Amazon estää datakeskus-IP-alueita ennaltaehkäisevästi), mutta ne ovat myös kalliimpia. Pieneen projektiin voit aloittaa maksullisella proxy-palvelulla ja kasvattaa käyttöä tarpeen mukaan.

Nopeusrajoitus ja eksponentiaalinen takaisinyritys

Yksikään kilpailija-artikkeli, johon törmäsin, ei käsitellyt tätä kunnolla, mutta se on olennainen. Kun saat 503- tai CAPTCHA-vastauksen, älä vain yritä heti uudelleen — se on nopea tie pysyvään porttikieltoon.

import time
import random

def fetch_with_backoff(url, max_retries=3):
    """Hakee URL:n ja kasvattaa odotusaikaa epäonnistumisen jälkeen."""
    for attempt in range(max_retries):
        response = cfreq.get(
            url,
            headers=get_headers(),
            impersonate=random.choice(BROWSERS),
        )
        if response.status_code == 200:
            return response

        # Eksponentiaalinen takaisinyritys satunnaisella lisällä
        wait = min(2 ** attempt + random.uniform(0, 1), 30)
        print(f"Yritys {attempt+1} epäonnistui ({response.status_code}). Odotetaan {wait:.1f}s...")
        time.sleep(wait)

    return None  # Kaikki yritykset käytetty

Kaava wait = min(2^attempt + jitter, max_delay) varmistaa, että viiveet kasvavat (2 s, 4 s, 8 s...) mutta eivät ylitä järkevää ylärajaa. Satunnainen jitter estää toistokuvion tunnistamisen.

Selenium- tai Playwright-vararatkaisu JavaScript-renderöidylle sisällölle

Jotkin Amazon-sivut (erityisesti dynaamiset hinnoittelu-widgetit tai variaatiovalitsimet) vaativat JavaScriptin täydellistä renderöitymistä. Kun curl_cffi palauttaa vajavaisen HTML:n, headless-selain toimii varavaihtoehtona:

from playwright.sync_api import sync_playwright

def scrape_with_browser(url):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        page.goto(url, wait_until="domcontentloaded")
        page.wait_for_timeout(3000)  # Anna JS:n renderöityä
        html = page.content()
        browser.close()
        return html

Tämä on hitaampaa — 3–5 sekuntia sivua kohti verrattuna alle sekuntiin curl_cffi:llä. Käytä sitä vain, kun se on tarpeen.

Omien kokemusteni mukaan curl_cffi hoitaa yli 90 % Amazonin tuotesivuista ilman selainta.

Eston kiertämisen yhteenveto

TekniikkaVaikeustasoTehokkuusSuurin osa oppaista käsittelee?
Oma User-AgentHelppoMatala (Amazon tunnistaa mallit)Kyllä
Täysi otsikoiden kierrätysHelppoKeskitasoHarvoin
TLS-jäljittely (curl_cffi)KeskitasoKorkea (~94 % onnistuminen)Lähes koskaan
Proxyn kierrätysKeskitasoKorkeaLyhyesti, jos ollenkaan
Nopeusrajoitus + eksponentiaalinen backoffHelppoKeskitasoEi
Selenium/Playwright-vararatkaisuKeskitasoKorkea (JS-sisällölle)Mainitaan, ei näytetä

CSV:tä pidemmälle: vie Amazon-data Google Sheetsiin, Airtableen ja muualle

Jokainen tarkistamani opas päättyy CSV-vientiin. Oikeissa liiketoimintaprosesseissa dataa kuitenkin tarvitaan Google Sheetsissä, tietokannoissa tai työkaluissa kuten Airtable ja Notion.

Vie Google Sheetsiin gspreadillä

Ensin määritä Google service account (kertaluonteinen asennus):

  1. Mene kohtaan Google Cloud Console → APIs & Services → Credentials
  2. Luo service account ja lataa JSON-avaintiedosto
  3. Tallenna se polkuun ~/.config/gspread/service_account.json
  4. Jaa kohde-taulukko JSON-tiedoston client_email-osoitteen kanssa

Sitten:

import gspread
from gspread_dataframe import set_with_dataframe

gc = gspread.service_account()
sh = gc.open("Amazon Scrape Data")
worksheet = sh.sheet1

set_with_dataframe(worksheet, df)
print("Data viety Google Sheetsiin!")

Tämä kirjoittaa koko DataFramen suoraan Google Sheetsiin — reaaliajassa, jaettavasti ja valmiina dashboardeihin.

Tallenna SQLiteen paikallista analyysia varten

Suuremmille aineistoille tai historian seurantaan SQLite on erinomainen — ei palvelinasennusta, vain yksi tiedosto:

import sqlite3

conn = sqlite3.connect("amazon_products.db")
df.to_sql("products", conn, if_exists="append", index=False)
print(f"Tallennettu {len(df)} tuotetta SQLiteen")

# Kysely myöhemmin:
historical = pd.read_sql_query(
    "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
    conn,
)

Kooditon vaihtoehto

Jos et halua ylläpitää Python-vientiskriptejä, Thunderbit tarjoaa ilmaisen viennin Google Sheetsiin, Airtableen, Notioniin, Exceliin, CSV:ksi ja JSON:ksi — mukaan lukien kuvakentät, jotka näkyvät suoraan Airtablessa ja Notionissa. Ei gspread-asetuksia, ei API-tunnuksia, ei koodia lainkaan. Tiimeille, joiden täytyy saada data suoraan nykyisiin työkaluihinsa, tämä säästää paljon aikaa.

Amazon-kaavintojen automatisointi — puuttuva luku

Hintaseuranta ja varastoseuranta vaativat toistuvia ajoja, ei kertaluonteisia suorituksia. Silti en löytänyt yhtäkään kilpailija-artikkelia, joka käsittelisi ajastamista. Näin automatisoit Python-kaapurisi.

Cron-työt (Linux/macOS)

Avaa crontab:

crontab -e

Lisää rivi, joka suorittaa kaapurin joka päivä klo 6 aamulla:

0 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Tai 6 tunnin välein:

0 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Windows Task Scheduler

Luo batch-tiedosto run_scraper.bat:

@echo off
cd /d "C:\path\to\amazon-scraper"
call venv\Scripts\activate
python scraper.py
deactivate

Avaa sitten Task Scheduler → Create Basic Task → aseta käynnistys (Daily, Hourly) → Action: "Start a program" → osoita tiedostoon run_scraper.bat.

GitHub Actions (ilmainen taso)

Pilvipohjaiseen ajastukseen ilman omaa infraa:

name: Amazon Scraper

on:
  schedule:
    - cron: "0 6 * * *"  # Päivittäin klo 6 UTC
  workflow_dispatch:       # Manuaalinen ajo

jobs:
  scrape:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.11"
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run scraper
        run: python scraper.py
      - name: Commit results
        run: |
          git config user.name 'GitHub Actions'
          git config user.email 'actions@github.com'
          git add data/
          git diff --staged --quiet || git commit -m "Päivitetty kaavittu data"
          git push

Tallenna proxy-tunnukset GitHub Secretsiin, ja sinulla on ilmainen automatisoitu kaavintaputki.

Kooditon vaihtoehto: Thunderbitin ajastettu kaapuri

Tiimeille, jotka eivät halua säätää cron-syntaksin tai pilvi-infran kanssa, Thunderbit tarjoaa sisäänrakennetun Scheduled Scraper -toiminnon. Kuvaat aikataulun tavallisella kielellä (esim. "joka päivä klo 8" tai "joka maanantai"), lisäät Amazon-URL-osoitteet ja painat "Schedule". Ei terminaalia, ei YAML-tiedostoja, ei julkaisuprosessia. Tämä on erityisen hyödyllistä verkkokauppatiimeille, jotka seuraavat jatkuvasti hintoja tai varastotilannetta.

Python DIY vs. kaapuri-API vs. kooditon ratkaisu: mikä sopii sinulle?

Näen tämän kysymyksen foorumeilla jatkuvasti, eikä yksikään kärkisijoilla oleva artikkeli anna siihen jäsenneltyä vastausta. Tässä siis oma rehellinen näkemykseni:

KriteeriPython + BS4/curl_cffiKaapuri-API (ScraperAPI, Oxylabs)Kooditon (Thunderbit)
Käyttöönottoaika30–60 min10–20 min~2 minuuttia
Koodausta tarvitaanKyllä (Python)Kyllä (API-kutsut)Ei lainkaan
Eston kierto sisäänrakennettunaEi (itse tehtävä)KylläKyllä
Hoitaa JS-renderöinninVain Seleniumilla/PlaywrightillaVaihtelee palveluntarjoajan mukaanKyllä (Browser- tai Cloud-tila)
AjastusItse tehtävä (cron/pilvi)Joissakin mukanaSisäänrakennettu
KustannusIlmainen (+ proxykulut)30–100+ $/kkIlmainen taso saatavilla
YlläpitoKorkea (valitsimet hajoavat)MatalaEi lainkaan (AI mukautuu)
Paras kohderyhmäKehittäjät, jotka haluavat täyden hallinnanSuurempi mittakaava ja luotettavuusNopeus, ei-kehittäjät, liiketoimintakäyttäjät

Python on oikea valinta, jos haluat oppia, räätälöidä kaiken yksityiskohtaisesti etkä vierasta jatkuvaa ylläpitoa. Kaapuri-API:t hoitavat estojen kierron puolestasi, mutta vaativat silti koodia. Thunderbit taas on nopein reitti myynnille, verkkokaupalle tai kenelle tahansa, joka tarvitsee vain datan — ei valitsimia, ei koodia, ei ylläpitoa silloin kun Amazon muuttaa HTML:äänsä.

Miten Thunderbit kaapii Amazon-tuotteet kahdella klikkauksella

Olen toki puolueellinen — tiimini rakensi tämän. Mutta työnkulku on aidosti näin yksinkertainen:

  1. Asenna Thunderbit Chrome -laajennus
  2. Siirry Amazonin hakutuloksiin tai tuotesivulle
  3. Klikkaa "AI Suggest Fields" (tai käytä valmista Amazon-kaavintapohjaa)
  4. Klikkaa "Scrape"

Thunderbitin AI lukee sivun, tunnistaa datarakenteen ja poimii kaiken siistiksi taulukoksi. Voit viedä tiedot ilmaiseksi Exceliin, Google Sheetsiin, Airtableen tai Notioniin. Todellinen hyöty: kun Amazon muuttaa HTML:äänsä ensi viikolla (ja niin tapahtuu), Thunderbitin AI mukautuu automaattisesti. Ei rikkoutuneita skriptejä, ei valitsimien päivittämistä.

Jos haluat rikastaa tuoteluetteloita tuotesivun tiedoilla, Thunderbitin Subpage Scraping -ominaisuus seuraa automaattisesti linkkejä tuotesivuille ja poimii lisäkenttiä, kuten kuvat, kuvaukset ja variaatiot — tähän tarvitaan Pythonilla huomattavasti enemmän koodia.

Vinkkejä, jotta Pythonin Amazon-kaapuri toimii pitkään

Jos valitset Python-reitin, näin minimoit ylläpitokulut:

  • Tarkista valitsimet säännöllisesti. Amazon muuttaa niitä usein. Tallenna tämä artikkeli kirjanmerkkeihin — päivitän valitsintaulukkoa muutosten mukaan.
  • Seuraa onnistumisprosenttia. Tarkkaile 200-vastausten suhdetta 503-/CAPTCHA-virheisiin. Aseta hälytys (vaikka sähköposti), kun onnistumisprosentti putoaa alle 80 %.
  • Tallenna raakaa HTML:ää. Säilytä koko HTML-vastaus analysoidun datan rinnalla. Jos valitsimet muuttuvat, voit parsia historian uudelleen ilman uutta kaavintaa.
  • Kierrätä proxyja ja User-Agentteja usein. Staattiset sormenjäljet tunnistetaan mittakaavassa tunneissa.
  • Käytä eksponentiaalista backoffia. Älä koskaan yritä heti uudelleen eston jälkeen.
  • Paketo i Dockerilla. Kääri kaapuri Docker-konttiin, niin käyttöönotto ja siirrettävyys helpottuvat.
  • Lisää datan validointi. Tarkista, että hinnat ovat numeroita, arvosanat ovat välillä 1–5 ja otsikot eivät ole tyhjiä. Yksi tiimi raportoi 21 %:n vähennyksen jatkovirheissä validointikerrosten lisäämisen jälkeen.

Tai jos kaikki tuo kuulostaa suuremmalta työltä kuin mihin olet valmis, harkitse, voisiko kooditon työkalu kuten Thunderbit sopia käyttötarkoitukseesi paremmin. Nopeamman polun valinnassa ei ole mitään hävettävää — olen viettänyt riittävästi vuosia kaapureita debugatessa tietääkseni, että joskus paras koodi on se, jota ei tarvitse kirjoittaa.

Amazonin kaapimiseen liittyvät oikeudelliset ja eettiset näkökohdat

Koska tämä nousee esiin joka kerta, kun Amazon-kaavinnasta puhutaan, tässä lyhyt katsaus oikeustilanteeseen:

  • Julkisesti saatavilla olevan datan kaapiminen on Yhdysvalloissa yleensä laillista. Merkittävä hiQ Labs v. LinkedIn -ratkaisu (2022) vahvisti, että julkisen datan käyttö ei riko CFAA:ta. Myöhemmin Meta v. Bright Data (2024) ja X v. Bright Data (2024) vahvistivat tätä periaatetta.
  • Amazonin käyttöehdot kieltävät automaattisen käytön. Tämä on siviiliasia (sopimusrikkomus), ei rikosoikeudellinen. Tuomioistuimet ovat yleensä tehneet eron näiden kahden välillä.
  • Amazon v. Perplexity (2025) on aktiivinen tapaus, joka liittyy Amazonin sivujen tekoälypohjaiseen kaapimiseen. Alustava kielto annettiin maaliskuussa 2026. Tätä kannattaa seurata.
  • Pysy julkisilla sivuilla. Älä kaavi kirjautumisen takana olevaa sisältöä, henkilötietoja tai mitään, mikä vaatii tunnistautumisen.
  • Kunnioita nopeusrajoja. Älä kuormita Amazonin palvelimia liikaa. 2–5 sekunnin viive pyyntöjen välillä on kohtuullinen.
  • Käytä dataa vastuullisesti. Kaavi analysointia varten, älä tekijänoikeudella suojatun sisällön uudelleenjulkaisuun.
  • Kysy lakineuvojalta laajamittaisessa kaupallisessa käytössä, erityisesti jos toimit EU:ssa (GDPR koskee henkilötietoja).

Syvempää taustaa varten katso oppaamme verkkokaavinnan oikeudellisista vaikutuksista.

Yhteenveto

Nyt sinulla on toimiva Pythonin Amazon-kaapuri, jossa on vahvistetut vuoden 2025 valitsimet, kerroksittainen eston kiertämisen strategia, joka menee paljon pidemmälle kuin pelkkä "lisää User-Agent", käytännölliset ajastusvaihtoehdot jatkuvaan seurantaan sekä vientitavat, joilla saat datasi Google Sheetsiin, tietokantoihin tai muihin käyttämiisi työkaluihin.

Pikayhteenveto:

  • Python + curl_cffi + BeautifulSoup antaa täyden hallinnan ja noin 94 %:n onnistumisprosentin TLS-jäljittelyn kanssa
  • Eston kierto vaatii useita kerroksia: otsikoiden kierrätystä, TLS-jäljittelyä, proxyn kierrätystä, nopeusrajoituksia ja eksponentiaalista backoffia
  • Ajastus muuttaa kertaluonteisen skriptin jatkuvaksi seurantaputkeksi (cron, GitHub Actions tai Thunderbitin sisäänrakennettu ajastin)
  • CSV:tä pidemmälle vienti — Google Sheets, SQLite, Airtable, Notion — on se, missä todellinen liiketoiminta-arvo syntyy
  • Thunderbit tarjoaa kahden klikkauksen vaihtoehdon ei-kehittäjille tai kenelle tahansa, joka mieluummin käyttää aikansa datan analysointiin kuin valitsimien debuggaamiseen

Jos haluat kokeilla koodia, kaikki tässä oppaassa on valmis kopioitavaksi ja ajettavaksi. Ja jos haluat mieluummin ohittaa koodauksen kokonaan, Thunderbitin ilmainen taso antaa sinun testata kooditonta lähestymistapaa Amazonissa heti.

Lisää aiheesta löydät oppaistamme kuinka kaapia Amazon-tuotteita ja arvosteluja, parhaat Python-verkkokaavintatyökalut ja Amazon-hintojen kaavinta. Voit myös katsoa vaiheittaisia läpikäyntejä Thunderbit YouTube -kanavalta.

Hyviä kaavintoja — ja toivottavasti valitsimesi kestävät seuraavaan Amazon-päivitykseen asti.

UKK

1. Miksi Pythonin Amazon-kaapurini estetään muutaman pyynnön jälkeen?

Amazon käyttää kuusitasoista puolustusjärjestelmää: IP-maineen analyysi, TLS-sormenjälki (JA3/JA4), selainympäristön tunnistus, käyttäytymisen biometrinen analyysi, CAPTCHA-haasteet ja koneoppimiseen perustuva poikkeamien tunnistus. Perus requests-skripti, jossa on vain User-Agent-otsikko, onnistuu vain noin 2 % ajasta. Tarvitset TLS-jäljittelyä (curl_cffi), koko otsikkopinojen kierrätystä, proxyjen kierrätystä sekä nopeusrajoitusta satunnaisella jitterillä, jotta käyttö pysyy luotettavana.

2. Mitkä Python-kirjastot sopivat parhaiten Amazon-tuotteiden kaapimiseen vuonna 2025?

curl_cffi TLS-jäljitellyille HTTP-pyynnöille (suurin yksittäinen parannus), BeautifulSoup4 ja lxml HTML:n jäsentämiseen, pandas datan jäsentämiseen ja vientiin sekä Selenium tai Playwright vararatkaisuksi JavaScript-renderöidylle sisällölle. Pythonia käyttää 69,6 % kaavintakehittäjistä.

3. Onko Amazon-tuotetietojen kaapiminen laillista?

Julkisesti saatavilla olevan datan kaapiminen on Yhdysvalloissa yleensä laillista, ja sitä tukevat ratkaisut kuten hiQ v. LinkedIn ja Meta v. Bright Data. Amazonin käyttöehdot kieltävät automaattisen käytön, mutta tuomioistuimet erottavat käyttöehtojen rikkomisen (siviili) ja rikosoikeudelliset rikkomukset. Vältä aina kirjautumisen takana olevaa sisältöä, noudata nopeusrajoja ja kysy lakineuvojalta laajamittaisessa kaupallisessa käytössä.

4. Voinko kaapia Amazonia kirjoittamatta lainkaan koodia?

Kyllä. Työkalut kuten Thunderbit antavat sinun kaapia Amazon-tuotteita kahdella klikkauksella Chrome-laajennuksella. Sen tekoälyyn perustuva kenttätunnistus jäsentää datan automaattisesti, ja voit viedä tiedot ilmaiseksi Exceliin, Google Sheetsiin, Airtableen tai Notioniin. Kun Amazonin HTML muuttuu, Thunderbitin AI mukautuu ilman mitään manuaalisia päivityksiä.

5. Kuinka usein Amazon muuttaa HTML-valitsimiaan ja miten pidän kaapurini ajan tasalla?

Usein ja ilman ennakkoilmoitusta. Kaavintayhteisön mukaan 10–15 % crawlereista tarvitsee viikoittaisia korjauksia DOM-muutosten vuoksi. Pysyksesi mukana seuraa kaapurisi onnistumisprosenttia, tallenna raakaa HTML:ää uudelleenparsintaa varten ja tarkista valitsimet säännöllisesti oikeilta sivuilta. Vaihtoehtoisesti tekoälypohjaiset työkalut, kuten Thunderbit, mukautuvat automaattisesti ja poistavat tämän ylläpitotaakan.

Lue lisää

Shuai Guan
Shuai Guan
Thunderbitin toimitusjohtaja | AI:n ja tiedon automaation asiantuntija Shuai Guan on Thunderbitin toimitusjohtaja ja Michiganin yliopiston insinööritieteiden alumni. Lähes kymmenen vuoden kokemuksella teknologian ja SaaS-arkkitehtuurin parissa hän on erikoistunut muuttamaan monimutkaiset tekoälymallit käytännöllisiksi, koodittomiksi tiedon poimintatyökaluiksi. Tässä blogissa hän jakaa suodattamattomia, kentällä koeteltuja näkemyksiä verkkosivujen datan keruusta ja automaatiostrategioista, jotta voit rakentaa älykkäämpiä, dataohjautuvia työnkulkuja. Kun hän ei optimoi tietotyönkulkuja, hän hyödyntää samaa tarkkuutta myös valokuvauksen parissa.

Kokeile Thunderbitia

Poimi liidejä ja muuta dataa vain kahdella klikkauksella. AI:n voimin.

Hanki Thunderbit Se on ilmainen
Poimi dataa AI:n avulla
Siirrä data helposti Google Sheetsiin, Airtableen tai Notioniin
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week