Pelajari Cara Scrape Produk Amazon dengan Python

Terakhir diperbarui pada April 16, 2026

Kalau Anda pernah ngikutin tutorial Amazon scraping lalu mentok di CAPTCHA, error 503, atau hasilnya kosong melompong — selamat datang di klub. Sebagian besar panduan Python untuk scraping Amazon yang beredar di internet ditulis pada 2022 atau 2023, dan masih memakai selector serta teknik yang sudah lama ditambal Amazon.

Saya sudah bertahun-tahun membangun alat ekstraksi data di Thunderbit, dan ada satu hal yang bisa saya bilang dari pengalaman di lapangan: Amazon adalah salah satu situs yang paling susah di-scrape dengan andal. Platform ini terus mengubah struktur HTML, menerapkan pertahanan anti-bot berlapis, dan bahkan menampilkan layout halaman yang berbeda untuk pengguna yang berbeda lewat A/B testing. Di panduan ini, saya akan memandu Anda bikin Python Amazon scraper yang benar-benar jalan di 2025 — lengkap dengan CSS selector yang sudah diverifikasi, strategi anti-blocking berlapis, serta panduan penjadwalan dan ekspor yang sering diabaikan tutorial lain. Dan buat Anda yang cuma butuh datanya tanpa ribet ngoprek Python, saya juga akan tunjukkan bagaimana bisa melakukan hal yang sama hanya dalam dua klik.

Apa Itu Scraping Produk Amazon?

Scraping produk Amazon adalah proses mengekstrak data yang tersedia secara publik secara terprogram — seperti nama produk, harga, rating, jumlah ulasan, gambar, ketersediaan, dan lainnya — dari halaman produk dan halaman hasil pencarian Amazon. Alih-alih menyalin informasi dari ratusan listing satu per satu, scraper akan membuka tiap halaman, membaca HTML-nya, lalu mengambil data yang Anda tentukan ke format terstruktur seperti CSV, Excel, atau database.

Bayangkan saja ini seperti menyewa anak magang super rajin yang bisa membuka seribu halaman produk dalam waktu yang Anda butuhkan untuk menyeruput kopi pagi. Bedanya, anak magang ini tidak pernah salah ketik dan tidak perlu istirahat makan siang.

Mengapa Scrape Produk Amazon dengan Python?

Amazon menampung sekitar di lebih dari 30 kategori, didukung oleh sekitar . Penjual pihak ketiga sekarang menyumbang 69% dari total GMV. Memantau bahkan sebagian kecil dari katalog sebesar itu secara manual hampir mustahil. Inilah sebabnya banyak tim melakukan scraping Amazon:

Use CaseWho BenefitsWhat They Extract
Pemantauan harga & repricingTim ecommerce, penjual marketplaceHarga, ketersediaan, info penjual
Analisis kompetitorProduct manager, tim brandFitur produk, rating, jumlah ulasan
Riset pasarAnalis, tim produk baruTren kategori, distribusi harga
Lead generationTim salesNama penjual, info brand, data kontak
Affiliate marketingKreator konten, situs dealHarga, promo, detail produk
Pelacakan inventarisSupply chain, procurementStatus stok, estimasi pengiriman

Skala perubahan harga Amazon sendiri sudah bikin otomatisasi jadi kebutuhan: Amazon mengubah harga , dengan rata-rata harga produk diperbarui kira-kira setiap 10 menit. Sebagai pembanding, kompetitor seperti Best Buy dan Walmart hanya mengubah harga sekitar 50.000 kali per bulan. Tidak ada tim manusia yang bisa mengejar kecepatan itu.

amazon-product-price-monitor-dashboard.webp

Python memberi Anda kendali penuh atas proses scraping — Anda yang menentukan apa yang diambil, bagaimana error ditangani, dan di mana data disimpan. Tapi konsekuensinya, Anda juga bertanggung jawab atas maintenance, anti-blocking, dan mengikuti perubahan HTML Amazon yang sangat sering.

Apa yang Bisa dan Tidak Bisa Discrape dari Amazon

Dari halaman produk yang bisa diakses publik, Anda biasanya dapat mengekstrak:

  • Judul produk (nama, brand)
  • Harga (harga saat ini, harga awal, harga promo)
  • Rating (rata-rata bintang)
  • Jumlah ulasan
  • Gambar produk (URL gambar utama)
  • Ketersediaan / status stok
  • ASIN (Amazon Standard Identification Number)
  • Deskripsi produk dan poin-poin utama
  • Informasi penjual
  • Varian produk (ukuran, warna, dll.)

Yang sebaiknya dihindari:

  • Data di balik login: Halaman ulasan lanjutan, data akun pribadi, riwayat pesanan
  • Informasi pribadi: Nama pembeli, alamat, info pembayaran
  • Konten berhak cipta untuk dipublikasikan ulang: Deskripsi produk dan gambar boleh dipakai untuk analisis, tapi jangan dipublikasikan ulang seolah-olah milik Anda

Amazon memblokir lebih dari 50 bot bernama (termasuk GPTBot, Scrapy, dan ClaudeBot) dan melarang path seperti akun pengguna, keranjang, dan wishlist. Halaman detail produk memang tidak secara eksplisit dilarang, tetapi Terms of Service Amazon tetap melarang akses otomatis. Pengadilan umumnya membedakan antara pelanggaran ToS (urusan perdata) dan pelanggaran pidana di bawah CFAA — soal legalitas akan saya bahas lebih lanjut di akhir panduan ini.

Tools dan Library yang Anda Perlukan

Berikut stack Python untuk tutorial ini:

LibraryPurposeWhy We Use It
requestsPermintaan HTTPSederhana, dukungannya luas
beautifulsoup4Parsing HTMLEkstraksi berbasis CSS selector yang mudah
lxmlParser HTML cepatDipakai sebagai backend parser BeautifulSoup
curl_cffiMeniru fingerprint TLSPenting untuk melewati deteksi Amazon
pandasStruktur & ekspor dataDataFrame, ekspor CSV/Excel

Opsional (untuk konten yang dirender JavaScript):

  • selenium atau playwright — otomasi browser headless

Menyiapkan Lingkungan Python Anda

Buka terminal lalu jalankan:

1mkdir amazon-scraper && cd amazon-scraper
2python -m venv venv
3source venv/bin/activate  # Di Windows: venv\Scripts\activate
4pip install requests beautifulsoup4 lxml curl_cffi pandas

Verifikasi instalasinya:

1import requests, bs4, curl_cffi, pandas
2print("All good!")

Kalau muncul pesan "All good!" tanpa error, Anda siap lanjut.

laptop-coding-workspace.webp

Mengapa Kebanyakan Tutorial Scraping Amazon Gagal (dan Apa yang Membuat Panduan Ini Berbeda)

Bagian ini sering dilewati banyak panduan, padahal justru ini alasan Anda mungkin sedang membaca artikel ini.

Amazon sering memperbarui struktur HTML, nama class, dan ID elemen. Komunitas scraping melaporkan bahwa akibat perubahan DOM dan fingerprinting. Korban paling terkenal? Selector #priceblock_ourprice, yang muncul di ratusan tutorial dari 2018–2023. ID itu sudah tidak ada lagi di halaman produk Amazon.

Perbandingan cepat antara yang rusak vs yang masih berfungsi saat ini:

Data PointBroken Selector (Pre-2024)Working 2025 Selector
Harga#priceblock_ourpricediv#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen
Judul#productTitlespan#productTitle (masih berfungsi)
Ratingspan.a-icon-alt (kadang salah konteks)#acrPopover span.a-icon-alt
Jumlah Ulasan#acrCustomerReviewCountspan#acrCustomerReviewText
Ketersediaan#availability spandiv#availability span.a-size-medium

Setiap potongan kode di panduan ini sudah diuji di halaman Amazon live pada 2025. Saya akan tunjukkan selector CSS yang benar beserta output yang diharapkan — bukan hasil copy-paste dari tutorial 2022.

Sebelum Memulai

  • Tingkat kesulitan: Menengah (diasumsikan sudah paham Python dasar)
  • Waktu yang dibutuhkan: ~30–45 menit untuk tutorial lengkap; ~10 menit untuk scraper dasar
  • Yang Anda perlukan: Python 3.9+, browser Chrome (untuk memeriksa halaman Amazon), terminal, dan opsional jika ingin membandingkan pendekatan tanpa kode

Langkah 1: Kirim Request Pertama ke Amazon

Buka halaman produk Amazon apa saja di browser Anda lalu salin URL-nya. Kita mulai dengan requests.get() sederhana:

1import requests
2url = "https://www.amazon.com/dp/B0DGNFM9YJ"
3response = requests.get(url)
4print(response.status_code)
5print(response.text[:500])

Jalankan kode ini, dan hampir pasti Anda akan mendapat status code 503 atau halaman yang bertuliskan "To discuss automated access to Amazon data please contact…". Itu adalah WAF (Web Application Firewall) Amazon yang mendeteksi skrip Python Anda. requests.get() polos tanpa header yang tepat hanya punya tingkat keberhasilan sekitar saat berhadapan dengan Amazon.

Anda kemungkinan akan melihat 503 dan halaman blok di HTML. Itu normal — kita akan perbaiki di langkah berikutnya.

Langkah 2: Atur Custom Header dan TLS Impersonation

Sekadar menambahkan header User-Agent saja tidak lagi cukup. Amazon membandingkan header HTTP Anda dengan TLS fingerprint Anda. Kalau Anda mengaku sebagai Chrome 120 tapi handshake TLS Anda justru membocorkan library Python requests, Anda akan .

Pendekatan paling andal di 2025 adalah memakai curl_cffi dengan impersonasi browser:

1from curl_cffi import requests as cfreq
2headers = {
3    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
4    "Accept-Language": "en-US,en;q=0.9",
5    "Accept-Encoding": "gzip, deflate, br",
6    "Referer": "https://www.google.com/",
7    "DNT": "1",
8    "Connection": "keep-alive",
9    "Upgrade-Insecure-Requests": "1",
10}
11url = "https://www.amazon.com/dp/B0DGNFM9YJ"
12response = cfreq.get(url, headers=headers, impersonate="chrome124")
13print(response.status_code)
14print(len(response.text))

Dengan curl_cffi yang meniru Chrome 124, tingkat keberhasilan naik menjadi sekitar — peningkatan 47x dibanding requests biasa. Sekarang Anda seharusnya melihat status code 200 dan respons HTML yang jauh lebih panjang (100.000+ karakter).

Kalau masih mendapat 503, coba nilai impersonate lain (misalnya "chrome131") atau beri jeda singkat sebelum mencoba lagi.

Langkah 3: Parse HTML dan Ambil Data Produk

Sekarang setelah HTML lengkap didapat, mari ambil datanya dengan BeautifulSoup memakai selector 2025 yang sudah diverifikasi:

1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, "lxml")
3# Product Title
4title_el = soup.select_one("span#productTitle")
5title = title_el.get_text(strip=True) if title_el else None
6# Price
7price_el = soup.select_one(
8    "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
9)
10if not price_el:
11    price_el = soup.select_one("span.priceToPay .a-offscreen")
12if not price_el:
13    price_el = soup.select_one(".apexPriceToPay .a-offscreen")
14price = price_el.get_text(strip=True) if price_el else None
15# Rating
16rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17rating = rating_el.get_text(strip=True) if rating_el else None
18# Review Count
19reviews_el = soup.select_one("span#acrCustomerReviewText")
20reviews = reviews_el.get_text(strip=True) if reviews_el else None
21# Availability
22avail_el = soup.select_one("div#availability span")
23availability = avail_el.get_text(strip=True) if avail_el else None
24# Main Image URL
25img_el = soup.select_one("#landingImage")
26image_url = img_el.get("src") if img_el else None
27print(f"Title: {title}")
28print(f"Price: {price}")
29print(f"Rating: {rating}")
30print(f"Reviews: {reviews}")
31print(f"Availability: {availability}")
32print(f"Image: {image_url}")

Contoh output yang diharapkan:

1Title: Apple AirPods Pro (2nd Generation) with USB-C
2Price: $189.99
3Rating: 4.7 out of 5 stars
4Reviews: 98,432 ratings
5Availability: In Stock
6Image: https://m.media-amazon.com/images/I/61SUj2...

Perhatikan ada beberapa fallback selector untuk harga — Amazon memakai container berbeda tergantung jenis produk, status promo, dan varian A/B test. Membungkus tiap ekstraksi dengan pengecekan kondisional mencegah scraper Anda crash saat selector tidak cocok.

Langkah 4: Scrape Banyak Produk dari Hasil Pencarian

Untuk membangun dataset yang benar-benar berguna, Anda biasanya akan mulai dari halaman hasil pencarian Amazon, mengumpulkan ASIN, lalu mengambil tiap halaman detail produk.

1import time
2import random
3def get_search_asins(keyword, max_pages=1):
4    """Collect ASINs from Amazon search results."""
5    asins = []
6    for page in range(1, max_pages + 1):
7        search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
8        resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
9        if resp.status_code != 200:
10            print(f"Search page {page} returned {resp.status_code}")
11            break
12        search_soup = BeautifulSoup(resp.text, "lxml")
13        results = search_soup.select('div[data-component-type="s-search-result"]')
14        for r in results:
15            asin = r.get("data-asin")
16            if asin:
17                asins.append(asin)
18        print(f"Page {page}: found {len(results)} products")
19        time.sleep(random.uniform(2, 5))  # Jeda sopan
20    return asins
21asins = get_search_asins("wireless+earbuds", max_pages=2)
22print(f"Collected {len(asins)} ASINs")

Setiap ASIN dapat dipetakan ke URL produk yang bersih: https://www.amazon.com/dp/{ASIN}. Ini jauh lebih andal daripada memakai URL hasil pencarian lengkap, yang bisa berisi parameter spesifik sesi.

Langkah 5: Tangani Pagination dan Scrape dalam Skala Besar

Sekarang mari gabungkan pengambilan hasil pencarian dan scraping halaman detail menjadi satu pipeline penuh:

1import pandas as pd
2def scrape_product(asin):
3    """Scrape a single Amazon product detail page."""
4    url = f"https://www.amazon.com/dp/{asin}"
5    try:
6        resp = cfreq.get(url, headers=headers, impersonate="chrome124")
7        if resp.status_code != 200:
8            return None
9        soup = BeautifulSoup(resp.text, "lxml")
10        title_el = soup.select_one("span#productTitle")
11        price_el = (
12            soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
13            or soup.select_one("span.priceToPay .a-offscreen")
14            or soup.select_one(".apexPriceToPay .a-offscreen")
15        )
16        rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17        reviews_el = soup.select_one("span#acrCustomerReviewText")
18        avail_el = soup.select_one("div#availability span")
19        img_el = soup.select_one("#landingImage")
20        return {
21            "asin": asin,
22            "title": title_el.get_text(strip=True) if title_el else None,
23            "price": price_el.get_text(strip=True) if price_el else None,
24            "rating": rating_el.get_text(strip=True) if rating_el else None,
25            "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
26            "availability": avail_el.get_text(strip=True) if avail_el else None,
27            "image_url": img_el.get("src") if img_el else None,
28            "url": url,
29        }
30    except Exception as e:
31        print(f"Error scraping {asin}: {e}")
32        return None
33# Scrape semua ASIN yang terkumpul
34products = []
35for i, asin in enumerate(asins):
36    print(f"Scraping {i+1}/{len(asins)}: {asin}")
37    product = scrape_product(asin)
38    if product:
39        products.append(product)
40    time.sleep(random.uniform(2, 5))  # Jeda acak antar request
41df = pd.DataFrame(products)
42print(f"\nScraped {len(df)} products successfully")
43print(df.head())

Jeda acak 2–5 detik itu penting. Timing yang terlalu teratur (misalnya selalu tepat 3 detik) terlihat mencurigakan bagi analisis perilaku Amazon. Interval acak membantu meniru pola browsing manusia.

Langkah 6: Simpan Data Scraping Amazon ke CSV

1df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
2print("Saved to amazon_products.csv")

Sekarang Anda seharusnya punya CSV rapi dengan kolom ASIN, title, price, rating, reviews, availability, image URL, dan product URL. Di sinilah kebanyakan tutorial berhenti — padahal kalau Anda membangun workflow nyata, CSV baru permulaan.

Deep Dive Anti-Blocking: Cara Agar Scraper Tetap Jalan

Kena blokir adalah bagi siapa pun yang mencoba scrape produk Amazon dengan Python. Pertahanan enam lapis Amazon mencakup analisis reputasi IP, TLS fingerprinting, pemeriksaan lingkungan browser, biometrik perilaku, CAPTCHA, dan deteksi anomali berbasis ML. Di bawah ini ada strategi berlapis untuk mengatasi masing-masing.

Rotasi User-Agent dan Seluruh Header

Satu User-Agent statis akan cepat ditandai. Putar di antara beberapa string browser terbaru:

1import random
2USER_AGENTS = [
3    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
4    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
5    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
6    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7]
8def get_headers():
9    return {
10        "User-Agent": random.choice(USER_AGENTS),
11        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
12        "Accept-Language": "en-US,en;q=0.9",
13        "Accept-Encoding": "gzip, deflate, br",
14        "Referer": "https://www.google.com/",
15        "DNT": "1",
16        "Connection": "keep-alive",
17    }

Satu detail yang sering menjebak: Accept-Language harus selaras dengan lokasi geografis yang tersirat dari IP Anda. Mengirim Accept-Language: en-US dari IP Jerman adalah sinyal merah.

TLS Fingerprint Impersonation dengan curl_cffi

Kita sudah bahas ini di Langkah 2, tapi penting untuk ditekankan: teknik tunggal ini memberi peningkatan paling besar pada tingkat keberhasilan. Python requests standar hanya mencapai sekitar 2% keberhasilan terhadap Amazon. Dengan impersonasi curl_cffi, angkanya sekitar 94%. Bedanya seperti scraper yang benar-benar jalan versus yang rusak.

1from curl_cffi import requests as cfreq
2# Rotasikan juga target impersonation
3BROWSERS = ["chrome120", "chrome124", "chrome131"]
4response = cfreq.get(
5    url,
6    headers=get_headers(),
7    impersonate=random.choice(BROWSERS),
8)

Rotasi Proxy

Untuk scraping lebih dari beberapa halaman, Anda membutuhkan rotasi proxy. Amazon melacak alamat IP dan akan memblokir IP tunggal yang mengirim terlalu banyak request.

1PROXIES = [
2    "http://user:pass@proxy1.example.com:8080",
3    "http://user:pass@proxy2.example.com:8080",
4    "http://user:pass@proxy3.example.com:8080",
5]
6proxy = random.choice(PROXIES)
7response = cfreq.get(
8    url,
9    headers=get_headers(),
10    impersonate="chrome124",
11    proxies={"http": proxy, "https": proxy},
12)

Residential proxy lebih efektif daripada datacenter proxy (Amazon proaktif memblokir rentang IP datacenter), tetapi biayanya juga lebih mahal. Untuk proyek kecil, Anda bisa mulai dengan lalu naikkan skala sesuai kebutuhan.

Rate Limiting dan Exponential Backoff

Tidak ada artikel kompetitor yang saya temukan membahas ini, padahal ini sangat penting. Saat mendapat respons 503 atau CAPTCHA, jangan langsung retry — itu jalan cepat menuju banned permanen.

1import time
2import random
3def fetch_with_backoff(url, max_retries=3):
4    """Fetch a URL with exponential backoff on failure."""
5    for attempt in range(max_retries):
6        response = cfreq.get(
7            url,
8            headers=get_headers(),
9            impersonate=random.choice(BROWSERS),
10        )
11        if response.status_code == 200:
12            return response
13        # Exponential backoff with jitter
14        wait = min(2 ** attempt + random.uniform(0, 1), 30)
15        print(f"Attempt {attempt+1} failed ({response.status_code}). Waiting {wait:.1f}s...")
16        time.sleep(wait)
17    return None  # Semua percobaan habis

Rumus wait = min(2^attempt + jitter, max_delay) memastikan delay Anda naik bertahap (2s, 4s, 8s...) tetapi tidak melewati batas yang masuk akal. Jitter acak mencegah pola retry Anda gampang dikenali.

Fallback Selenium atau Playwright untuk Konten yang Dirender JS

Beberapa halaman Amazon (terutama yang punya widget harga dinamis atau selector varian) membutuhkan JavaScript untuk tampil penuh. Saat curl_cffi mengembalikan HTML yang belum lengkap, headless browser bisa jadi fallback:

1from playwright.sync_api import sync_playwright
2def scrape_with_browser(url):
3    with sync_playwright() as p:
4        browser = p.chromium.launch(headless=True)
5        page = browser.new_page()
6        page.goto(url, wait_until="domcontentloaded")
7        page.wait_for_timeout(3000)  # Biarkan JS merender
8        html = page.content()
9        browser.close()
10        return html

Ini lebih lambat — 3–5 detik per halaman vs. kurang dari 1 detik dengan curl_cffi. Gunakan hanya saat memang diperlukan.

Menurut pengalaman saya, curl_cffi bisa menangani 90%+ halaman produk Amazon tanpa browser.

Ringkasan Anti-Blocking

TechniqueDifficultyEffectivenessCovered by Most Tutorials?
Custom User-AgentMudahRendah (Amazon mendeteksi pola)Ya
Rotasi header penuhMudahSedangJarang
TLS impersonation (curl_cffi)MenengahTinggi (~94% sukses)Hampir tidak pernah
Rotasi proxyMenengahTinggiSingkat, kalaupun ada
Rate limiting + exponential backoffMudahSedangTidak
Fallback Selenium/PlaywrightMenengahTinggi (untuk konten JS)Disebutkan, tapi jarang ditunjukkan

Lebih dari CSV: Ekspor Data Amazon ke Google Sheets, Airtable, dan Lainnya

Setiap tutorial yang saya review berhenti di ekspor CSV. Padahal workflow bisnis nyata butuh data di Google Sheets, database, atau tools seperti Airtable dan Notion.

Ekspor ke Google Sheets dengan gspread

Pertama, siapkan Google service account (sekali saja):

  1. Buka → APIs & Services → Credentials
  2. Buat service account dan unduh file key JSON
  3. Simpan ke ~/.config/gspread/service_account.json
  4. Share spreadsheet target Anda dengan client_email dari file JSON tersebut

Lalu:

1import gspread
2from gspread_dataframe import set_with_dataframe
3gc = gspread.service_account()
4sh = gc.open("Amazon Scrape Data")
5worksheet = sh.sheet1
6set_with_dataframe(worksheet, df)
7print("Data exported to Google Sheets!")

Ini menulis seluruh DataFrame langsung ke Google Sheet — live, bisa dibagikan, dan siap dipakai untuk dashboard.

Simpan di SQLite untuk Analisis Lokal

Untuk dataset yang lebih besar atau pelacakan historis, SQLite sangat cocok — tanpa setup server, cukup satu file:

1import sqlite3
2conn = sqlite3.connect("amazon_products.db")
3df.to_sql("products", conn, if_exists="append", index=False)
4print(f"Stored {len(df)} products in SQLite")
5# Query nanti:
6historical = pd.read_sql_query(
7    "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
8    conn,
9)

Alternatif Tanpa Kode

Kalau Anda tidak mau memelihara skrip ekspor Python, menyediakan ekspor gratis ke Google Sheets, Airtable, Notion, Excel, CSV, dan JSON — termasuk field gambar yang tampil langsung di Airtable dan Notion. Tidak perlu setup gspread, tidak perlu kredensial API, dan sama sekali tanpa kode. Buat tim yang butuh aliran data ke tools yang sudah dipakai, ini sangat menghemat waktu.

Menjadwalkan Scrape Amazon Otomatis — Bab yang Sering Hilang

Pemantauan harga dan inventaris butuh scraping berulang, bukan sekadar sekali jalan. Tapi saya tidak menemukan satu pun artikel kompetitor yang membahas penjadwalan. Berikut cara mengotomatisasi scraper Python Anda.

Cron Jobs (Linux/macOS)

Buka crontab Anda:

1crontab -e

Tambahkan baris untuk menjalankan scraper setiap hari pukul 6 pagi:

10 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Atau setiap 6 jam:

10 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Windows Task Scheduler

Buat file batch run_scraper.bat:

1@echo off
2cd /d "C:\path\to\amazon-scraper"
3call venv\Scripts\activate
4python scraper.py
5deactivate

Lalu buka Task Scheduler → Create Basic Task → atur trigger (Daily, Hourly) → Action: "Start a program" → arahkan ke run_scraper.bat.

GitHub Actions (Free Tier)

Untuk penjadwalan berbasis cloud tanpa infrastruktur:

1name: Amazon Scraper
2on:
3  schedule:
4    - cron: "0 6 * * *"  # Setiap hari pukul 6 pagi UTC
5  workflow_dispatch:       # Trigger manual
6jobs:
7  scrape:
8    runs-on: ubuntu-latest
9    steps:
10      - uses: actions/checkout@v3
11      - name: Set up Python
12        uses: actions/setup-python@v4
13        with:
14          python-version: "3.11"
15      - name: Install dependencies
16        run: pip install -r requirements.txt
17      - name: Run scraper
18        run: python scraper.py
19      - name: Commit results
20        run: |
21          git config user.name 'GitHub Actions'
22          git config user.email 'actions@github.com'
23          git add data/
24          git diff --staged --quiet || git commit -m "Update scraped data"
25          git push

Simpan kredensial proxy di GitHub Secrets, dan Anda punya pipeline scraping otomatis gratis.

Alternatif Tanpa Kode: Scheduled Scraper dari Thunderbit

Buat tim yang tidak mau ngurus sintaks cron atau infrastruktur cloud, Thunderbit punya bawaan. Anda cukup jelaskan jadwal dalam bahasa biasa (misalnya "setiap hari jam 8 pagi" atau "setiap Senin"), tambahkan URL Amazon Anda, lalu klik "Schedule." Tidak perlu terminal, tidak perlu file YAML, dan tidak perlu deployment pipeline. Ini sangat berguna untuk tim ecommerce yang memantau harga atau stok secara terus-menerus.

Python DIY vs. Scraper API vs. Tanpa Kode: Mana yang Harus Dipilih?

Ini pertanyaan yang sering saya lihat di forum, tapi tidak ada artikel peringkat atas yang memberi jawaban terstruktur. Jadi, ini pandangan jujur saya:

CriteriaPython + BS4/curl_cffiScraper API (ScraperAPI, Oxylabs)No-Code (Thunderbit)
Waktu setup30–60 menit10–20 menit~2 menit
Butuh codingYa (Python)Ya (API calls)Tidak
Anti-blocking bawaanTidak (DIY)YaYa
Menangani rendering JSHanya dengan Selenium/PlaywrightBervariasi tergantung providerYa (Browser atau Cloud mode)
PenjadwalanDIY (cron/cloud)Beberapa menyediakanBawaan
BiayaGratis (+ biaya proxy)$30–100+/bulanAda free tier
MaintenanceTinggi (selector bisa rusak)RendahTidak ada (AI beradaptasi)
Paling cocok untukDeveloper yang ingin kendali penuhSkala besar & reliabilitas volume tinggiKecepatan, non-developer, pengguna bisnis

Python adalah pilihan tepat kalau Anda ingin belajar, mengustomisasi setiap detail, dan tidak keberatan dengan maintenance berkelanjutan. Scraper API menangani anti-blocking untuk Anda, tapi tetap butuh kode. Sementara Thunderbit adalah jalur tercepat untuk sales, ecommerce ops, atau siapa pun yang hanya butuh data — tanpa selector, tanpa kode, tanpa maintenance saat HTML Amazon berubah.

Cara Thunderbit Scrape Produk Amazon dalam 2 Klik

Tentu saya bias — tim saya yang membangun ini. Tapi workflow-nya memang sesederhana ini:

  1. Install
  2. Buka halaman hasil pencarian atau halaman produk Amazon
  3. Klik "AI Suggest Fields" (atau gunakan template scraper Amazon instan)
  4. Klik "Scrape"

AI Thunderbit membaca halaman, mengenali struktur data, lalu mengekstrak semuanya ke tabel yang rapi. Anda bisa mengekspor ke Excel, Google Sheets, Airtable, atau Notion secara gratis. Keunggulan utamanya: saat Amazon mengubah HTML minggu depan (dan itu pasti terjadi), AI Thunderbit menyesuaikan diri otomatis. Tidak ada script rusak, tidak ada update selector.

Untuk memperkaya daftar produk dengan data dari halaman detail, fitur Subpage Scraping Thunderbit akan otomatis mengikuti link ke halaman produk dan mengambil field tambahan seperti gambar, deskripsi, dan varian — sesuatu yang butuh cukup banyak kode tambahan kalau dikerjakan di Python.

Tips Agar Python Amazon Scraper Tetap Jalan Jangka Panjang

Kalau Anda memilih jalur Python, berikut cara meminimalkan masalah maintenance:

  • Periksa selector secara berkala. Amazon sering mengubahnya. Bookmark artikel ini — saya akan memperbarui tabel selector ketika ada perubahan.
  • Pantau tingkat keberhasilan. Lacak rasio respons 200 vs. 503/CAPTCHA. Pasang alert (bahkan email sederhana) saat success rate turun di bawah 80%.
  • Simpan HTML mentah. Simpan respons HTML lengkap bersama data hasil parsing. Kalau selector berubah, Anda bisa mem-parse ulang data historis tanpa scraping ulang.
  • Rotasi proxy dan User-Agent secara rutin. Fingerprint statis bisa ditandai dalam hitungan jam saat skala besar.
  • Gunakan exponential backoff. Jangan pernah retry langsung setelah diblokir.
  • Containerize dengan Docker. Bungkus scraper Anda dalam container Docker untuk memudahkan deployment dan portabilitas.
  • Tambahkan validasi data. Pastikan harga berupa angka, rating berada di antara 1–5, dan judul tidak kosong. Satu tim melaporkan setelah menambahkan lapisan validasi.

Atau, kalau semua itu terdengar seperti pekerjaan yang lebih banyak daripada yang ingin Anda tangani, pertimbangkan apakah tools tanpa kode seperti Thunderbit mungkin lebih cocok untuk use case Anda. Tidak ada salahnya memilih jalur yang lebih cepat — saya sudah cukup lama debugging scraper untuk tahu bahwa kadang kode terbaik adalah kode yang tidak perlu Anda tulis.

Pertimbangan Hukum dan Etika Saat Scraping Amazon

Karena ini selalu muncul dalam setiap diskusi tentang Amazon scraping, berikut catatan singkat soal lanskap hukumnya:

  • Scraping data yang tersedia publik umumnya legal di AS. Putusan penting (2022) menegaskan bahwa akses ke data publik tidak melanggar CFAA. Baru-baru ini, (2024) dan (2024) memperkuat prinsip ini.
  • ToS Amazon melarang akses otomatis. Ini urusan perdata (breach of contract), bukan pidana. Pengadilan umumnya membedakan keduanya.
  • Amazon v. Perplexity (2025) adalah kasus aktif yang melibatkan AI scraping halaman Amazon. Preliminary injunction dikeluarkan pada Maret 2026. Kasus ini layak diikuti.
  • Tetap pada halaman publik. Jangan scrape konten yang dilindungi login, data pribadi, atau apa pun yang berada di balik autentikasi.
  • Hormati rate limit. Jangan membanjiri server Amazon. Jeda 2–5 detik antar request sudah masuk akal.
  • Gunakan data secara bertanggung jawab. Scrape untuk analisis, bukan untuk menerbitkan ulang konten berhak cipta.
  • Konsultasikan dengan penasihat hukum untuk penggunaan komersial skala besar, terutama jika Anda berada di Uni Eropa (GDPR berlaku untuk data pribadi).

Untuk pembahasan lebih dalam, lihat panduan kami tentang .

Penutup

Sekarang Anda punya Python Amazon scraper yang berfungsi dengan selector 2025 yang sudah diverifikasi, strategi anti-blocking berlapis yang jauh melampaui sekadar "tambahkan User-Agent," opsi penjadwalan praktis untuk monitoring berkelanjutan, serta metode ekspor yang mengalirkan data ke Google Sheets, database, atau tool apa pun yang dipakai tim Anda.

Ringkasan singkat:

  • Python + curl_cffi + BeautifulSoup memberi Anda kendali penuh dan tingkat keberhasilan ~94% saat dipadukan dengan TLS impersonation
  • Anti-blocking butuh beberapa lapis: rotasi header, TLS impersonation, rotasi proxy, rate limiting, dan exponential backoff
  • Penjadwalan mengubah script sekali jalan menjadi pipeline monitoring berkelanjutan (cron, GitHub Actions, atau scheduler bawaan Thunderbit)
  • Ekspor selain CSV — Google Sheets, SQLite, Airtable, Notion — adalah tempat nilai bisnis sesungguhnya
  • Thunderbit menawarkan alternatif 2 klik untuk non-developer atau siapa pun yang lebih ingin menganalisis data daripada debugging selector

Kalau Anda ingin mencoba kodenya, semua yang ada di panduan ini siap untuk disalin dan dijalankan. Dan kalau Anda lebih suka melewati coding sepenuhnya, memungkinkan Anda langsung mencoba pendekatan tanpa kode di Amazon.

Untuk info lebih lanjut, lihat juga panduan kami tentang , , dan . Anda juga bisa menonton panduan langkah demi langkah di .

Selamat scraping — semoga selector Anda bertahan sampai update Amazon berikutnya.

FAQ

1. Mengapa Python Amazon scraper saya diblokir setelah beberapa request?

Amazon memakai sistem pertahanan enam lapis: analisis reputasi IP, TLS fingerprinting (JA3/JA4), deteksi lingkungan browser, biometrik perilaku, tantangan CAPTCHA, dan deteksi anomali berbasis ML. Script requests dasar dengan header User-Agent saja hanya berhasil sekitar . Anda perlu TLS impersonation (curl_cffi), rotasi header penuh, rotasi proxy, dan rate limiting dengan random jitter agar akses tetap stabil.

2. Library Python apa yang paling bagus untuk scraping produk Amazon di 2025?

curl_cffi untuk request HTTP dengan TLS impersonation (peningkatan paling besar), BeautifulSoup4 dengan lxml untuk parsing HTML, pandas untuk struktur data dan ekspor, serta Selenium atau Playwright sebagai fallback untuk konten yang dirender JavaScript. Python dipakai oleh developer scraping.

3. Apakah scraping data produk Amazon legal?

Scraping data publik umumnya legal di AS, didukung oleh putusan seperti hiQ v. LinkedIn dan Meta v. Bright Data. Terms of Service Amazon melarang akses otomatis, tetapi pengadilan membedakan pelanggaran ToS (perdata) dari pelanggaran pidana. Selalu hindari konten yang dilindungi login, hormati rate limit, dan konsultasikan dengan penasihat hukum untuk penggunaan komersial skala besar.

4. Bisa tidak scrape Amazon tanpa menulis kode sama sekali?

Bisa. Tools seperti memungkinkan Anda scrape produk Amazon dalam 2 klik dengan Chrome extension. Deteksi field berbasis AI otomatis menyusun data, dan Anda bisa mengekspor ke Excel, Google Sheets, Airtable, atau Notion secara gratis. Saat Amazon mengubah HTML, AI Thunderbit beradaptasi tanpa update manual.

5. Seberapa sering Amazon mengubah selector HTML-nya, dan bagaimana cara menjaga scraper tetap update?

Sering dan tanpa pemberitahuan. Komunitas scraping melaporkan bahwa crawler butuh perbaikan mingguan akibat perubahan DOM. Agar tetap selangkah di depan, pantau tingkat keberhasilan scraper, simpan HTML mentah untuk parsing ulang, dan cek selector terhadap halaman live secara rutin. Alternatifnya, tools berbasis AI seperti Thunderbit beradaptasi otomatis sehingga Anda tidak perlu repot maintenance.

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