Cara Saya Scrape Ulasan Amazon dengan Python (Lewat Login Wall)

Terakhir diperbarui pada April 16, 2026

Scraper ulasan Amazon saya sempat jalan mulus selama enam minggu — lalu suatu pagi hasilnya 200 OK, tapi halaman yang muncul kosong melompong. Tidak ada error, tidak ada CAPTCHA, hanya HTML kosong di tempat ratusan ulasan biasanya tampil.

Kalau ini terdengar familiar, Anda tidak sendirian. Pada akhir 2025, Amazon mulai membatasi halaman ulasan lengkap di balik login wall, dan banyak skrip scraping Python mendadak berhenti bekerja dalam semalam. Beberapa bulan terakhir saya habiskan di untuk mengurai masalah ini dari dua sisi — membangun AI scraper kami sekaligus memelihara pipeline ulasan Python saya sendiri — jadi saya merasa ini waktu yang pas untuk menulis panduan yang dulu sangat saya harap sudah ada saat skrip saya pertama kali mati. Post ini membahas pendekatan yang benar-benar bekerja: autentikasi berbasis cookie, selector stabil yang tahan terhadap obfuscation CSS Amazon, cara mengakali batas pagination 10 halaman, pertahanan anti-bot, dan bonus bagian analisis sentimen yang mengubah teks ulasan mentah menjadi insight bisnis yang nyata. Dan kalau di tengah jalan Anda berpikir, "Saya lebih pilih tidak repot memelihara semua kode ini," saya akan tunjukkan bagaimana menangani pekerjaan yang sama dalam sekitar dua menit tanpa Python.

Apa Itu Scraping Ulasan Amazon (dan Kenapa Penting)?

Scraping ulasan Amazon adalah proses mengekstrak data ulasan pelanggan secara terprogram — rating bintang, teks ulasan, nama penulis, tanggal, badge pembelian terverifikasi — dari halaman produk Amazon. Karena Amazon (dan tidak pernah mengembalikannya), web scraping jadi satu-satunya jalur terprogram untuk mengakses data ini.

Angkanya memang mendukung. , dan . Menampilkan cuma 5 ulasan di halaman produk bisa . Perusahaan yang secara sistematis menganalisis sentimen ulasan melihat . Ini bukan sekadar data science abstrak — ini competitive intelligence, sinyal perbaikan produk, dan bahasa pemasaran, semuanya tersaji jelas dalam teks di server Amazon.

Kenapa Scrape Ulasan Amazon dengan Python

Python tetap jadi bahasa andalan untuk pekerjaan ini. Python adalah , dan ekosistemnya — requests, BeautifulSoup, pandas, Scrapy — membuat web scraping tetap gampang diakses bahkan untuk orang yang bukan developer penuh waktu.

Tim yang berbeda memanfaatkan data ini dengan cara yang berbeda:

TimKasus PenggunaanApa yang Diekstrak
Product / R&DMengidentifikasi keluhan yang berulang, memprioritaskan perbaikanTeks ulasan 1–2 bintang, frekuensi kata kunci
SalesMemantau sentimen produk kompetitorRating, tren volume ulasan
MarketingMengambil bahasa pelanggan untuk copy iklanFrasa positif dari ulasan, penyebutan fitur
Ecommerce OpsMelacak sentimen produk sendiri dari waktu ke waktuDistribusi bintang, rasio verified purchase
Market ResearchMembandingkan pemimpin kategori berdasarkan fiturDataset ulasan multi-ASIN

Sebuah brand peralatan dapur , lalu merumuskan ulang produknya dan merebut kembali peringkat #1 Best Seller dalam 60 hari. Perusahaan pelacak kebugaran , mengidentifikasi masalah alergi lateks, meluncurkan varian hypoallergenic, dan memangkas retur sebesar 40%. Inilah jenis ROI yang membuat upaya engineering terasa sangat layak.

Login Wall: Kenapa Scraper Ulasan Amazon Anda Berhenti Bekerja

Pada 14 November 2024, . Perubahan ini dikonfirmasi di dan . Kalau Anda membuka /product-reviews/{ASIN}/ di jendela incognito, Anda akan diarahkan ke halaman sign-in, bukan data ulasan.

python-web-scraping-diagram.webp

Gejalanya memang halus: skrip Anda tetap mendapat respons 200 OK, tetapi isi HTML-nya berisi form login (name="email", id="ap_password") alih-alih ulasan. Tidak ada kode error. Tidak ada CAPTCHA. Hanya... tidak ada yang berguna.

Amazon melakukan ini untuk alasan anti-bot dan kepatuhan regional. Penerapannya juga tidak selalu konsisten — kadang browser baru masih memuat beberapa ulasan sebelum wall aktif, terutama di halaman pertama — tetapi untuk scraper yang berjalan dalam skala besar, anggap saja login wall selalu aktif.

Domain negara Amazon yang berbeda (.de, .co.uk, .co.jp) memberlakukan wall ini secara terpisah. Seperti kata salah satu pengguna forum: "login untuk tiap negara diperlukan." Cookie .com Anda tidak akan berlaku di .co.uk.

Halaman produk Amazon (URL /dp/{ASIN}/) masih menampilkan sekitar tanpa autentikasi. Ulasan ini dipilih Amazon lewat algoritma dan berguna untuk cek sentimen cepat, tetapi tidak bisa diurutkan, difilter, atau dipaginasi.

Halaman ulasan penuh (/product-reviews/{ASIN}/) — dengan sorting berdasarkan terbaru, filter per rating bintang, dan pagination ratusan ulasan — membutuhkan login.

Kalau Anda cuma butuh beberapa ulasan untuk cek cepat, scrape saja halaman produk. Untuk ratusan atau ribuan, Anda harus menangani autentikasi.

Yang Anda Butuhkan Sebelum Mulai: Setup Python dan Library

Sebelum menulis kode, ini setup yang dibutuhkan:

  • Tingkat Kesulitan: Menengah (nyaman dengan Python, paham HTML dasar)
  • Waktu yang Dibutuhkan: ~45 menit untuk pipeline penuh; ~10 menit untuk scrape dasar
  • Yang Dibutuhkan: Python 3.8+, browser Chrome, akun Amazon yang valid

Install library inti:

1pip install requests beautifulsoup4 lxml pandas textblob

Opsional (untuk analisis sentimen tingkat lanjut):

1pip install transformers torch

Apa itu ASIN? Itu identifier produk Amazon sepanjang 10 karakter. Anda bisa menemukannya di URL produk apa pun — misalnya, pada amazon.com/dp/B0BCNKKZ91, ASIN-nya adalah B0BCNKKZ91. Itulah kunci yang nanti dipakai di URL ulasan.

Pendekatan paling andal adalah login ke Amazon di browser, menyalin cookie sesi Anda, lalu menyuntikkannya ke requests.Session() di Python. Cara ini menghindari CAPTCHA dan SMS 2FA yang sering mengganggu automasi login berbasis Selenium.

Anda membutuhkan tujuh cookie ini:

Nama CookieFungsi
session-idID sesi yang berputar
session-id-timeTimestamp sesi
session-tokenToken sesi yang berputar
ubid-mainIdentitas penjelajahan pengguna
at-mainToken autentikasi utama
sess-at-mainAuth berbasis sesi
x-mainIdentifier berbasis email pengguna
  1. Login ke amazon.com di Chrome
  2. Buka DevTools (F12 atau klik kanan → Inspect)
  3. Masuk ke Application → Storage → Cookies → https://www.amazon.com
  4. Temukan setiap nama cookie di tabel dan salin nilainya
  5. Format semuanya sebagai string yang dipisahkan tanda titik koma untuk Python

Setel session Anda seperti ini:

1import requests
2session = requests.Session()
3# Tempel nilai cookie Anda di sini
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)

Penting: Gunakan objek session yang sama untuk semua request Anda. Ini menjaga cookie tetap konsisten dan meniru perilaku browser sungguhan. Cookie biasanya bertahan beberapa hari hingga beberapa minggu di bawah beban scraping, tetapi kalau Anda mulai kena redirect login lagi, perbarui cookie dari browser Anda.

Untuk marketplace selain .com, nama cookie sedikit berbeda — amazon.de memakai at-acbde alih-alih at-main, amazon.co.uk memakai at-acbuk, dan seterusnya. Setiap marketplace butuh session independennya sendiri.

Langkah 2: Bangun Request dan Parse HTML Ulasan dengan BeautifulSoup

URL ulasan Amazon mengikuti pola ini:

1https://www.amazon.com/product-reviews/{ASIN}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1

Fungsi inti:

1from bs4 import BeautifulSoup
2import time, random
3def get_soup(session, url):
4    time.sleep(random.uniform(2, 5))  # Jeda yang sopan
5    response = session.get(url, timeout=15)
6    # Deteksi login wall
7    if "ap_email" in response.text or "Amazon Sign-In" in response.text:
8        raise Exception("Login wall terdeteksi — refresh cookie Anda")
9    if response.status_code != 200:
10        raise Exception(f"HTTP {response.status_code}")
11    return BeautifulSoup(response.text, "lxml")

Satu trik kecil yang membantu: sebelum membuka halaman ulasan, kunjungi dulu halaman produk. Ini membangun pola browsing yang lebih natural dalam session Anda.

1# Kunjungi halaman produk terlebih dahulu (meniru browsing nyata)
2product_url = f"https://www.amazon.com/dp/{asin}"
3session.get(product_url, timeout=15)
4time.sleep(random.uniform(1, 3))
5# Lalu buka halaman ulasan
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)

Langkah 3: Gunakan Selector Stabil untuk Mengambil Data Ulasan (Berhenti Mengandalkan CSS Class)

Di sinilah kebanyakan tutorial dari 2022–2023 gagal. Amazon mengaburkan nama CSS class — mereka berubah secara berkala, dan seperti yang dikatakan seorang developer yang frustrasi di forum: "tidak ada satu pun pola untuk nama class pada tag span."

Solusinya: Amazon memakai atribut data-hook pada elemen ulasan, dan ini jauh lebih stabil. Ini identifier semantik yang dipakai kode frontend Amazon sendiri, jadi tidak diacak.

Field UlasanSelector Stabil (data-hook)Selector Rapuh (class)
Teks ulasan[data-hook="review-body"].review-text-content (berubah)
Rating bintang[data-hook="review-star-rating"].a-icon-alt (ambigu)
Judul ulasan[data-hook="review-title"].review-title (kadang-kadang)
Nama penulisspan.a-profile-nameRelatif stabil
Tanggal ulasan[data-hook="review-date"].review-date (tergantung region)
Verified purchase[data-hook="avp-badge"]span.a-size-mini

Kode ekstraksi dengan selector data-hook:

1import re
2def extract_reviews(soup):
3    reviews = []
4    review_divs = soup.select('[data-hook="review"]')
5    for div in review_divs:
6        # Rating bintang
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        # Judul
15        title_el = div.select_one('[data-hook="review-title"]')
16        title = title_el.get_text(strip=True) if title_el else ""
17        # Isi ulasan
18        body_el = div.select_one('[data-hook="review-body"]')
19        body = body_el.get_text(strip=True) if body_el else ""
20        # Penulis
21        author_el = div.select_one('span.a-profile-name')
22        author = author_el.get_text(strip=True) if author_el else ""
23        # Tanggal dan negara
24        date_el = div.select_one('[data-hook="review-date"]')
25        date_text = date_el.get_text(strip=True) if date_el else ""
26        # Format: "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        # Verified purchase
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

Saya sudah menjalankan set selector ini pada beberapa ASIN selama berbulan-bulan, dan atribut data-hook belum berubah sama sekali. Sementara CSS class-nya, sudah berganti setidaknya dua kali dalam periode yang sama.

Langkah 4: Tangani Pagination dan Batas 10 Halaman Amazon

Amazon membatasi parameter pageNumber hingga 10 halaman, masing-masing berisi 10 ulasan — batas keras sekitar 100 ulasan per kombinasi filter. Tombol "Next page" akan hilang setelah halaman ke-10.

Loop pagination dasar:

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  # Tidak ada ulasan lagi di halaman ini
8    all_reviews.extend(page_reviews)
9    print(f"Halaman {page}: {len(page_reviews)} ulasan")

Cara Mendapatkan Lebih dari 10 Halaman Ulasan Amazon

Workaround-nya adalah filter bucketing. Setiap kombinasi filterByStar dan sortBy punya jendela 10 halaman independen sendiri.

Nilai filter bintang: one_star, two_star, three_star, four_star, five_star
Nilai sort: recent, helpful (default)

Dengan menggabungkan 5 filter bintang × 2 urutan sort, Anda bisa mengakses hingga 100 halaman, atau 1.000 ulasan per produk — dan untuk produk dengan distribusi bintang yang tidak merata, Anda sering bisa mendekati seluruh set ulasan.

1star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
2sort_orders = ["recent", "helpful"]
3all_reviews = []
4seen_titles = set()  # Dedup sederhana
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                # Dedup berdasarkan kombinasi judul + nama penulis
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}] Halaman {page}: {len(page_reviews)} ulasan")
23print(f"Total ulasan unik: {len(all_reviews)}")

Akan ada overlap antar bucket, jadi dedup itu penting. Saya memakai kombinasi judul ulasan + nama penulis sebagai key cepat — tidak sempurna, tetapi menangkap sebagian besar duplikat.

Langkah 5: Hindari Pertahanan Anti-Bot (Rotasi, Throttling, Retry)

Amazon memakai AWS WAF Bot Control, dan sistemnya makin agresif. Countermeasure satu lapis (hanya rotate User-Agent, hanya menambah jeda) sudah tidak cukup.

TeknikImplementasi
Rotasi User-AgentPilih acak dari 10+ string browser asli
Exponential backoffDelay retry 2s → 4s → 8s pada 503
Request throttlingrandom.uniform(2, 5) detik antar halaman
Rotasi proxyGanti-ganti residential proxy
Session fingerprintCookie + header konsisten per session
TLS impersonationPakai curl_cffi alih-alih requests standar untuk produksi

Wrapper retry yang siap produksi:

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            # Deteksi blokir
16            if "validateCaptcha" in response.url or "Robot Check" in response.text:
17                wait = (2 ** attempt) * 5
18                print(f"CAPTCHA terdeteksi. Menunggu {wait}s...")
19                time.sleep(wait)
20                continue
21            if response.status_code in (429, 503):
22                wait = (2 ** attempt) * 2
23                print(f"Rate limited ({response.status_code}). Menunggu {wait}s...")
24                time.sleep(wait)
25                continue
26            if "ap_email" in response.text:
27                raise Exception("Login wall — cookie sudah kedaluwarsa")
28            return BeautifulSoup(response.text, "lxml")
29        except Exception as e:
30            if attempt == max_retries - 1:
31                raise
32            print(f"Percobaan {attempt + 1} gagal: {e}")
33    return None

Catatan soal proxy: Amazon (AWS, GCP, Azure, DigitalOcean) di level jaringan. Kalau Anda scraping lebih dari beberapa ratus halaman, residential proxy pada praktiknya nyaris wajib — siapkan biaya sekitar $50–200+/bulan tergantung volume. Untuk proyek kecil (di bawah 100 request/hari), throttling yang hati-hati dari IP rumah biasanya masih cukup.

Amazon juga memeriksa TLS fingerprint. Library requests bawaan Python punya . Untuk scraper produksi, pertimbangkan curl_cffi, yang meniru TLS stack browser asli. Untuk scraping skala tutorial (beberapa ratus halaman), requests dengan header yang baik biasanya sudah cukup.

Langkah 6: Ekspor Ulasan Amazon yang Sudah Discrape ke CSV atau Excel

Setelah ulasan terkumpul, memindahkannya ke format yang bisa dipakai sangat mudah dengan pandas:

1import pandas as pd
2df = pd.DataFrame(all_reviews)
3df.to_csv("amazon_reviews.csv", index=False)
4print(f"Mengekspor {len(df)} ulasan ke amazon_reviews.csv")

Contoh output:

authorratingtitlecontentdatecountryverified
Sarah M.5.0Best purchase this yearBattery lasts all day, screen is gorgeous...January 15, 2025the United StatesTrue
Mike T.2.0Disappointed after 2 weeksThe charging port stopped working...February 3, 2025the United StatesTrue
Priya K.4.0Great value for the priceDoes everything I need, minor lag on heavy apps...March 10, 2025the United StatesFalse

Untuk ekspor Excel: df.to_excel("amazon_reviews.xlsx", index=False) (butuh openpyxl).

Untuk Google Sheets, library gspread memang bisa dipakai, tetapi memerlukan — membuat project, mengaktifkan dua API, membuat kredensial service account, lalu membagikan sheet. Kalau setup-nya terasa lebih ribet daripada scraping-nya sendiri, Anda tidak salah. (Ini salah satu momen ketika alat seperti yang bisa ekspor ke Google Sheets dengan satu klik mulai terasa sangat menarik.)

Bonus: Tambahkan Analisis Sentimen ke Ulasan yang Discrape dalam 5 Baris Python

Kebanyakan tutorial scraping berhenti di ekspor CSV. Padahal, analisis sentimenlah yang mengubah data mentah menjadi keputusan bisnis.

Baseline tercepat memakai TextBlob:

1from textblob import TextBlob
2df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)

Hasilnya berupa skor polaritas dari -1.0 (sangat negatif) sampai +1.0 (sangat positif) untuk tiap ulasan. Contoh output:

content (dipotong)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

Baris yang menarik adalah yang tidak selaras — ulasan 3 bintang dengan teks sentimen positif, atau ulasan 5 bintang dengan bahasa negatif. Ketidaksesuaian ini sering mengungkap opini pelanggan yang lebih bernuansa, sesuatu yang tidak terlihat kalau hanya mengandalkan rating bintang.

ai-review-analysis.webp

Untuk akurasi tingkat produksi, rekomendasinya adalah Hugging Face Transformers. , dan dibanding alat berbasis lexicon. Model nlptown/bert-base-multilingual-uncased-sentiment bahkan bisa memprediksi rating 1–5 bintang secara langsung:

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)

Ulasan Amazon mengikuti — lonjakan besar di 5 bintang, lonjakan lebih kecil di 1 bintang, dan lembah di tengah. Artinya, rata-rata rating bintang sering jadi proksi yang buruk untuk kualitas produk sebenarnya. Pisahkan klaster 1 bintang dan gali tema yang berulang — biasanya di situlah ada satu cacat yang sebenarnya bisa diperbaiki.

Trade-off yang Jujur: Python DIY vs. Paid Scraping API vs. Thunderbit

Saya sudah memelihara scraper Python untuk Amazon, dan jujur saja: mereka sering rusak. Selector berubah, cookie kedaluwarsa, Amazon meluncurkan lapisan deteksi bot baru, lalu tiba-tiba Sabtu pagi Anda habis buat debug scraper, bukan menganalisis data. Pengguna forum mengalami frustrasi yang sama — skrip DIY yang "bulan lalu masih jalan" sekarang butuh patch terus-menerus.

Begini perbandingan tiga pendekatan utama:

KriteriaPython DIY (BS4/Selenium)Paid Scraping APIThunderbit (No-Code)
Waktu setup1–3 jam30 menit (API key)2 menit
BiayaGratis (+ biaya proxy)$50–200+/bulanAda free tier
Penanganan login wallManajemen cookie manualBiasanya ditanganiDitangani otomatis
MaintenanceTinggi (selector sering rusak)Rendah (provider yang memelihara)Nol (AI beradaptasi)
PaginationPerlu kode customSudah built-inSudah built-in
Dukungan multi-negaraSession terpisah per domainBiasanya didukungBerbasis browser = sesuai locale Anda
Analisis sentimenTambah kode sendiriKadang disertakanEkspor ke Sheets, analisis di mana saja
Paling cocok untukBelajar, kontrol penuhPipeline skala produksiTarikan data cepat, tim non-dev

Python memberi Anda kontrol penuh dan memang cara terbaik untuk memahami cara kerja web scraping dari dalam. Tapi kalau kasus Anda adalah "saya butuh data ulasan kompetitor dalam spreadsheet sebelum Jumat" alih-alih "saya ingin membangun pipeline data produksi," beban maintenance scraper custom mungkin tidak sepadan.

Cara Scrape Ulasan Amazon dengan Thunderbit (Tanpa Kode, Tanpa Maintenance)

Kami membuat untuk menangani tepat skenario saat memelihara scraper Python terasa terlalu berlebihan. Alurnya seperti ini:

  1. Install
  2. Buka halaman ulasan produk Amazon di browser Anda (Anda sudah login, jadi login wall bukan masalah)
  3. Klik "AI Suggest Fields" — Thunderbit membaca halaman dan menyarankan kolom seperti Author, Rating, Title, Review Text, Date, Verified Purchase
  4. Klik "Scrape" — data langsung diekstrak, dengan pagination bawaan
  5. Ekspor ke Excel, Google Sheets, Airtable, atau Notion

Keunggulan utamanya adalah AI Thunderbit membaca struktur halaman dari awal setiap kali. Tidak ada CSS selector yang harus dipelihara, tidak ada manajemen cookie, tidak ada kode anti-bot. Saat Amazon mengubah HTML mereka, AI akan menyesuaikan diri. Untuk pembaca yang menginginkan akses programatik tanpa harus DIY penuh, Thunderbit juga menawarkan — ekstraksi data terstruktur via API dengan deteksi field berbasis AI, tanpa maintenance selector.

Untuk pembahasan lebih dalam soal data Amazon, lihat panduan kami tentang dan .

Tips untuk Scraping Ulasan Amazon dalam Skala Besar dengan Python

Kalau Anda scraping ulasan dari banyak ASIN, beberapa praktik berikut akan menyelamatkan Anda dari banyak pusing:

  • Batch ASIN Anda dengan jeda antar produk, bukan hanya antar halaman. Saya memakai jeda 10–15 detik antar ASIN.
  • Dedup secara agresif. Saat menggabungkan banyak kombinasi filter bintang dan urutan sort, Anda akan mendapat ulasan yang tumpang tindih. Gunakan set tuple (title, author, date) sebagai key dedup.
  • Catat kegagalan. Lacak kombinasi ASIN + halaman + filter yang gagal agar bisa diulang tanpa scraping ulang semuanya.
  • Simpan ke database untuk proyek besar. Database SQLite sederhana jauh lebih scalable dibanding file CSV yang terus membesar:
1import sqlite3
2conn = sqlite3.connect("reviews.db")
3df.to_sql("reviews", conn, if_exists="append", index=False)
  • Jadwalkan scraping berkala. Untuk monitoring berkelanjutan, buat cron job atau gunakan fitur Scheduled Scraper dari Thunderbit — cukup deskripsikan URL dan jadwalnya, sisanya ditangani tanpa server.

Untuk pendekatan tambahan, tulisan kami tentang dan membahas opsi lain.

Amazon secara eksplisit melarang "penggunaan robot, spider, scraper, atau cara otomatis lainnya untuk mengakses layanan Amazon." Meski begitu, putusan hukum terbaru di AS cenderung lebih menguntungkan scraper untuk data publik. Dalam , pengadilan federal memutuskan bahwa scraping data yang bisa diakses publik tidak melanggar terms of service ketika scraper tersebut bukan "user" yang sedang login.

Nuansanya: scraping di balik login (yang dibahas tutorial ini) membawa Anda ke ranah hukum kontrak, karena Anda menyetujui ToS Amazon saat membuat akun. Scraping featured reviews yang terlihat publik memiliki risiko hukum lebih rendah dibanding scraping lewat login wall.

Panduan praktis: jangan redistribusikan data hasil scraping untuk tujuan komersial, jangan scraping data pribadi pengguna di luar yang memang terlihat publik, hormati robots.txt, dan konsultasikan dengan penasihat hukum untuk penggunaan skala besar atau komersial. Ini bukan nasihat hukum. Untuk pembahasan lebih lanjut, lihat ringkasan kami tentang .

Kesimpulan: Scrape Ulasan Amazon dengan Python atau Lewatkan Koding Sama Sekali

Ringkasan cepat dari panduan ini:

  • Login wall itu nyata, tetapi bisa diatasi dengan autentikasi berbasis cookie — salin 7 cookie dari browser Anda dan masukkan ke requests.Session()
  • Gunakan selector data-hook, bukan CSS class, agar ekstraksi tidak rusak tiap beberapa minggu
  • Gabungkan filter bintang dan urutan sort untuk melewati batas pagination 10 halaman dan mengakses 500+ ulasan per produk
  • Tambahkan analisis sentimen dengan TextBlob untuk baseline cepat atau Hugging Face Transformers untuk akurasi produksi
  • Pertahankan pertahanan anti-bot: throttling, rotasi User-Agent, exponential backoff, dan residential proxy untuk skala besar

Python memberi Anda kontrol penuh dan merupakan cara terbaik untuk memahami apa yang terjadi di balik layar. Tapi kalau kebutuhan Anda adalah "saya butuh data ulasan kompetitor dalam spreadsheet sebelum hari Jumat" ketimbang "saya ingin membangun pipeline data produksi," biaya maintenance scraper custom mungkin tidak sepadan.

menangani autentikasi, selector, pagination, dan ekspor hanya lewat beberapa klik — coba dan lihat apakah cocok dengan alur kerja Anda. Seiring Amazon terus memperketat tindakan anti-bot, alat berbasis AI yang beradaptasi secara real time akan makin berubah dari sekadar nice-to-have jadi kebutuhan.

Anda juga bisa menjelajahi untuk walkthrough video tentang workflow scraping.

FAQs

1. Bisakah Anda scrape ulasan Amazon tanpa login?

Bisa, tetapi hanya sekitar 8 "featured reviews" yang ditampilkan di halaman detail produk (/dp/{ASIN}/). Halaman ulasan penuh dengan sorting, filtering, dan pagination memerlukan autentikasi sejak akhir 2024. Untuk sebagian besar use case bisnis, Anda perlu menangani login wall.

2. Apakah legal scrape ulasan Amazon?

Terms of Service Amazon melarang scraping otomatis. Namun, putusan hukum terbaru di AS (Meta v. Bright Data, 2024; hiQ v. LinkedIn) mendukung scraping data yang dapat diakses publik. Scraping di balik login membawa risiko hukum lebih tinggi karena Anda telah menyetujui ToS Amazon. Konsultasikan dengan penasihat hukum untuk penggunaan komersial.

3. Berapa banyak ulasan Amazon yang bisa saya scrape per produk?

Amazon membatasi halaman ulasan menjadi 10 per kombinasi sort order dan filter bintang. Dengan memanfaatkan semua 5 filter bintang × 2 urutan sort, Anda bisa mengakses hingga 100 halaman (sekitar 1.000 ulasan) per produk. Dengan filter kata kunci, batas teoretisnya jauh lebih tinggi, meskipun duplikatnya juga jauh lebih banyak.

4. Library Python terbaik untuk scraping ulasan Amazon apa?

requests + BeautifulSoup untuk parsing HTML statis adalah kombinasi yang paling umum dan andal. Selenium berguna jika rendering JavaScript diperlukan. Untuk alternatif no-code yang menangani login wall dan pagination secara otomatis, coba .

5. Bagaimana cara menghindari diblokir saat scraping Amazon?

Rotasi string User-Agent dari pool berisi 10+ string browser asli, tambahkan jeda acak 2–5 detik antar request, terapkan exponential backoff pada error 503/429, gunakan residential proxy untuk skala besar (IP datacenter sudah diblok sejak awal), dan jaga cookie sesi tetap konsisten di semua request. Untuk pendekatan tanpa maintenance, Thunderbit menangani pertahanan anti-bot secara otomatis melalui session browser Anda.

Pelajari Lebih Lanjut

Daftar Isi

Coba Thunderbit

Ambil leads & data lainnya hanya dalam 2 klik. Didukung AI.

Dapatkan Thunderbit Gratis
Ekstrak Data dengan AI
Dengan mudah transfer data ke Google Sheets, Airtable, atau Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week