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 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 yli 30 kategoriassa, ja niitä pyörittää noin . 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ötapaus | Kuka hyötyy | Mitä poimitaan |
|---|---|---|
| Hintaseuranta ja uudelleenhinnoittelu | Verkkokaupan operatiiviset tiimit, markkinapaikkamyyjät | Hinnat, saatavuus, myyjätiedot |
| Kilpailija-analyysi | Tuotepäälliköt, bränditiimit | Tuoteominaisuudet, arvosanat, arvostelumäärät |
| Markkinatutkimus | Analyytikot, uustuotetiimit | Kategoriamuutos, hintajakaumat |
| Liidien generointi | Myyntitiimit | Myyjien nimet, bränditiedot, yhteystiedot |
| Affiliate-markkinointi | Sisällöntuottajat, diilisivustot | Hinnat, tarjoukset, tuotetiedot |
| Varastoseuranta | Logistiikka, hankinta | Varastotilanne, toimitusarviot |
Pelkästään Amazonin hintojen mittakaava tekee automatisoinnista välttämätöntä: Amazon muuttaa hintoja , 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ä.

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 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:
| Kirjasto | Tarkoitus | Miksi käytämme sitä |
|---|---|---|
requests | HTTP-pyynnöt | Yksinkertainen, laajasti tuettu |
beautifulsoup4 | HTML:n jäsentäminen | Helppo CSS-valitsinpohjainen poiminta |
lxml | Nopea HTML-jäsennin | Käytetään BeautifulSoupin parserina |
curl_cffi | TLS-jäljen jäljittelyn esittäminen | Erittäin tärkeä Amazonin tunnistuksen kiertämisessä |
pandas | Datan jäsentäminen ja vienti | DataFrame-työkalut, CSV/Excel-vienti |
Valinnainen (JavaScriptillä renderöidylle sisällölle):
seleniumtaiplaywright— headless-selaimen automaatio
Python-ympäristön määrittäminen
Avaa terminaali ja suorita:
1mkdir amazon-scraper && cd amazon-scraper
2python -m venv venv
3source venv/bin/activate # Windowsissa: venv\Scripts\activate
4pip install requests beautifulsoup4 lxml curl_cffi pandas
Varmista, että kaikki asentui:
1import requests, bs4, curl_cffi, pandas
2print("Kaikki kunnossa!")
Jos näet tekstin "Kaikki kunnossa!" ilman virheitä, olet valmis.

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 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:
| Tietopiste | Rikki mennyt valitsin (ennen 2024) | Toimiva 2025-valitsin |
|---|---|---|
| Hinta | #priceblock_ourprice | div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen |
| Otsikko | #productTitle | span#productTitle (toimii edelleen) |
| Arvosana | span.a-icon-alt (joskus väärässä kontekstissa) | #acrPopover span.a-icon-alt |
| Arvostelumäärä | #acrCustomerReviewCount | span#acrCustomerReviewText |
| Saatavuus | #availability span | div#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 , 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:
1import requests
2url = "https://www.amazon.com/dp/B0DGNFM9YJ"
3response = requests.get(url)
4print(response.status_code)
5print(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 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 .
Luotettavin tapa vuonna 2025 on käyttää curl_cffi-kirjastoa selainjäljittelyllä:
1from curl_cffi import requests as cfreq
2headers = {
3 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
4 "Accept-Language": "en-US,en;q=0.9",
5 "Accept-Encoding": "gzip, deflate, br",
6 "Referer": "https://www.google.com/",
7 "DNT": "1",
8 "Connection": "keep-alive",
9 "Upgrade-Insecure-Requests": "1",
10}
11url = "https://www.amazon.com/dp/B0DGNFM9YJ"
12response = cfreq.get(url, headers=headers, impersonate="chrome124")
13print(response.status_code)
14print(len(response.text))
Kun curl_cffi jäljittelee Chrome 124:ää, onnistumisprosentti nousee noin 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:
1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, "lxml")
3# Tuotteen otsikko
4title_el = soup.select_one("span#productTitle")
5title = title_el.get_text(strip=True) if title_el else None
6# Hinta
7price_el = soup.select_one(
8 "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
9)
10if not price_el:
11 price_el = soup.select_one("span.priceToPay .a-offscreen")
12if not price_el:
13 price_el = soup.select_one(".apexPriceToPay .a-offscreen")
14price = price_el.get_text(strip=True) if price_el else None
15# Arvosana
16rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17rating = rating_el.get_text(strip=True) if rating_el else None
18# Arvostelujen määrä
19reviews_el = soup.select_one("span#acrCustomerReviewText")
20reviews = reviews_el.get_text(strip=True) if reviews_el else None
21# Saatavuus
22avail_el = soup.select_one("div#availability span")
23availability = avail_el.get_text(strip=True) if avail_el else None
24# Pääkuvan URL
25img_el = soup.select_one("#landingImage")
26image_url = img_el.get("src") if img_el else None
27print(f"Otsikko: {title}")
28print(f"Hinta: {price}")
29print(f"Arvosana: {rating}")
30print(f"Arvostelut: {reviews}")
31print(f"Saatavuus: {availability}")
32print(f"Kuva: {image_url}")
Odotettu tuloste (esimerkki):
1Otsikko: Apple AirPods Pro (2nd Generation) with USB-C
2Hinta: $189.99
3Arvosana: 4.7 out of 5 stars
4Arvostelut: 98,432 ratings
5Saatavuus: In Stock
6Kuva: 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.
1import time
2import random
3def get_search_asins(keyword, max_pages=1):
4 """Kerää ASINit Amazonin hakutuloksista."""
5 asins = []
6 for page in range(1, max_pages + 1):
7 search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
8 resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
9 if resp.status_code != 200:
10 print(f"Hakusivu {page} palautti tilakoodin {resp.status_code}")
11 break
12 search_soup = BeautifulSoup(resp.text, "lxml")
13 results = search_soup.select('div[data-component-type="s-search-result"]')
14 for r in results:
15 asin = r.get("data-asin")
16 if asin:
17 asins.append(asin)
18 print(f"Sivu {page}: löytyi {len(results)} tuotetta")
19 time.sleep(random.uniform(2, 5)) # Harkittu viive
20 return asins
21asins = get_search_asins("wireless+earbuds", max_pages=2)
22print(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:
1import pandas as pd
2def scrape_product(asin):
3 """Kaavi yksittäinen Amazonin tuotesivu."""
4 url = f"https://www.amazon.com/dp/{asin}"
5 try:
6 resp = cfreq.get(url, headers=headers, impersonate="chrome124")
7 if resp.status_code != 200:
8 return None
9 soup = BeautifulSoup(resp.text, "lxml")
10 title_el = soup.select_one("span#productTitle")
11 price_el = (
12 soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
13 or soup.select_one("span.priceToPay .a-offscreen")
14 or soup.select_one(".apexPriceToPay .a-offscreen")
15 )
16 rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17 reviews_el = soup.select_one("span#acrCustomerReviewText")
18 avail_el = soup.select_one("div#availability span")
19 img_el = soup.select_one("#landingImage")
20 return {
21 "asin": asin,
22 "title": title_el.get_text(strip=True) if title_el else None,
23 "price": price_el.get_text(strip=True) if price_el else None,
24 "rating": rating_el.get_text(strip=True) if rating_el else None,
25 "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
26 "availability": avail_el.get_text(strip=True) if avail_el else None,
27 "image_url": img_el.get("src") if img_el else None,
28 "url": url,
29 }
30 except Exception as e:
31 print(f"Virhe kaavittaessa kohdetta {asin}: {e}")
32 return None
33# Kaavi kaikki kerätyt ASINit
34products = []
35for i, asin in enumerate(asins):
36 print(f"Kaavitaan {i+1}/{len(asins)}: {asin}")
37 product = scrape_product(asin)
38 if product:
39 products.append(product)
40 time.sleep(random.uniform(2, 5)) # Satunnainen viive pyyntöjen välillä
41df = pd.DataFrame(products)
42print(f"\nKaavittu onnistuneesti {len(df)} tuotetta")
43print(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
1df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
2print("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 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:
1import random
2USER_AGENTS = [
3 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
4 "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",
5 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
6 "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",
7]
8def get_headers():
9 return {
10 "User-Agent": random.choice(USER_AGENTS),
11 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
12 "Accept-Language": "en-US,en;q=0.9",
13 "Accept-Encoding": "gzip, deflate, br",
14 "Referer": "https://www.google.com/",
15 "DNT": "1",
16 "Connection": "keep-alive",
17 }
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ä.
1from curl_cffi import requests as cfreq
2# Kierrätä myös impersonointikohteita
3BROWSERS = ["chrome120", "chrome124", "chrome131"]
4response = cfreq.get(
5 url,
6 headers=get_headers(),
7 impersonate=random.choice(BROWSERS),
8)
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ä.
1PROXIES = [
2 "http://user:pass@proxy1.example.com:8080",
3 "http://user:pass@proxy2.example.com:8080",
4 "http://user:pass@proxy3.example.com:8080",
5]
6proxy = random.choice(PROXIES)
7response = cfreq.get(
8 url,
9 headers=get_headers(),
10 impersonate="chrome124",
11 proxies={"http": proxy, "https": proxy},
12)
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 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.
1import time
2import random
3def fetch_with_backoff(url, max_retries=3):
4 """Hakee URL:n ja kasvattaa odotusaikaa epäonnistumisen jälkeen."""
5 for attempt in range(max_retries):
6 response = cfreq.get(
7 url,
8 headers=get_headers(),
9 impersonate=random.choice(BROWSERS),
10 )
11 if response.status_code == 200:
12 return response
13 # Eksponentiaalinen takaisinyritys satunnaisella lisällä
14 wait = min(2 ** attempt + random.uniform(0, 1), 30)
15 print(f"Yritys {attempt+1} epäonnistui ({response.status_code}). Odotetaan {wait:.1f}s...")
16 time.sleep(wait)
17 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:
1from playwright.sync_api import sync_playwright
2def scrape_with_browser(url):
3 with sync_playwright() as p:
4 browser = p.chromium.launch(headless=True)
5 page = browser.new_page()
6 page.goto(url, wait_until="domcontentloaded")
7 page.wait_for_timeout(3000) # Anna JS:n renderöityä
8 html = page.content()
9 browser.close()
10 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
| Tekniikka | Vaikeustaso | Tehokkuus | Suurin osa oppaista käsittelee? |
|---|---|---|---|
| Oma User-Agent | Helppo | Matala (Amazon tunnistaa mallit) | Kyllä |
| Täysi otsikoiden kierrätys | Helppo | Keskitaso | Harvoin |
| TLS-jäljittely (curl_cffi) | Keskitaso | Korkea (~94 % onnistuminen) | Lähes koskaan |
| Proxyn kierrätys | Keskitaso | Korkea | Lyhyesti, jos ollenkaan |
| Nopeusrajoitus + eksponentiaalinen backoff | Helppo | Keskitaso | Ei |
| Selenium/Playwright-vararatkaisu | Keskitaso | Korkea (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):
- Mene kohtaan → APIs & Services → Credentials
- Luo service account ja lataa JSON-avaintiedosto
- Tallenna se polkuun
~/.config/gspread/service_account.json - Jaa kohde-taulukko JSON-tiedoston
client_email-osoitteen kanssa
Sitten:
1import gspread
2from gspread_dataframe import set_with_dataframe
3gc = gspread.service_account()
4sh = gc.open("Amazon Scrape Data")
5worksheet = sh.sheet1
6set_with_dataframe(worksheet, df)
7print("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:
1import sqlite3
2conn = sqlite3.connect("amazon_products.db")
3df.to_sql("products", conn, if_exists="append", index=False)
4print(f"Tallennettu {len(df)} tuotetta SQLiteen")
5# Kysely myöhemmin:
6historical = pd.read_sql_query(
7 "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
8 conn,
9)
Kooditon vaihtoehto
Jos et halua ylläpitää Python-vientiskriptejä, 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:
1crontab -e
Lisää rivi, joka suorittaa kaapurin joka päivä klo 6 aamulla:
10 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1
Tai 6 tunnin välein:
10 */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:
1@echo off
2cd /d "C:\path\to\amazon-scraper"
3call venv\Scripts\activate
4python scraper.py
5deactivate
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:
1name: Amazon Scraper
2on:
3 schedule:
4 - cron: "0 6 * * *" # Päivittäin klo 6 UTC
5 workflow_dispatch: # Manuaalinen ajo
6jobs:
7 scrape:
8 runs-on: ubuntu-latest
9 steps:
10 - uses: actions/checkout@v3
11 - name: Set up Python
12 uses: actions/setup-python@v4
13 with:
14 python-version: "3.11"
15 - name: Install dependencies
16 run: pip install -r requirements.txt
17 - name: Run scraper
18 run: python scraper.py
19 - name: Commit results
20 run: |
21 git config user.name 'GitHub Actions'
22 git config user.email 'actions@github.com'
23 git add data/
24 git diff --staged --quiet || git commit -m "Päivitetty kaavittu data"
25 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 -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:
| Kriteeri | Python + BS4/curl_cffi | Kaapuri-API (ScraperAPI, Oxylabs) | Kooditon (Thunderbit) |
|---|---|---|---|
| Käyttöönottoaika | 30–60 min | 10–20 min | ~2 minuuttia |
| Koodausta tarvitaan | Kyllä (Python) | Kyllä (API-kutsut) | Ei lainkaan |
| Eston kierto sisäänrakennettuna | Ei (itse tehtävä) | Kyllä | Kyllä |
| Hoitaa JS-renderöinnin | Vain Seleniumilla/Playwrightilla | Vaihtelee palveluntarjoajan mukaan | Kyllä (Browser- tai Cloud-tila) |
| Ajastus | Itse tehtävä (cron/pilvi) | Joissakin mukana | Sisäänrakennettu |
| Kustannus | Ilmainen (+ proxykulut) | 30–100+ $/kk | Ilmainen taso saatavilla |
| Ylläpito | Korkea (valitsimet hajoavat) | Matala | Ei lainkaan (AI mukautuu) |
| Paras kohderyhmä | Kehittäjät, jotka haluavat täyden hallinnan | Suurempi mittakaava ja luotettavuus | Nopeus, 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:
- Asenna
- Siirry Amazonin hakutuloksiin tai tuotesivulle
- Klikkaa "AI Suggest Fields" (tai käytä valmista Amazon-kaavintapohjaa)
- 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 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ä -ratkaisu (2022) vahvisti, että julkisen datan käyttö ei riko CFAA:ta. Myöhemmin (2024) ja (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 .
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, antaa sinun testata kooditonta lähestymistapaa Amazonissa heti.
Lisää aiheesta löydät oppaistamme , ja . Voit myös katsoa vaiheittaisia läpikäyntejä .
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 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ää 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 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 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ää