Amazon-arvostelujen keruuseen tekemäni skripti toimi täydellisesti kuusi viikkoa — sitten eräänä aamuna se palautti 200 OK-vastauksen ja sivun, jossa ei ollut mitään. Ei virheilmoitusta, ei CAPTCHAa, vain tyhjää HTML:ää siellä missä ennen oli satoja arvosteluja.
Jos tämä kuulostaa tutulta, et ole ainoa. Loppuvuodesta 2025 Amazon alkoi piilottaa täydet arvostelusivunsa login-muurin taakse, ja valtava määrä Python-keruuskriptejä lakkasi toimimasta yhdessä yössä. Olen viettänyt viime kuukausina aikaa ongelmaa ratkoen molemmilta puolilta — rakentaen omaa AI-keruutyökaluamme ja ylläpitäen samalla omaa Python-pohjaista arvosteluputkeani — joten ajattelin kirjoittaa oppaan, jonka olisin itse toivonut löytäväni silloin, kun skriptini pimeni ensimmäisen kerran. Tässä käydään läpi toimiva lähestymistapa: evästeisiin perustuva tunnistautuminen, vakaat valitsimet, jotka kestävät Amazonin CSS-sotkua, kiertotiet 10 sivun sivutusrakenteen rajoitukseen, anti-bot-suojaukset sekä bonusosio tunneanalyysistä, joka muuttaa raakatekstin oikeiksi liiketoimintahavainnoiksi. Ja jos huomaat puolivälissä ajattelevasi: "En halua ylläpitää kaikkea tätä koodia", näytän myös, miten hoitaa saman työn noin kahdessa minuutissa ilman Pythonia.
Mitä Amazon-arvostelujen keruu on (ja miksi sillä on väliä)?
Amazon-arvostelujen keruu tarkoittaa asiakasarvostelujen — tähtiarvioiden, tekstien, kirjoittajien nimien, päivämäärien ja Verified Purchase -merkintöjen — ohjelmallista poimimista Amazonin tuotesivuilta. Koska Amazon (eikä ole tuonut sitä takaisin), verkkokeruu on ainoa ohjelmallinen tapa päästä tähän dataan käsiksi.
Luvut tukevat tätä. , ja . Pelkästään viiden arvostelun näyttäminen tuotesivulla voi . Yritykset, jotka analysoivat arvostelujen sentimenttiä järjestelmällisesti, näkevät . Kyse ei ole abstraktista datatieteestä — kyse on kilpailutiedosta, tuotekehityksen signaaleista ja markkinointikielestä, joka on suoraan Amazonin palvelimilla kaikkien nähtävillä.
Miksi Amazon-arvosteluja kannattaa kerätä Pythonilla
Python on edelleen tämän työn ykköstyökalu. Se on , ja sen ekosysteemi — requests, BeautifulSoup, pandas, Scrapy — tekee verkkokeruusta saavutettavaa myös niille, jotka eivät työskentele ohjelmoijina täysipäiväisesti.
Eri tiimit hyödyntävät tätä dataa eri tavoin:
| Tiimi | Käyttötapaus | Mitä he poimivat |
|---|---|---|
| Tuote / R&D | Toistuvien valitusten tunnistaminen, korjausten priorisointi | 1–2 tähden arvostelujen teksti, avainsanojen esiintyvyys |
| Myynti | Kilpailijoiden tuotteiden sentimentin seuranta | Arviot, arvostelumäärien trendit |
| Markkinointi | Asiakkaiden käyttämän kielen hyödyntäminen mainosteksteissä | Positiiviset ilmaukset, ominaisuusmaininnat |
| Verkkokaupan operointi | Oman tuotteen sentimentin seuranta ajan yli | Tähtijakauma, Verified Purchase -suhde |
| Markkinatutkimus | Kategorian kärkipelaajien vertailu ominaisuuksittain | Usean ASINin arvosteludatasetit |
Eräs keittiövälinebrändi , muotoili tuotteen uudelleen ja palautti ykkösmyyjä-statuksensa 60 päivässä. Kuntomittarivalmistaja , tunnisti lateksiallergiaan liittyvän ongelman, julkaisi hypoallergeenisen version ja vähensi palautuksia 40 %:lla. Tällainen ROI tekee teknisestä vaivasta kannattavan.
Login-muuri: miksi Amazon-arvosteluskripti lakkasi toimimasta
- marraskuuta 2024 . Muutos vahvistettiin sekä että . Jos avaat
/product-reviews/{ASIN}/-osoitteen yksityisessä selausikkunassa, sinut ohjataan kirjautumissivulle arvosteludatan sijaan.

Oireet ovat petollisia: skripti saa 200 OK -vastauksen, mutta HTML-sisältö sisältää kirjautumislomakkeen (name="email", id="ap_password") arvostelujen sijaan. Ei virhekoodia. Ei CAPTCHAa. Vain... ei mitään hyödyllistä.
Amazon teki tämän bot-suojauksen ja alueellisen vaatimustenmukaisuuden vuoksi. Valvonta on epätasaista — joskus tuore selainikkuna näyttää muutaman arvostelun ennen kuin muuri aktivoituu, erityisesti ensimmäisellä sivulla — mutta jos keräät dataa laajassa mittakaavassa, kannattaa olettaa, että muuri on aina käytössä.
Eri Amazon-maatunnukset (.de, .co.uk, .co.jp) valvovat tätä erikseen. Kuten eräs foorumikäyttäjä asian ilmaisi: "jokaiselle maalle tarvitaan oma kirjautuminen." .com-evästeesi eivät toimi .co.uk:ssa.
Featured Reviews vs. Full Reviews: mitä pääset vielä näkemään ilman kirjautumista
Amazonin tuotesivut (/dp/{ASIN}/) näyttävät edelleen noin ilman tunnistautumista. Ne ovat Amazonin algoritmin käsin valitsemia poimintoja, hyödyllisiä nopeaan tunnelmatsekkiin, mutta niitä ei voi lajitella, suodattaa tai sivuttaa.
Täydet arvostelusivut (/product-reviews/{ASIN}/) — joissa voi lajitella uusimman mukaan, suodattaa tähtiluokituksella ja selata satoja arvosteluja sivuittain — vaativat kirjautumisen.
Jos tarvitset vain muutaman arvostelun nopeaan yleiskuvan saamiseen, kerää tiedot tuotesivulta. Jos tarvitset satoja tai tuhansia, sinun täytyy käsitellä tunnistautuminen.
Mitä tarvitset ennen aloittamista: Python-asetukset ja kirjastot
Ennen kuin kirjoitamme koodia, tässä perusasetelma:
- Vaikeustaso: Keskitaso (Python hallussa, HTML:n perusteet kunnossa)
- Aika: ~45 minuuttia koko putkeen; ~10 minuuttia peruskeruuseen
- Tarvitset: Python 3.8+, Chrome-selain, voimassa oleva Amazon-tili
Asenna tärkeimmät kirjastot:
1pip install requests beautifulsoup4 lxml pandas textblob
Valinnainen (edistyneeseen tunneanalyysiin):
1pip install transformers torch
Mikä on ASIN? Se on Amazonin 10-merkkinen tuoteidentifikaattori. Löydät sen mistä tahansa tuote-URL:sta — esimerkiksi osoitteessa amazon.com/dp/B0BCNKKZ91 ASIN on B0BCNKKZ91. Se on avain, jonka syötät arvosteluosoitteeseen.
Vaihe 1: Ohita login-muuri evästepohjaisella tunnistautumisella
Luotettavin tapa on kirjautua Amazoniin selaimessa, kopioida istuntoevästeet ja injektoida ne Pythonin requests.Session()-istuntoon. Näin vältyt CAPTCHAeilta ja SMS-pohjaiselta 2FA:lta, jotka yleensä hankaloittavat Selenium-kirjautumisia.
Tarvitset nämä seitsemän evästettä:
| Evästeen nimi | Tarkoitus |
|---|---|
session-id | Vaihtuva istunnon tunniste |
session-id-time | Istunnon aikaleima |
session-token | Vaihtuva istuntotunniste |
ubid-main | Käyttäjän selaustunniste |
at-main | Ensisijainen tunnistautumistunniste |
sess-at-main | Istuntokohtainen tunnistus |
x-main | Käyttäjäsähköpostiin sidottu tunniste |
Näin poimit evästeet Chrome DevToolsista
- Kirjaudu Amazoniin Chromessa
- Avaa DevTools (F12 tai hiiren oikea → Inspect)
- Siirry kohtaan Application → Storage → Cookies →
https://www.amazon.com - Etsi taulukosta jokainen evästetunnus ja kopioi sen arvo
- Muotoile ne puolipisteillä erotelluksi merkkijonoksi Pythonia varten
Aseta istuntosi näin:
1import requests
2session = requests.Session()
3# Liitä evästeiden arvot tähän
4cookies = {
5 "session-id": "YOUR_SESSION_ID",
6 "session-id-time": "YOUR_SESSION_ID_TIME",
7 "session-token": "YOUR_SESSION_TOKEN",
8 "ubid-main": "YOUR_UBID_MAIN",
9 "at-main": "YOUR_AT_MAIN",
10 "sess-at-main": "YOUR_SESS_AT_MAIN",
11 "x-main": "YOUR_X_MAIN",
12}
13headers = {
14 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
15 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
16 "Accept-Language": "en-US,en;q=0.5",
17}
18session.cookies.update(cookies)
19session.headers.update(headers)
Tärkeää: Käytä samaa session-oliota kaikissa pyynnöissä. Näin evästeet pysyvät yhtenäisinä ja toiminta muistuttaa oikeaa selaussessiota. Evästeet kestävät yleensä päiviä tai viikkoja keruukuormasta riippuen, mutta jos kirjautumisohjaukset alkavat taas näkyä, päivitä evästeet selaimestasi.
Muilla kuin .com-markkinapaikoilla evästetunnukset vaihtuvat hieman — amazon.de käyttää at-acbde:tä at-mainin sijaan, amazon.co.uk käyttää at-acbuk:ia ja niin edelleen. Jokainen markkinapaikka tarvitsee oman erillisen istuntonsa.
Vaihe 2: Rakenna pyyntö ja parsii arvostelujen HTML BeautifulSoupilla
Amazonin arvostelu-URL näyttää tältä:
1https://www.amazon.com/product-reviews/{ASIN}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1
Ydintoiminto:
1from bs4 import BeautifulSoup
2import time, random
3def get_soup(session, url):
4 time.sleep(random.uniform(2, 5)) # Harkittu viive
5 response = session.get(url, timeout=15)
6 # Tunnista login-muuri
7 if "ap_email" in response.text or "Amazon Sign-In" in response.text:
8 raise Exception("Login-muuri havaittu — päivitä evästeesi")
9 if response.status_code != 200:
10 raise Exception(f"HTTP {response.status_code}")
11 return BeautifulSoup(response.text, "lxml")
Yksi pieni kikka auttaa: ennen kuin avaat arvostelusivun, käy ensin tuotesivulla. Se luo istuntoon luonnollisemman selausmallin.
1# Käy ensin tuotesivulla (jäljittelee tavallista selaamista)
2product_url = f"https://www.amazon.com/dp/{asin}"
3session.get(product_url, timeout=15)
4time.sleep(random.uniform(1, 3))
5# Sitten arvostelusivulle
6reviews_url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1"
7soup = get_soup(session, reviews_url)
Vaihe 3: Käytä vakaita valitsimia arvosteludatan poimintaan (älä nojaa CSS-luokkiin)
Tässä vaiheessa suurin osa vuosien 2022–2023 ohjeista hajoaa. Amazon piilottaa CSS-luokkien nimet — ne muuttuvat aika ajoin, ja kuten eräs turhautunut kehittäjä kirjoitti foorumilla: "yhdessäkään ei ollut mitään yhteistä kaavaa span-tagien luokkien nimissä."
Ratkaisu: Amazon käyttää arvosteluelementeissä data-hook-attribuutteja, ja ne ovat yllättävän vakaita. Ne ovat semanttisia tunnisteita, joihin Amazonin oma frontend nojaa, joten niitä ei satunnaisteta.
| Arvostelukenttä | Vakaa valitsin (data-hook) | Hauras valitsin (class) |
|---|---|---|
| Arvostelun teksti | [data-hook="review-body"] | .review-text-content (vaihtelee) |
| Tähtiarvio | [data-hook="review-star-rating"] | .a-icon-alt (epämääräinen) |
| Arvostelun otsikko | [data-hook="review-title"] | .review-title (joskus) |
| Kirjoittajan nimi | span.a-profile-name | Melko vakaa |
| Arvostelupäivä | [data-hook="review-date"] | .review-date (aluekohtainen) |
| Vahvistettu ostos | [data-hook="avp-badge"] | span.a-size-mini |
Poimintakoodi data-hook-valitsimilla:
1import re
2def extract_reviews(soup):
3 reviews = []
4 review_divs = soup.select('[data-hook="review"]')
5 for div in review_divs:
6 # Tähtiarvio
7 rating_el = div.select_one('[data-hook="review-star-rating"]')
8 rating = None
9 if rating_el:
10 rating_text = rating_el.get_text(strip=True)
11 match = re.search(r'(\d\.?\d?)', rating_text)
12 if match:
13 rating = float(match.group(1))
14 # Otsikko
15 title_el = div.select_one('[data-hook="review-title"]')
16 title = title_el.get_text(strip=True) if title_el else ""
17 # Sisältö
18 body_el = div.select_one('[data-hook="review-body"]')
19 body = body_el.get_text(strip=True) if body_el else ""
20 # Kirjoittaja
21 author_el = div.select_one('span.a-profile-name')
22 author = author_el.get_text(strip=True) if author_el else ""
23 # Päivä ja maa
24 date_el = div.select_one('[data-hook="review-date"]')
25 date_text = date_el.get_text(strip=True) if date_el else ""
26 # Muoto: "Reviewed in the United States on January 15, 2025"
27 country_match = re.search(r'Reviewed in (.+?) on', date_text)
28 date_match = re.search(r'on (.+)$', date_text)
29 country = country_match.group(1) if country_match else ""
30 date = date_match.group(1) if date_match else ""
31 # Vahvistettu ostos
32 verified_el = div.select_one('[data-hook="avp-badge"]')
33 verified = bool(verified_el)
34 reviews.append({
35 "author": author,
36 "rating": rating,
37 "title": title,
38 "content": body,
39 "date": date,
40 "country": country,
41 "verified": verified,
42 })
43 return reviews
Olen ajanut tätä valitsinsettiä useita ASINeja vasten kuukausien ajan, eikä data-hook-attribuutteja ole muutettu kertaakaan. CSS-luokat taas ovat ehtineet vaihtua ainakin kahdesti samalla jaksolla.
Vaihe 4: Käsittele sivutus ja Amazonin 10 sivun katto
Amazon rajoittaa pageNumber-parametrin 10 sivuun, joissa on 10 arvostelua per sivu — kovaksi katoksi muodostuu noin 100 arvostelua suodinyhdistelmää kohden. "Next page" -painike katoaa yksinkertaisesti sivun 10 jälkeen.
Perussivutuslenkki:
1all_reviews = []
2for page in range(1, 11):
3 url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber={page}"
4 soup = get_soup(session, url)
5 page_reviews = extract_reviews(soup)
6 if not page_reviews:
7 break # Tältä sivulta ei enää tule arvosteluja
8 all_reviews.extend(page_reviews)
9 print(f"Sivu {page}: {len(page_reviews)} arvostelua")
Näin saat yli 10 sivua Amazon-arvosteluja
Kiertotie on suodinten jakaminen useaan koriin. Jokainen filterByStar- ja sortBy-yhdistelmä saa oman erillisen 10 sivun ikkunansa.
Tähtisuodattimen arvot: one_star, two_star, three_star, four_star, five_star
Lajitteluarvot: recent, helpful (oletus)
Yhdistämällä kaikki 5 tähtisuodatinta × 2 lajittelujärjestystä voit päästä jopa 100 sivuun, eli 1 000 arvosteluun per tuote — ja tuotteissa, joissa tähtijakauma on epätasainen, pääset usein hyvin lähelle koko arvostelujoukkoa.
1star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
2sort_orders = ["recent", "helpful"]
3all_reviews = []
4seen_titles = set() # Yksinkertainen deduplikointi
5for star in star_filters:
6 for sort in sort_orders:
7 for page in range(1, 11):
8 url = (
9 f"https://www.amazon.com/product-reviews/{asin}"
10 f"?filterByStar={star}&sortBy={sort}&pageNumber={page}"
11 )
12 soup = get_soup(session, url)
13 page_reviews = extract_reviews(soup)
14 if not page_reviews:
15 break
16 for review in page_reviews:
17 # Deduplikoi otsikko + kirjoittaja -yhdistelmällä
18 key = (review["title"], review["author"])
19 if key not in seen_titles:
20 seen_titles.add(key)
21 all_reviews.append(review)
22 print(f"[{star}/{sort}] Sivu {page}: {len(page_reviews)} arvostelua")
23print(f"Yksilöllisiä arvosteluja yhteensä: {len(all_reviews)}")
Koreissa on päällekkäisyyttä, joten deduplikointi on välttämätöntä. Käytän nopeana avaimena arvostelun otsikon ja kirjoittajan nimeä — ei täydellinen ratkaisu, mutta se nappaa suurimman osan duplikaateista.
Vaihe 5: Väistä anti-bot-suojaukset (rotaatio, hidastus, uudelleenyritys)
Amazon käyttää AWS WAF Bot Controlia, ja siitä on tullut huomattavasti aggressiivisempi. Yksittäiset vastatoimet eivät enää riitä (pelkkä User-Agentien kierrätys tai pelkät viiveet).
| Tekniikka | Toteutus |
|---|---|
| User-Agentien kierrätys | Satunnainen valinta 10+ aidosta selausmerkkijonosta |
| Eksponentiaalinen backoff | 2 s → 4 s → 8 s -uudelleenyritykset 503-vastauksissa |
| Pyyntöjen rajoitus | random.uniform(2, 5) sekuntia sivujen välillä |
| Proxyn kierrätys | Kierrä asuinkäyttöön tarkoitettuja proxypalvelimia |
| Istunnon sormenjälki | Yhtenäiset evästeet + otsakkeet per istunto |
| TLS-naamiointi | Käytä curl_cffi-kirjastoa vakio-requests:in sijaan tuotannossa |
Tuotantokelpoinen retry-wrapper:
1import time, random
2USER_AGENTS = [
3 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.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/147.0.0.0 Safari/537.36",
5 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
6 "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
8]
9def scrape_with_retries(session, url, max_retries=3):
10 for attempt in range(max_retries):
11 try:
12 session.headers["User-Agent"] = random.choice(USER_AGENTS)
13 time.sleep(random.uniform(2, 5))
14 response = session.get(url, timeout=15)
15 # Tunnista estot
16 if "validateCaptcha" in response.url or "Robot Check" in response.text:
17 wait = (2 ** attempt) * 5
18 print(f"CAPTCHA havaittu. Odotetaan {wait}s...")
19 time.sleep(wait)
20 continue
21 if response.status_code in (429, 503):
22 wait = (2 ** attempt) * 2
23 print(f"Rajoitus osui ({response.status_code}). Odotetaan {wait}s...")
24 time.sleep(wait)
25 continue
26 if "ap_email" in response.text:
27 raise Exception("Login-muuri — evästeet vanhentuneet")
28 return BeautifulSoup(response.text, "lxml")
29 except Exception as e:
30 if attempt == max_retries - 1:
31 raise
32 print(f"Yritys {attempt + 1} epäonnistui: {e}")
33 return None
Huomio proxyeista: Amazon (AWS, GCP, Azure, DigitalOcean) verkkotasolla. Jos keräät yli muutaman sadan sivun verran dataa, asuinkäyttöön tarkoitetut proxyt ovat käytännössä välttämättömät — varaa budjetiksi 50–200+ dollaria kuukaudessa volyymista riippuen. Pienemmissä projekteissa (alle 100 pyyntöä päivässä) huolellinen hidastus omasta kotiyhteydestä toimii usein ihan hyvin.
Amazon tarkistaa myös TLS-sormenjälkiä. Pythonin vakio-requests-kirjastolla on . Tuotantokeruussa kannattaa harkita curl_cffi-kirjastoa, joka naamioi yhteyden aidon selaimen TLS-pinoksi. Opastason keruussa (muutama sata sivua) requests hyvillä otsakkeilla yleensä riittää.
Vaihe 6: Vie kerätyt Amazon-arvostelut CSV- tai Excel-muotoon
Kun olet kerännyt arvostelut, niiden saattaminen käyttökelpoiseen muotoon onnistuu helposti pandasilla:
1import pandas as pd
2df = pd.DataFrame(all_reviews)
3df.to_csv("amazon_reviews.csv", index=False)
4print(f"Vietiin {len(df)} arvostelua tiedostoon amazon_reviews.csv")
Esimerkkituloste:
| author | rating | title | content | date | country | verified |
|---|---|---|---|---|---|---|
| Sarah M. | 5.0 | Tämän vuoden paras ostos | Akku kestää koko päivän, näyttö on upea... | January 15, 2025 | the United States | True |
| Mike T. | 2.0 | Pettymys kahden viikon jälkeen | Latausportti lakkasi toimimasta... | February 3, 2025 | the United States | True |
| Priya K. | 4.0 | Erinomainen hinta-laatusuhde | Tekee kaiken mitä tarvitsen, vähän hidasta raskaissa sovelluksissa... | March 10, 2025 | the United States | False |
Excel-vienti: df.to_excel("amazon_reviews.xlsx", index=False) (vaatii openpyxl-kirjaston).
Google Sheetsiin gspread-kirjasto toimii, mutta vaatii — projektin luomisen, kahden API:n käyttöönoton, service account -tunnusten generoinnin ja taulukon jakamisen. Jos tämä kuulostaa monimutkaisemmalta kuin itse keruu, olet oikeassa. (Tässä kohtaa työkalu kuten , joka vie tiedot Google Sheetsiin yhdellä klikkauksella, alkaa näyttää todella houkuttelevalta.)
Bonus: Lisää tunneanalyysi kerättyihin arvosteluihin viidellä Python-rivillä
Useimmat keruuoppaat lopettavat CSV-vientiin. Mutta sentimentin pisteytys on se, mikä muuttaa raakadatan liiketoimintapäätöksiksi.
Nopein perusratkaisu käyttää TextBlobia:
1from textblob import TextBlob
2df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)
Tämä antaa jokaiselle arvostelulle polariteettipisteen välillä -1.0 (erittäin negatiivinen) ja +1.0 (erittäin positiivinen). Esimerkkituloste:
| content (lyhennetty) | rating | sentiment |
|---|---|---|
| "Battery lasts all day, screen is gorgeous..." | 5.0 | 0.65 |
| "The charging port stopped working after..." | 2.0 | -0.40 |
| "Does everything I need, minor lag on..." | 4.0 | 0.25 |
| "Absolute garbage. Returned immediately." | 1.0 | -0.75 |
| "It's okay. Nothing special but works." | 3.0 | 0.10 |
Mielenkiintoisia rivejä ovat ristiriidat — 3 tähden arvostelu, jonka tekstissä on positiivinen sävy, tai 5 tähden arvostelu, jossa kieli on negatiivista. Tällaiset erot paljastavat usein vivahteikkaampia asiakasmielipiteitä, joita pelkät tähtiarviot eivät näytä.

Tuotantotason tarkkuuteen suositus on Hugging Face Transformers. , ja verrattuna sanastopohjaisiin työkaluihin. nlptown/bert-base-multilingual-uncased-sentiment-malli osaa jopa ennustaa suoraan 1–5 tähden arvosanan:
1from transformers import pipeline
2clf = pipeline("sentiment-analysis",
3 model="nlptown/bert-base-multilingual-uncased-sentiment")
4df["predicted_stars"] = df["content"].apply(
5 lambda x: int(clf(str(x)[:512])[0]["label"][0])
6)
Amazon-arvostelut noudattavat — suuri piikki 5 tähdessä, pienempi piikki 1 tähdessä ja laakso keskellä. Tämä tarkoittaa, että keskimääräinen tähtiarvio on usein huono mittari tuotteen todellisesta laadusta. Erota 1 tähden ryhmä ja etsi siitä toistuvia teemoja — siellä piilee usein yksi korjattavissa oleva vika.
Rehellinen kompromissi: oma Python vs. maksulliset API:t vs. Thunderbit
Olen ylläpitänyt Python-pohjaisia Amazon-keruiskriptejä, ja sanon suoraan: ne hajoavat. Valitsimet muuttuvat, evästeet vanhenevat, Amazon julkaisee uuden bot-tunnistuskerroksen, ja yhtäkkiä lauantiaamusi kuluu keruuskriptin debuggaamiseen datan analysoinnin sijaan. Foorumikäyttäjät raportoivat samaa turhautumista — itse tehdyt skriptit, jotka "toimivat viime kuussa", vaativat nyt jatkuvaa paikkaamista.
Näin kolme päävaihtoehtoa vertautuvat:
| Kriteeri | DIY Python (BS4/Selenium) | Maksullinen scraping API | Thunderbit (no-code) |
|---|---|---|---|
| Käyttöönottoaika | 1–3 tuntia | 30 min (API-avain) | 2 minuuttia |
| Kustannus | Ilmainen (+ proxykulut) | 50–200+ $/kk | Ilmainen taso saatavilla |
| Login-muurin käsittely | Manuaalinen evästehallinta | Yleensä hoidettu | Hoituu automaattisesti |
| Ylläpito | Korkea (valitsimet hajoavat) | Matala (palveluntarjoaja ylläpitää) | Ei lainkaan (AI mukautuu) |
| Sivutus | Tarvitsee omaa koodia | Sisäänrakennettu | Sisäänrakennettu |
| Monimaan tuki | Erilliset istunnot per domain | Yleensä tuettu | Selauspohjainen = paikallisuutesi |
| Tunneanalyysi | Lisää oma koodi | Joskus mukana | Vie Sheetsiin, analysoi missä haluat |
| Paras käyttötapa | Oppiminen, täysi kontrolli | Skaala/tuotantoputket | Nopeat datapoiminnat, ei-kehittäjätiimit |
Python antaa täyden kontrollin ja on aidosti paras tapa oppia, miten verkkokeruu toimii konepellin alla. Maksulliset API:t (ScrapingBee, Oxylabs, Bright Data) ovat järkeviä tuotantoputkissa, joissa käytettävyys on tärkeämpää kuin hinta. Ja tiimeille, jotka tarvitsevat arvosteludataa ilman kehitystyön taakkaa — esimerkiksi verkkokaupan operointi, joka seuraa kilpailijoita viikoittain, tai markkinointitiimit, jotka hakevat asiakaskieltä mainosteksteihin — on olemassa kolmas polku.
Näin keräät Amazon-arvosteluja Thunderbitillä (ei koodia, ei ylläpitoa)
Rakensimme juuri niitä tilanteita varten, joissa Python-keruijan ylläpito tuntuu ylimitoitetulta. Työskentelytapa on tämä:
- Asenna
- Avaa Amazonin tuote-arvostelusivu selaimessasi (olet jo kirjautunut sisään, joten login-muuri ei ole ongelma)
- Napsauta "AI Suggest Fields" — Thunderbit lukee sivun ja ehdottaa sarakkeita kuten Author, Rating, Title, Review Text, Date ja Verified Purchase
- Napsauta "Scrape" — data poimitaan välittömästi, ja sivutus toimii valmiina
- Vie tiedot Exceliin, Google Sheetiin, Airtableen tai Notioniin
Suurin etu on siinä, että Thunderbitin AI lukee sivun rakenteen joka kerta uudelleen. Ei ylläpidettäviä CSS-valitsimia, ei evästehallintaa, ei anti-bot-koodia. Kun Amazon muuttaa HTML:ää, AI mukautuu. Lukijoille, jotka haluavat ohjelmallisen tavan ilman täyttä tee-se-itse-ratkaisua, Thunderbit tarjoaa myös — rakenteisen datan poiminnan API:n kautta AI-pohjaisella kenttätunnistuksella ilman valitsimien ylläpitoa.
Jos haluat syventyä Amazon-dataan, katso oppaamme ja .
Vinkkejä Amazon-arvostelujen keräämiseen laajassa mittakaavassa Pythonilla
Jos keräät arvosteluja monilta ASINeilta, muutama käytäntö säästää paljon hermoja:
- Eräytä ASINit ja lisää viiveitä tuotteiden väliin, ei vain sivujen väliin. Käytän yleensä 10–15 sekunnin taukoja ASINien välillä.
- Deduplikoi aggressiivisesti. Kun yhdistät useita tähtisuodatin- ja lajitteluyhdistelmiä, saat päällekkäisiä arvosteluja. Käytä
(title, author, date)-tupleja deduplikointiavainena. - Lokita epäonnistumiset. Seuraa, mitkä ASIN + sivu + suodinyhdistelmät epäonnistuivat, jotta voit yrittää ne uudelleen ilman, että koko aineisto pitää kerätä alusta.
- Tallenna tietokantaan suurissa projekteissa. Yksinkertainen SQLite-tietokanta skaalautuu paljon paremmin kuin kasvavat CSV-tiedostot:
1import sqlite3
2conn = sqlite3.connect("reviews.db")
3df.to_sql("reviews", conn, if_exists="append", index=False)
- Ajoita toistuvat keruut. Jatkuvaa seurantaa varten voit tehdä cron-ajon tai käyttää Thunderbitin Scheduled Scraper -ominaisuutta — kuvaa URL ja aikataulu, ja se hoitaa loput ilman palvelinta.
Lisävaihtoehtoja käsittelevät myös artikkelimme ja .
Lyhyt huomio laillisista ja eettisistä näkökohdista
Amazonin kieltävät nimenomaisesti "robotin, hämähäkin, scraperin tai muun automaattisen keinon käytön Amazon Servicesin käyttöön." Toisaalta viimeaikainen yhdysvaltalainen oikeuskäytäntö on ollut suopea julkisen datan keruulle. Tapauksessa liittovaltion oikeus katsoi, että julkisesti saatavilla olevan datan keruu ei riko käyttöehtoja, kun kerääjä ei ole kirjautunut "käyttäjä."
Tärkeä nyanssi: kirjautumisen takana olevan datan keruu (mikä on tämän oppaan aihe) siirtyy sopimusoikeuden alueelle, koska hyväksyit Amazonin käyttöehdot luodessasi tilin. Julkisesti näkyvien featured review -arvostelujen keruu on oikeudellisesti vähemmän riskialtista kuin login-muurin takaa kerääminen.
Käytännön ohjeet: älä jaa kerättyä dataa kaupallisesti edelleen, älä kerää henkilötietoja enempää kuin julkisesti näkyy, kunnioita robots.txt-tiedostoa ja kysy neuvoa lakiasiantuntijalta, jos käyttö on laajamittaista tai kaupallista. Tämä ei ole oikeudellista neuvontaa. Lisätietoa aiheesta löydät artikkelistamme .
Yhteenveto: kerää Amazon-arvosteluja Pythonilla tai ohita koodi kokonaan
Nopea kertaus siitä, mitä tämä opas käsitteli:
- Login-muuri on todellinen, mutta se on ohitettavissa evästepohjaisella tunnistautumisella — kopioi 7 evästettä selaimestasi ja syötä ne
requests.Session()-istuntoon - Käytä poimintaan
data-hook-valitsimia, älä CSS-luokkia, jotta ratkaisu ei hajoa parin viikon välein - Yhdistä tähtisuodattimet ja lajittelujärjestykset, jotta pääset 10 sivun sivutusrajan ohi ja saat käyttöön 500+ arvostelua tuotetta kohden
- Lisää tunneanalyysi TextBlobilla nopeana perustasona tai Hugging Face Transformersilla tuotantotason tarkkuuteen
- Ylläpidä anti-bot-suojauksia: hidastus, User-Agentien kierrätys, eksponentiaalinen backoff ja asuinkäyttöön tarkoitetut proxyt skaalassa
Python antaa täyden kontrollin ja on paras tapa ymmärtää, mitä konepellin alla tapahtuu. Mutta jos käyttötapasi on "tarvitsen kilpailijan arvosteludatan taulukkoon perjantaiksi" eikä "haluan rakentaa tuotantotason dataputken", räätälöidyn keruiskriptin ylläpitotaakka ei ehkä ole vaivan arvoinen.
hoitaa tunnistautumisen, valitsimet, sivutuksen ja viennin klikkauksilla — kokeile ja katso, sopiiko se työskentelytapaasi. Kun Amazon jatkaa anti-bot-suojien kiristämistä, reaaliajassa mukautuvat AI-pohjaiset työkalut muuttuvat yhä useammin mukavasta lisästä välttämättömyydeksi.
Voit myös tutustua nähdäksesi videomuotoisia läpikäyntejä keruutyönkuluista.
UKK
1. Voiko Amazon-arvosteluja kerätä ilman kirjautumista?
Kyllä, mutta vain noin 8 "featured reviewta", jotka näkyvät tuotesivulla (/dp/{ASIN}/). Täydet arvostelusivut, joissa on lajittelu, suodatus ja sivutus, vaativat kirjautumisen loppuvuodesta 2024 alkaen. Useimmissa liiketoimintakäytöissä sinun täytyy käsitellä login-muuri.
2. Onko Amazon-arvostelujen kerääminen laitonta?
Amazonin käyttöehdot kieltävät automatisoidun keruun. Viimeaikainen yhdysvaltalainen oikeuskäytäntö (Meta v. Bright Data, 2024; hiQ v. LinkedIn) tukee kuitenkin julkisesti saatavilla olevan datan keruuta. Kirjautumisen takana oleva keruu sisältää suuremman oikeudellisen riskin, koska hyväksyit Amazonin käyttöehdot. Kysy neuvoa lakiasiantuntijalta kaupalliseen käyttöön.
3. Kuinka monta Amazon-arvostelua voin kerätä per tuote?
Amazon rajoittaa arvostelusivut 10 sivuun per lajittelu- ja tähtisuodatinyhdistelmä. Käyttämällä kaikkia 5 tähtisuodatinta × 2 lajittelujärjestystä voit päästä jopa 100 sivuun (noin 1 000 arvostelua) per tuote. Avainsanasuodattimilla teoreettinen yläraja on paljon korkeampi, mutta päällekkäisyyksiä syntyy paljon.
4. Mikä on paras Python-kirjasto Amazon-arvostelujen keräämiseen?
requests + BeautifulSoup staattisen HTML:n parsintaan on yleisin ja luotettavin yhdistelmä. Selenium on hyödyllinen silloin, kun JavaScript-renderöinti on pakollista. Jos haluat no-code-vaihtoehdon, joka hoitaa login-muurit ja sivutuksen automaattisesti, kokeile .
5. Miten välttelen estot Amazonia kerätessäni?
Kierrätä User-Agent-merkkijonoja vähintään 10 aidon selausmerkkijonon poolista, lisää satunnaiset 2–5 sekunnin viiveet pyyntöjen väliin, ota käyttöön eksponentiaalinen backoff 503/429-virheissä, käytä laajassa mittakaavassa asuinkäyttöön tarkoitettuja proxyeja (datakeskus-IP:t estetään usein etukäteen) ja pidä evästeet yhtenäisinä pyynnöstä toiseen. Jos haluat täysin huoltovapaan lähestymistavan, Thunderbit hoitaa anti-bot-suojaukset automaattisesti selaussessiosi kautta.
Lisätietoja