Miten kerään Amazon-arvosteluja Pythonilla (login-muurin ohi)

Viimeksi päivitetty April 16, 2026

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:

TiimiKäyttötapausMitä he poimivat
Tuote / R&DToistuvien valitusten tunnistaminen, korjausten priorisointi1–2 tähden arvostelujen teksti, avainsanojen esiintyvyys
MyyntiKilpailijoiden tuotteiden sentimentin seurantaArviot, arvostelumäärien trendit
MarkkinointiAsiakkaiden käyttämän kielen hyödyntäminen mainosteksteissäPositiiviset ilmaukset, ominaisuusmaininnat
Verkkokaupan operointiOman tuotteen sentimentin seuranta ajan yliTähtijakauma, Verified Purchase -suhde
MarkkinatutkimusKategorian kärkipelaajien vertailu ominaisuuksittainUsean 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

  1. marraskuuta 2024 . Muutos vahvistettiin sekä että . Jos avaat /product-reviews/{ASIN}/-osoitteen yksityisessä selausikkunassa, sinut ohjataan kirjautumissivulle arvosteludatan sijaan.

python-web-scraping-diagram.webp

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.

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 nimiTarkoitus
session-idVaihtuva istunnon tunniste
session-id-timeIstunnon aikaleima
session-tokenVaihtuva istuntotunniste
ubid-mainKäyttäjän selaustunniste
at-mainEnsisijainen tunnistautumistunniste
sess-at-mainIstuntokohtainen tunnistus
x-mainKäyttäjäsähköpostiin sidottu tunniste

Näin poimit evästeet Chrome DevToolsista

  1. Kirjaudu Amazoniin Chromessa
  2. Avaa DevTools (F12 tai hiiren oikea → Inspect)
  3. Siirry kohtaan ApplicationStorageCookieshttps://www.amazon.com
  4. Etsi taulukosta jokainen evästetunnus ja kopioi sen arvo
  5. 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 nimispan.a-profile-nameMelko 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).

TekniikkaToteutus
User-Agentien kierrätysSatunnainen valinta 10+ aidosta selausmerkkijonosta
Eksponentiaalinen backoff2 s → 4 s → 8 s -uudelleenyritykset 503-vastauksissa
Pyyntöjen rajoitusrandom.uniform(2, 5) sekuntia sivujen välillä
Proxyn kierrätysKierrä asuinkäyttöön tarkoitettuja proxypalvelimia
Istunnon sormenjälkiYhtenäiset evästeet + otsakkeet per istunto
TLS-naamiointiKä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:

authorratingtitlecontentdatecountryverified
Sarah M.5.0Tämän vuoden paras ostosAkku kestää koko päivän, näyttö on upea...January 15, 2025the United StatesTrue
Mike T.2.0Pettymys kahden viikon jälkeenLatausportti lakkasi toimimasta...February 3, 2025the United StatesTrue
Priya K.4.0Erinomainen hinta-laatusuhdeTekee kaiken mitä tarvitsen, vähän hidasta raskaissa sovelluksissa...March 10, 2025the United StatesFalse

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)ratingsentiment
"Battery lasts all day, screen is gorgeous..."5.00.65
"The charging port stopped working after..."2.0-0.40
"Does everything I need, minor lag on..."4.00.25
"Absolute garbage. Returned immediately."1.0-0.75
"It's okay. Nothing special but works."3.00.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ä.

ai-review-analysis.webp

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:

KriteeriDIY Python (BS4/Selenium)Maksullinen scraping APIThunderbit (no-code)
Käyttöönottoaika1–3 tuntia30 min (API-avain)2 minuuttia
KustannusIlmainen (+ proxykulut)50–200+ $/kkIlmainen taso saatavilla
Login-muurin käsittelyManuaalinen evästehallintaYleensä hoidettuHoituu automaattisesti
YlläpitoKorkea (valitsimet hajoavat)Matala (palveluntarjoaja ylläpitää)Ei lainkaan (AI mukautuu)
SivutusTarvitsee omaa koodiaSisäänrakennettuSisäänrakennettu
Monimaan tukiErilliset istunnot per domainYleensä tuettuSelauspohjainen = paikallisuutesi
TunneanalyysiLisää oma koodiJoskus mukanaVie Sheetsiin, analysoi missä haluat
Paras käyttötapaOppiminen, täysi kontrolliSkaala/tuotantoputketNopeat 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ä:

  1. Asenna
  2. Avaa Amazonin tuote-arvostelusivu selaimessasi (olet jo kirjautunut sisään, joten login-muuri ei ole ongelma)
  3. Napsauta "AI Suggest Fields" — Thunderbit lukee sivun ja ehdottaa sarakkeita kuten Author, Rating, Title, Review Text, Date ja Verified Purchase
  4. Napsauta "Scrape" — data poimitaan välittömästi, ja sivutus toimii valmiina
  5. 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

Sisällysluettelo

Kokeile Thunderbitiä

Poimi liidejä ja muuta dataa vain 2 klikkauksella. AI:n voimalla.

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