Cara Scrape Ulasan Amazon dengan Python: Panduan Lengkap di 2025

Terakhir diperbarui pada August 21, 2026
Cara Scrape Ulasan Amazon dengan Python: Panduan Lengkap di 2025
Ringkasan AI

Panduan ini menjelaskan cara scrape ulasan Amazon dengan Python setelah Amazon menerapkan login wall untuk halaman ulasan penuh. Anda akan mempelajari autentikasi berbasis cookie, penggunaan selector data-hook yang stabil, strategi melewati batas 10 halaman melalui kombinasi filter bintang dan sort, serta teknik anti-bot seperti rotasi User-Agent dan throttling. Artikel ini juga membahas cara mengekspor data ke CSV/Excel, menambahkan analisis sentimen sederhana dengan TextBlob atau model Transformer, dan membandingkan pendekatan DIY Python dengan Thunderbit untuk tim yang ingin hasil cepat tanpa maintenance.

Scraper ulasan Amazon saya sempat jalan mulus selama enam minggu — lalu suatu pagi, hasilnya cuma 200 OK dan halaman kosong tanpa isi. Tidak ada error, tidak ada CAPTCHA, cuma HTML kosong di tempat ratusan ulasan biasanya tampil.

Kalau ini terdengar familiar, kamu tidak sendirian. Di akhir 2025, Amazon mulai membatasi halaman ulasan lengkapnya di balik login, dan banyak skrip scraping Python besar langsung rusak begitu saja semalaman. Beberapa bulan terakhir saya habiskan di Thunderbit untuk mengurai masalah ini dari dua sisi — membangun AI scraper kami, sekaligus merawat pipeline ulasan Python milik saya sendiri — jadi saya pikir sudah waktunya menulis panduan yang dulu sangat ingin saya punya saat skrip saya pertama kali mati. Artikel 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 analisis sentimen yang mengubah teks ulasan mentah menjadi insight bisnis yang nyata. Dan kalau di tengah jalan kamu berpikir, "Saya sebenarnya tidak mau repot merawat semua kode ini," saya akan tunjukkan bagaimana Thunderbit menangani pekerjaan yang sama dalam sekitar dua menit tanpa Python.

Apa Itu Scraping Ulasan Amazon (dan Mengapa 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 menghapus konten ulasan dari Product Advertising API mereka pada 2010 (dan tidak pernah mengembalikannya), web scraping adalah satu-satunya jalur programatik untuk mendapatkan data ini.

Angkanya mendukung hal ini. 95% pembeli membaca ulasan sebelum membeli, dan 94% menyebut Amazon sebagai sumber utama ulasan produk. Menampilkan hanya 5 ulasan di halaman produk bisa meningkatkan konversi hingga 270%. Perusahaan yang menganalisis sentimen ulasan secara sistematis melihat retensi pelanggan hingga 15% lebih tinggi. Ini bukan sekadar data science abstrak — ini intelijen kompetitif, sinyal perbaikan produk, dan bahasa pemasaran, semuanya tersedia secara terbuka di server Amazon.

Mengapa Scrape Ulasan Amazon dengan Python

Python tetap jadi bahasa andalan untuk pekerjaan ini. Python adalah bahasa paling diinginkan nomor 1 dalam Stack Overflow Developer Survey 2024, dan ekosistemnya — requests, BeautifulSoup, pandas, Scrapy — membuat web scraping jadi mudah diakses bahkan untuk orang yang bukan developer full-time.

Tim yang berbeda memanfaatkan data ini dengan cara yang berbeda pula:

TimUse CaseApa yang Diekstrak
Produk / R&DMengidentifikasi keluhan berulang, memprioritaskan perbaikanTeks ulasan 1–2 bintang, frekuensi kata kunci
SalesMemantau sentimen produk kompetitorRating, tren volume ulasan
MarketingMengambil bahasa pelanggan untuk copy iklanFrasa positif dalam ulasan, penyebutan fitur
Ecommerce OpsMelacak sentimen produk sendiri dari waktu ke waktuDistribusi bintang, rasio pembelian terverifikasi
Riset PasarMembandingkan pemimpin kategori dari sisi fiturDataset ulasan multi-ASIN

Salah satu brand perlengkapan dapur menggali ulasan negatif, menemukan 22% menyebut "lapisan anti lengket cepat aus", lalu merumuskan ulang produknya dan merebut kembali posisi #1 Best Seller dalam 60 hari. Perusahaan fitness tracker menemukan keluhan "band menyebabkan iritasi" dari teks ulasan, mengidentifikasi isu alergi lateks, meluncurkan varian hypoallergenic, dan memangkas retur sebesar 40%. Inilah ROI yang bikin upaya engineering benar-benar terasa layak.

Login Wall: Mengapa Scraper Ulasan Amazon Anda Berhenti Bekerja

Pada 14 November 2024, Amazon mulai mewajibkan login untuk melihat halaman ulasan produk penuh. Perubahan ini terkonfirmasi di forum komunitas dan blog vendor scraping. Kalau kamu membuka /product-reviews/{ASIN}/ di jendela incognito, kamu akan dialihkan ke halaman sign-in, bukan data ulasan.

python-web-scraping-diagram.webp

Gejalanya halus: skrip kamu mendapat respons 200 OK, tetapi body HTML 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 karena alasan anti-bot dan kepatuhan regional. Penegakannya tidak selalu konsisten — kadang jendela browser baru masih memuat beberapa ulasan sebelum diblok, terutama di halaman pertama — tetapi untuk scraper yang berjalan dalam skala besar, kamu harus menganggap login wall ini selalu aktif.

Domain Amazon untuk negara berbeda (.de, .co.uk, .co.jp) menerapkan pembatasan ini secara terpisah. Seperti yang ditulis seorang pengguna forum: "login untuk setiap negara dibutuhkan." Cookie .com kamu tidak akan bekerja di .co.uk.

Ulasan Unggulan vs. Ulasan Lengkap: Apa yang Masih Bisa Diakses Tanpa Login

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

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

Kalau kamu cuma butuh beberapa ulasan untuk cek cepat, scrape halaman produk. Untuk ratusan atau ribuan ulasan, kamu perlu menangani autentikasi.

Yang Anda Butuhkan Sebelum Mulai: Setup Python dan Library

Sebelum menulis kode, berikut setup-nya:

  • 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:

pip install requests beautifulsoup4 lxml pandas textblob

Opsional (untuk analisis sentimen lanjutan):

pip install transformers torch

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

Langkah 1: Lewati Login Wall dengan Autentikasi Berbasis Cookie

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

Kamu membutuhkan tujuh cookie ini:

Nama CookieFungsi
session-idID sesi yang berubah-ubah
session-id-timeTimestamp sesi
session-tokenToken sesi yang berubah-ubah
ubid-mainIdentitas penelusuran pengguna
at-mainToken autentikasi utama
sess-at-mainAutentikasi khusus sesi
x-mainIdentitas berbasis email pengguna

Cara Mengekstrak Cookie dari Chrome DevTools

  1. Login ke amazon.com di Chrome
  2. Buka DevTools (F12 atau klik kanan → Inspect)
  3. Masuk ke ApplicationStorageCookieshttps://www.amazon.com
  4. Cari masing-masing nama cookie di tabel lalu salin nilainya
  5. Format cookie sebagai string yang dipisahkan titik koma untuk Python

Siapkan sesi seperti ini:

import requests

session = requests.Session()

# Tempel nilai cookie Anda di sini
cookies = {
    "session-id": "YOUR_SESSION_ID",
    "session-id-time": "YOUR_SESSION_ID_TIME",
    "session-token": "YOUR_SESSION_TOKEN",
    "ubid-main": "YOUR_UBID_MAIN",
    "at-main": "YOUR_AT_MAIN",
    "sess-at-main": "YOUR_SESS_AT_MAIN",
    "x-main": "YOUR_X_MAIN",
}

headers = {
    "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",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
}

session.cookies.update(cookies)
session.headers.update(headers)

Penting: Gunakan objek session yang sama untuk semua request. Ini menjaga cookie tetap konsisten dan meniru sesi browser sungguhan. Cookie biasanya bertahan beberapa hari hingga beberapa minggu saat dibebani scraping, tetapi kalau kamu kembali melihat redirect ke login, segarkan cookie dari browser kamu.

Untuk marketplace non-.com, nama cookie sedikit berbeda — amazon.de memakai at-acbde alih-alih at-main, amazon.co.uk memakai at-acbuk, dan seterusnya. Setiap marketplace memerlukan sesi independen tersendiri.

Langkah 2: Bangun Request dan Parse HTML Ulasan dengan BeautifulSoup

URL ulasan Amazon mengikuti pola ini:

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

Fungsi inti:

from bs4 import BeautifulSoup
import time, random

def get_soup(session, url):
    time.sleep(random.uniform(2, 5))  # Jeda yang sopan
    response = session.get(url, timeout=15)

    # Deteksi login wall
    if "ap_email" in response.text or "Amazon Sign-In" in response.text:
        raise Exception("Login wall terdeteksi — segarkan cookie Anda")

    if response.status_code != 200:
        raise Exception(f"HTTP {response.status_code}")

    return BeautifulSoup(response.text, "lxml")

Ada trik kecil yang membantu: sebelum membuka halaman ulasan, kunjungi dulu halaman produk. Ini membangun pola browsing yang lebih natural di sesi kamu.

# Kunjungi halaman produk dulu (meniru browsing normal)
product_url = f"https://www.amazon.com/dp/{asin}"
session.get(product_url, timeout=15)
time.sleep(random.uniform(1, 3))

# Lalu buka halaman ulasan
reviews_url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1"
soup = get_soup(session, reviews_url)

Langkah 3: Gunakan Selector Stabil untuk Mengekstrak Data Ulasan (Jangan Bergantung pada CSS Class)

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

Solusinya: Amazon memakai atribut data-hook pada elemen ulasan, dan ini sangat stabil. Atribut ini adalah 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)
Nama penulisspan.a-profile-nameRelatif stabil
Tanggal ulasan[data-hook="review-date"].review-date (tergantung region)
Pembelian terverifikasi[data-hook="avp-badge"]span.a-size-mini

Kode ekstraksi dengan selector data-hook:

import re

def extract_reviews(soup):
    reviews = []
    review_divs = soup.select('[data-hook="review"]')

    for div in review_divs:
        # Rating bintang
        rating_el = div.select_one('[data-hook="review-star-rating"]')
        rating = None
        if rating_el:
            rating_text = rating_el.get_text(strip=True)
            match = re.search(r'(\d\.?\d?)', rating_text)
            if match:
                rating = float(match.group(1))

        # Judul
        title_el = div.select_one('[data-hook="review-title"]')
        title = title_el.get_text(strip=True) if title_el else ""

        # Isi ulasan
        body_el = div.select_one('[data-hook="review-body"]')
        body = body_el.get_text(strip=True) if body_el else ""

        # Penulis
        author_el = div.select_one('span.a-profile-name')
        author = author_el.get_text(strip=True) if author_el else ""

        # Tanggal dan negara
        date_el = div.select_one('[data-hook="review-date"]')
        date_text = date_el.get_text(strip=True) if date_el else ""
        # Format: "Reviewed in the United States on January 15, 2025"
        country_match = re.search(r'Reviewed in (.+?) on', date_text)
        date_match = re.search(r'on (.+)$', date_text)
        country = country_match.group(1) if country_match else ""
        date = date_match.group(1) if date_match else ""

        # Pembelian terverifikasi
        verified_el = div.select_one('[data-hook="avp-badge"]')
        verified = bool(verified_el)

        reviews.append({
            "author": author,
            "rating": rating,
            "title": title,
            "content": body,
            "date": date,
            "country": country,
            "verified": verified,
        })

    return reviews

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

Langkah 4: Tangani Pagination dan Batas 10 Halaman Amazon

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

Loop pagination dasar:

all_reviews = []

for page in range(1, 11):
    url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber={page}"
    soup = get_soup(session, url)
    page_reviews = extract_reviews(soup)

    if not page_reviews:
        break  # Tidak ada ulasan lagi di halaman ini

    all_reviews.extend(page_reviews)
    print(f"Page {page}: {len(page_reviews)} ulasan")

Cara Mendapatkan Lebih dari 10 Halaman Ulasan Amazon

Triknya adalah filter bucketing. Setiap kombinasi filterByStar dan sortBy mendapat jendela 10 halaman yang independen.

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, kamu bisa mengakses hingga 100 halaman, 1.000 ulasan per produk — dan untuk produk dengan distribusi bintang yang tidak merata, kamu sering kali bisa mendekati seluruh set ulasan.

star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
sort_orders = ["recent", "helpful"]
all_reviews = []
seen_titles = set()  # Dedup sederhana

for star in star_filters:
    for sort in sort_orders:
        for page in range(1, 11):
            url = (
                f"https://www.amazon.com/product-reviews/{asin}"
                f"?filterByStar={star}&sortBy={sort}&pageNumber={page}"
            )
            soup = get_soup(session, url)
            page_reviews = extract_reviews(soup)

            if not page_reviews:
                break

            for review in page_reviews:
                # Dedup berdasarkan kombinasi judul + penulis
                key = (review["title"], review["author"])
                if key not in seen_titles:
                    seen_titles.add(key)
                    all_reviews.append(review)

            print(f"[{star}/{sort}] Page {page}: {len(page_reviews)} ulasan")

print(f"Total ulasan unik: {len(all_reviews)}")

Akan ada tumpang tindih antar bucket, jadi deduplication itu wajib. Saya memakai kombinasi judul ulasan + nama penulis sebagai kunci cepat — tidak sempurna, tapi cukup menangkap mayoritas duplikat.

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

Amazon menggunakan AWS WAF Bot Control, dan sistem ini jauh lebih agresif sekarang. Satu lapis pertahanan saja (misalnya hanya rotasi User-Agent, atau hanya menambah delay) sudah tidak cukup.

TeknikImplementasi
Rotasi User-AgentPilih acak dari 10+ string browser asli
Exponential backoffDelay retry 2s → 4s → 8s pada 503
Request throttlingJeda random.uniform(2, 5) detik antar halaman
Rotasi proxyBergiliran lewat residential proxy
Fingerprint sesiCookie + header konsisten per sesi
TLS impersonationPakai curl_cffi вместо requests biasa untuk production

Wrapper retry yang siap production:

import time, random

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "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",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
    "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",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
]

def scrape_with_retries(session, url, max_retries=3):
    for attempt in range(max_retries):
        try:
            session.headers["User-Agent"] = random.choice(USER_AGENTS)
            time.sleep(random.uniform(2, 5))

            response = session.get(url, timeout=15)

            # Deteksi blokir
            if "validateCaptcha" in response.url or "Robot Check" in response.text:
                wait = (2 ** attempt) * 5
                print(f"CAPTCHA terdeteksi. Menunggu {wait}s...")
                time.sleep(wait)
                continue

            if response.status_code in (429, 503):
                wait = (2 ** attempt) * 2
                print(f"Rate limited ({response.status_code}). Menunggu {wait}s...")
                time.sleep(wait)
                continue

            if "ap_email" in response.text:
                raise Exception("Login wall — cookie kedaluwarsa")

            return BeautifulSoup(response.text, "lxml")

        except Exception as e:
            if attempt == max_retries - 1:
                raise
            print(f"Percobaan {attempt + 1} gagal: {e}")

    return None

Catatan soal proxy: Amazon mem-blacklist rentang IP data center yang dikenal (AWS, GCP, Azure, DigitalOcean) di level jaringan. Kalau kamu scraping lebih dari beberapa ratus halaman, residential proxy pada praktiknya jadi wajib — siapkan biaya sekitar $50–200+/bulan tergantung volume. Untuk proyek kecil (di bawah 100 request/hari), throttling yang hati-hati dari IP rumah sering kali sudah cukup.

Amazon juga memeriksa fingerprint TLS. Library Python requests standar punya JA3 hash yang sudah terkenal dan sering diblok WAF. Untuk scraper produksi, pertimbangkan curl_cffi, yang meniru stack TLS browser asli. Untuk skala tutorial (beberapa ratus halaman), requests dengan header yang bagus biasanya masih memadai.

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

Setelah ulasan terkumpul, mengubahnya ke format yang siap dipakai cukup mudah dengan pandas:

import pandas as pd

df = pd.DataFrame(all_reviews)
df.to_csv("amazon_reviews.csv", index=False)
print(f"Berhasil mengekspor {len(df)} ulasan ke amazon_reviews.csv")

Contoh output:

authorratingtitlecontentdatecountryverified
Sarah M.5.0Pembelian terbaik tahun iniBaterai tahan seharian, layarnya cantik...January 15, 2025the United StatesTrue
Mike T.2.0Kecewa setelah 2 mingguPort pengisian berhenti berfungsi...February 3, 2025the United StatesTrue
Priya K.4.0Nilai bagus untuk harganyaMelakukan semua yang saya butuhkan, hanya agak lambat saat aplikasi berat...March 10, 2025the United StatesFalse

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

Untuk Google Sheets, library gspread memang bisa dipakai, tetapi membutuhkan 8+ langkah konfigurasi Google Cloud — membuat project, mengaktifkan dua API, membuat kredensial service account, lalu membagikan sheet. Kalau rasanya ini lebih ribet daripada scraping-nya sendiri, kamu tidak salah. (Di titik ini, alat seperti Thunderbit yang bisa mengekspor ke Google Sheets dengan sekali klik mulai terasa jauh lebih menarik.)

Bonus: Tambahkan Analisis Sentimen ke Ulasan Anda dalam 5 Baris Python

Kebanyakan tutorial scraping berhenti di ekspor CSV. Padahal scoring sentimen adalah bagian yang mengubah data mentah menjadi keputusan bisnis.

Baseline tercepat menggunakan TextBlob:

from textblob import TextBlob

df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)

Hasilnya adalah skor polaritas dari -1.0 (sangat negatif) hingga +1.0 (sangat positif) untuk setiap 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 paling menarik adalah yang tidak selaras — ulasan 3 bintang dengan teks bernada positif, atau ulasan 5 bintang dengan bahasa negatif. Perbedaan seperti ini sering mengungkap opini pelanggan yang lebih bernuansa, sesuatu yang sering terlewat kalau hanya melihat rating bintang.

ai-review-analysis.webp

Untuk akurasi level produksi, rekomendasinya adalah Hugging Face Transformers. VADER dilatih pada tweet, bukan ulasan produk, dan model transformer mencapai akurasi lebih dari 98% pada klasifikasi ulasan dibandingkan alat berbasis leksikon. Model nlptown/bert-base-multilingual-uncased-sentiment bahkan bisa memprediksi rating 1–5 bintang secara langsung:

from transformers import pipeline

clf = pipeline("sentiment-analysis",
               model="nlptown/bert-base-multilingual-uncased-sentiment")
df["predicted_stars"] = df["content"].apply(
    lambda x: int(clf(str(x)[:512])[0]["label"][0])
)

Ulasan Amazon mengikuti distribusi berbentuk J — lonjakan besar di 5 bintang, lonjakan lebih kecil di 1 bintang, dan lembah di tengah. Artinya, rata-rata rating bintang sering kali bukan proksi yang bagus untuk kualitas produk sebenarnya. Segmentasikan kelompok 1 bintang dan gali tema berulang — biasanya di situlah cacat yang bisa diperbaiki bersembunyi.

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

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

Berikut perbandingan tiga pendekatan utama:

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

Python memberi kamu kontrol penuh dan memang cara terbaik untuk memahami cara kerja web scraping dari dalam. Paid API (ScrapingBee, Oxylabs, Bright Data) masuk akal untuk pipeline produksi yang uptime-nya lebih penting daripada biaya. Dan untuk tim yang butuh data ulasan tanpa beban developer — misalnya ecommerce ops yang memantau produk kompetitor tiap minggu, atau tim marketing yang mengambil bahasa pelanggan untuk copy iklan — ada jalur ketiga.

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

Kami membangun Thunderbit untuk menangani skenario di mana memelihara scraper Python terasa berlebihan. Alurnya seperti ini:

  1. Install Thunderbit Chrome Extension
  2. Buka halaman ulasan produk Amazon di browser kamu (kamu 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 diekstrak seketika, 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 perlu dipelihara, tidak ada manajemen cookie, tidak ada kode anti-bot. Saat Amazon mengubah HTML mereka, AI ikut beradaptasi. Untuk pembaca yang ingin akses programatik tanpa repot DIY penuh, Thunderbit juga menawarkan Extract API — ekstraksi data terstruktur via API dengan deteksi field berbasis AI, tanpa maintenance selector.

Untuk pembahasan lebih dalam soal data Amazon, lihat panduan kami tentang cara scrape produk dan ulasan Amazon dan mengekstrak serta menganalisis data penjualan Amazon.

Tips untuk Scrape Ulasan Amazon dalam Skala Besar dengan Python

Kalau kamu scraping ulasan lintas banyak ASIN, beberapa praktik berikut akan menghemat banyak pusing:

  • Batch ASIN kamu dengan jeda antar produk, bukan hanya antar halaman. Saya biasanya memakai pause 10–15 detik di antara ASIN.
  • Deduplication secara agresif. Saat menggabungkan kombinasi beberapa filter bintang dan urutan sort, akan ada ulasan yang tumpang tindih. Gunakan set tuple (title, author, date) sebagai kunci dedup.
  • Log kegagalan. Lacak kombinasi ASIN + page + filter mana yang gagal supaya bisa diulang tanpa scrape ulang semuanya.
  • Simpan di database untuk proyek besar. Database SQLite sederhana jauh lebih scalable daripada file CSV yang makin membesar:
import sqlite3

conn = sqlite3.connect("reviews.db")
df.to_sql("reviews", conn, if_exists="append", index=False)
  • Jadwalkan scraping berulang. Untuk monitoring berkelanjutan, buat cron job atau gunakan fitur Scheduled Scraper dari Thunderbit — cukup jelaskan URL dan jadwalnya, sisanya ditangani tanpa server.

Untuk pendekatan tambahan, posting kami tentang best automated web scraping tools dan scraping data dari website ke Excel membahas opsi lain yang bisa kamu coba.

Catatan Singkat tentang Pertimbangan Hukum dan Etika

Conditions of Use Amazon secara eksplisit melarang "penggunaan robot, spider, scraper, atau cara otomatis lain untuk mengakses Amazon Services." Namun, putusan hukum terbaru di AS cukup berpihak pada scraping data publik. Dalam Meta Platforms v. Bright Data (Januari 2024), pengadilan federal memutuskan bahwa scraping data yang dapat diakses publik tidak melanggar syarat layanan jika scraper bukan "user" yang sedang login.

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

Pedoman praktis: jangan redistribusikan data hasil scraping untuk tujuan komersial, jangan ambil data pribadi pengguna di luar yang memang tampil publik, hormati robots.txt, dan konsultasikan dengan penasihat hukum untuk penggunaan skala besar atau komersial. Ini bukan nasihat hukum. Untuk gambaran lebih lanjut tentang lanskap hukumnya, lihat ringkasan kami tentang implikasi hukum web scraping.

Kesimpulan: Scrape Ulasan Amazon dengan Python, atau Lewati Kode Sama Sekali

Ringkasan cepat dari panduan ini:

  • Login wall itu nyata, tetapi bisa diatasi dengan autentikasi berbasis cookie — salin 7 cookie dari browser kamu dan masukkan ke requests.Session()
  • Gunakan selector data-hook, bukan CSS class, agar ekstraksi tidak rusak setiap 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 level produksi
  • Jaga pertahanan anti-bot: throttling, rotasi User-Agent, exponential backoff, dan residential proxy untuk skala besar

Python memberi kamu kontrol penuh dan merupakan cara terbaik untuk memahami apa yang terjadi di balik layar. Tetapi kalau kebutuhanmu adalah "saya butuh data ulasan kompetitor di spreadsheet sebelum hari Jumat" alih-alih "saya ingin membangun pipeline data produksi," beban maintenance scraper custom mungkin tidak sepadan.

Thunderbit menangani autentikasi, selector, pagination, dan ekspor hanya dengan beberapa klik — coba paket gratisnya dan lihat apakah cocok dengan alur kerja kamu. Seiring Amazon terus memperketat langkah anti-bot, alat berbasis AI yang bisa beradaptasi secara real time akan menjadi bukan sekadar nice-to-have, melainkan kebutuhan.

Kamu juga bisa menjelajahi Thunderbit YouTube Channel untuk video walkthrough alur scraping.

FAQ

1. Apakah bisa scrape ulasan Amazon tanpa login?

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

2. Apakah legal scrape ulasan Amazon?

Syarat layanan 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 kamu 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 hingga 10 per kombinasi urutan sort dan filter bintang. Dengan memakai semua 5 filter bintang × 2 urutan sort, kamu bisa mengakses hingga 100 halaman (sekitar 1.000 ulasan) per produk. Dengan filter kata kunci, batas teoritisnya jauh lebih tinggi, meski dengan duplikasi yang signifikan.

4. Library Python terbaik untuk scraping ulasan Amazon apa?

requests + BeautifulSoup untuk parsing HTML statis adalah kombinasi yang paling umum dan andal. Selenium berguna saat rendering JavaScript diperlukan. Untuk alternatif tanpa kode yang menangani login wall dan pagination secara otomatis, coba Thunderbit.

5. Bagaimana cara menghindari diblokir saat scraping Amazon?

Rotasi string User-Agent dari pool berisi 10+ string browser asli, tambahkan delay acak 2–5 detik antar request, terapkan exponential backoff pada error 503/429, gunakan residential proxy untuk skala besar (IP data center sudah sering diblok), dan pertahankan cookie sesi yang konsisten di setiap request. Untuk pendekatan tanpa maintenance, Thunderbit menangani pertahanan anti-bot secara otomatis melalui sesi browser kamu.

Pelajari Lebih Lanjut

Fawad Khan
Fawad Khan
Fawad menulis untuk mencari nafkah, dan sejujurnya, dia memang cukup menyukainya. Selama bertahun-tahun, dia mendalami apa yang membuat sebuah copy melekat di ingatan — dan apa yang membuat pembaca langsung menggulir lewat. Kalau ditanya soal marketing, dia bisa bicara berjam-jam. Kalau ditanya soal carbonara, dia bisa bicara lebih lama lagi.
Daftar isi
Thunderbit · Agen data web AI

Ekstrak data dari halaman apa pun dalam 1 klik

Dipercaya 250.000+ pengguna
tersedia paket gratis
Dari halaman web ke spreadsheet
Jelaskan kebutuhanmu — Agen AI Thunderbit akan men-scrape lalu mengekspor ke Excel, Google Sheets, Airtable, atau Notion. Gratis untuk memulai.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week