Sebagian besar tutorial tentang "gemini web scraping" rasanya ditulis buat orang yang sama: developer Python yang sudah punya virtual environment, skema Pydantic, dan opini keras soal library async. Kalau itu memang Anda, bagus β kita akan langsung masuk ke bagian kodenya. Tapi kalau Anda kerja di sales, marketing, atau operasional ecommerce dan cuma butuh data terstruktur dari banyak halaman web tanpa harus belajar apa itu markdownify, Anda tidak sendirian.
Gemini adalah keluarga AI multimodal milik Google, dan sekarang makin sering dipakai sebagai mesin utama untuk ekstraksi data web. Survei Stack Overflow Developer Survey 2025 menunjukkan bahwa 84% developer sudah memakai atau berencana memakai alat AI β dan web scraping berbasis LLM jadi bagian besar dari tren itu. Tapi, ada jarak yang nyata antara "demo keren di satu URL" dan pipeline yang sanggup menangani pagination, subpage, anti-bot wall, serta HTML yang berantakan dalam skala besar. Panduan ini membahas jalur Python (kode) dan no-code, menjelaskan pemilihan model dengan hitungan token yang nyata, membahas scraping multi-halaman (bagian yang sering dilewatkan tutorial lain), dan jujur soal batasan saat Gemini scraping gagal. Di akhir, Anda akan tahu jalur mana yang paling cocok untuk workflow Anda β sekaligus terhindar dari jebakan yang sering saya lihat menjatuhkan developer maupun pengguna bisnis.
Apa Itu Gemini Web Scraping?
Gemini web scraping berarti mengirim konten halaman web β HTML, Markdown, atau bahkan screenshot β ke salah satu model AI Gemini milik Google, lalu model itu menginterpretasikan halaman dan mengembalikan data terstruktur. Tanpa CSS selector. Tanpa XPath. Tanpa aturan rapuh yang langsung rusak begitu situs sedikit mengubah tata letaknya.
Alur utamanya seperti ini:
- Ambil halaman (dengan
requests, browser headless, atau ekstensi Chrome) - Bersihkan dan ubah format kontennya (biasanya HTML β Markdown, supaya token lebih hemat)
- Kirim ke Gemini dengan skema yang menjelaskan field yang Anda butuhkan
- Terima JSON terstruktur kembali β siap dipakai di spreadsheet, CRM, atau database
Bandingkan dengan scraping tradisional memakai BeautifulSoup atau Selenium, di mana Anda harus menulis selector secara manual seperti div.product-title > span.price dan berharap situsnya tidak redesign minggu depan. Gemini membaca halaman seperti manusia β ia paham konteks, bisa menyesuaikan diri dengan perubahan layout, dan sanggup menghadapi format yang berantakan tanpa aturan khusus.
Satu hal penting lagi: Gemini secara native bersifat multimodal. Ia bisa memproses teks, gambar, video, audio, PDF, dan kode dalam satu request. Itu membuka pendekatan scraping baru β misalnya mengirim screenshot Π²ΠΌΠ΅ΡΡΠΎ HTML β yang tidak bisa ditandingi kebanyakan LLM lain. Kita akan bahas itu nanti.
Kenapa Gemini Web Scraping Penting untuk Tim Bisnis
Kalau Anda bertanya-tanya kenapa manajer marketing atau analis ecommerce perlu peduli pada LLM dan web scraping, jawabannya singkat: ini menghemat banyak waktu, dan tidak gampang rusak setiap kali website diperbarui.
Pasar software web scraping diproyeksikan tumbuh dari sekitar $1 miliar pada 2025 menjadi lebih dari $2 miliar pada 2030 β dan ekstraksi berbasis AI adalah segmen dengan pertumbuhan tercepat. Ini bukan cuma hype; ini mencerminkan perubahan nyata dalam cara tim mengumpulkan data.
Berikut contoh penggunaan Gemini scraping dalam workflow bisnis sehari-hari:
| Use Case | Apa yang Di-scrape | Siapa yang Diuntungkan |
|---|---|---|
| Lead generation | Informasi kontak dari direktori, LinkedIn (publik), situs perusahaan | Sales, BDR |
| Pemantauan harga kompetitor | Harga produk, stok, promo | Ecommerce, tim pricing |
| Ekstraksi katalog produk | Nama, spesifikasi, gambar, ulasan | Merchandising, operasional marketplace |
| Listing properti | Detail properti, harga, info agen | Agen, investor |
| Agregasi konten | Berita, artikel blog, penyebutan di media sosial | Marketing, PR |
| Riset pasar kerja | Jabatan, gaji, lokasi | HR, recruiting |
Keuntungan praktisnya ada dua. Pertama, Anda tidak perlu terus-menerus menulis, menguji, dan memperbaiki script parsing β model membaca halaman dari awal setiap kali. Kedua, Anda tidak perlu menyewa developer setiap kali situs memindahkan sebuah <div>. Free tier Gemini membuat eksperimen hampir tanpa biaya untuk pekerjaan skala kecil: sekitar 1.000 request/hari di Flash-Lite dan 100/hari di Pro, tanpa perlu kartu kredit.
Model Gemini Mana yang Sebaiknya Dipilih? (Flash Lite vs. Flash vs. Pro)
Tidak semua model Gemini setara untuk scraping. Ini perbandingan praktis yang saya harap ada di setiap tutorial, karena salah pilih tier cuma bikin uang habis atau data jadi jelek.
Ketiga model Gemini 2.5 saat ini sama-sama punya context window 1.048.576 token dan bersifat multimodal. Bedanya ada pada biaya, kecepatan, dan seberapa baik mereka menangani ekstraksi yang kompleks.
| Model | Biaya Input (per 1M token) | Biaya Output (per 1M token) | Cocok untuk | Akurasi pada Skema Kompleks | Kecepatan |
|---|---|---|---|---|---|
| Gemini 2.5 Flash Lite | ~$0.025 | ~$0.10 | Data sederhana dan datar, volume tinggi | β οΈ Kurang kuat untuk field bertingkat/opsional | Paling cepat |
| Gemini 2.5 Flash | ~$0.075 | ~$0.625 | Sebagian besar tugas scraping | β Bagus untuk ekstraksi terstruktur | Cepat |
| Gemini 2.5 Pro | ~$0.3125 | ~$2.50 | Skema bertingkat kompleks, kasus ekstrem | β Akurasi terbaik | Paling lambat |
(Harga diambil dari Gemini Developer API. Batch API mendapat diskon 50% dari tarif ini.)
Gemini 2.5 Flash Lite: Cepat dan Murah, Tapi Waspadai Kekosongan Data
Flash Lite adalah opsi paling hemat biaya. Ini ideal untuk data sederhana dan datar β nama produk, harga, listing satu tingkat β dalam volume tinggi. Tapi ada masalah yang sudah terdokumentasi pada field opsional, timestamp, dan data bertingkat. Seorang developer di forum Google melaporkan bahwa Flash Lite bisa "ngaco" saat skema berisi properti non-wajib, bahkan mengeluarkan teks berulang sampai token limit habis. Kalau skema Anda punya lebih dari dua level nesting, atau field yang kadang tidak ada di sebagian halaman, Flash Lite bisa menghabiskan token dan kesabaran Anda.
Gemini 2.5 Flash: Titik Paling Pas untuk Kebanyakan Tugas Scraping
Flash adalah model yang paling saya sarankan untuk memulai hampir semua pekerjaan scraping nyata. Ia menangani ekstraksi terstruktur dengan baik, mampu mengelola logika pagination, dan biaya inputnya sekitar 3Γ Flash Lite β tapi kenaikan akurasinya sepadan. Pada benchmark penalaran setara GPQA, Flash hanya tertinggal beberapa poin dari Pro, yang berarti ia cukup andal untuk inferensi, normalisasi, dan flattening yang memang dibutuhkan scraping.
Gemini 2.5 Pro: Akurasi Maksimal untuk Data Kompleks
Pro adalah alat presisi. Gunakan saat Anda mengekstrak skema bertingkat dalam, misalnya spesifikasi produk dengan beberapa grup varian, masing-masing punya ukuran, warna, dan harga, atau ketika field palsu sama sekali tidak bisa diterima (data hukum, finansial, medis). Biaya inputnya kira-kira 12Γ Flash Lite, jadi simpan untuk pekerjaan yang akurasi lebih penting daripada harga.
Contoh Biaya Nyata: 10.000 Halaman Produk
Dengan asumsi Anda memproses HTML menjadi Markdown terlebih dahulu (yang memang sebaiknya Anda lakukan β nanti kita bahas), sebuah halaman produk biasanya turun dari ~20.000 token HTML mentah menjadi ~4.000 token Markdown. JSON output sekitar 500 token per halaman.
| Model | Biaya Input (40M token) | Biaya Output (5M token) | Total untuk 10K Halaman |
|---|---|---|---|
| Flash Lite | $1.00 | $0.50 | ~$1.50 |
| Flash | $3.00 | $3.13 | ~$6.13 |
| Pro | $12.50 | $12.50 | ~$25.00 |
Tanpa preprocessing Markdown (HTML mentah sekitar ~200M token input), angkanya naik 4β5Γ. Preprocessing adalah optimasi yang paling berdampak besar dalam pipeline ini.
Kode vs. No-Code: Dua Jalur Gemini Web Scraping
Di sinilah persimpangannya. Kalau Anda developer yang membangun pipeline kustom, jalur Python + Gemini API memberi kontrol maksimal. Kalau Anda pengguna bisnis yang butuh data sekarang juga dan tidak mau menyentuh terminal, AI scraper no-code akan membawa Anda lebih cepat sampai tujuan.
| Kriteria | Gemini API (Python) | Thunderbit (No-Code) |
|---|---|---|
| Waktu setup | 15β30 menit (env, keys, library) | < 1 menit (install ekstensi Chrome) |
| Perlu coding | Ya (Python, Pydantic) | Tidak |
| Penanganan pagination | Script manual | Sudah built-in (click atau infinite scroll) |
| Enrichment subpage | Custom code per situs | "Scrape Subpages" 1 klik |
| Pengelolaan biaya token | Manual (bersihkan HTML, pilih model) | Ditangani mesin AI |
| Opsi ekspor | JSON/CSV via script | Excel, Google Sheets, Airtable, Notion |
| Paling cocok untuk | Developer yang membangun pipeline kustom | Pengguna bisnis yang butuh data sekarang |
Thunderbit adalah opsi no-code yang kami bangun di Thunderbit β ekstensi Chrome yang memakai AI (termasuk Gemini, ChatGPT, Claude, dan lainnya di balik layar) untuk menyarankan field, scraping dalam dua klik, dan mengekspor ke tool pilihan Anda. Saya akan bahas kedua jalur di bawah.
Bagi pengguna yang lebih suka spreadsheet, Quadratic juga layak diketahui β spreadsheet AI yang bisa menjalankan web scraping berbasis Gemini langsung di dalam sheet. Namun untuk workflow yang dimulai dari halaman web yang sudah jelas (listing produk, direktori, database lead), Thunderbit lebih cocok dengan pola pikir pengguna.
Langkah demi Langkah: Gemini Web Scraping dengan Python
Bagian ini untuk developer. Kalau Anda ingin jalur no-code, silakan lompat ke bagian berikutnya.
Sebelum mulai:
- Tingkat kesulitan: Menengah (perlu familiar dengan Python)
- Waktu yang dibutuhkan: ~20β30 menit untuk scraping pertama
- Yang Anda perlukan: Python 3.10+, akun Google AI Studio (gratis), URL target
Langkah 1: Siapkan Environment Python dan API Key Gemini
Buat folder proyek dan virtual environment, lalu instal library yang dibutuhkan:
mkdir gemini-scraper && cd gemini-scraper
python -m venv venv && source venv/bin/activate
pip install -U google-genai requests beautifulsoup4 markdownify pydantic
Penting: SDK yang benar pada 2026 adalah google-genai. Package lama google-generativeai sudah end-of-life pada 2025-11-30 dan kini deprecated. Kalau Anda melihat import google.generativeai as genai di tutorial, berarti kodenya sudah usang.
Selanjutnya, ambil API key dari Google AI Studio. Klik "Get API Key", buat key baru, lalu simpan sebagai environment variable:
export GEMINI_API_KEY="your-key-here"
Sekarang Anda sudah punya environment Python yang siap dipakai, semua dependency terpasang, dan API key tersedia.
Langkah 2: Ambil HTML Halaman Target
Gunakan requests untuk mengambil halaman. Sebagai contoh, mari scrape halaman produk:
import requests
url = "https://example.com/product/widget-pro"
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
html = response.text
Kalau situsnya memakai rendering JavaScript berat atau proteksi anti-bot, requests.get() bisa saja hanya mengembalikan shell kosong atau 403. Kita akan bahas mitigasinya di bagian keterbatasan β tapi untuk banyak situs publik, cara ini sudah cukup baik.
Langkah 3: Bersihkan HTML dan Ubah ke Markdown
Ini langkah yang paling sering disebut tutorial, tapi jarang dihitung dampaknya. HTML mentah untuk halaman produk biasa bisa mencapai sekitar 20.000 token. Setelah dipangkas dengan BeautifulSoup dan dikonversi ke Markdown, jumlahnya turun menjadi kira-kira 765β4.000 token β pengurangan 5β10Γ yang benar-benar menghemat biaya dan mengurangi halusinasi.
from bs4 import BeautifulSoup
from markdownify import markdownify
soup = BeautifulSoup(html, "html.parser")
main = soup.select_one("main") or soup # ambil hanya area konten utama
markdown_content = markdownify(str(main))
Pemanggilan select_one("main") akan membuang header, footer, nav bar, dan script β semua noise yang membuang token dan membingungkan model. Kalau situs tidak memakai tag <main>, coba .product-detail, #content, atau pembungkus lain yang memuat data sebenarnya.
Setelah langkah ini, Anda seharusnya punya string Markdown yang bersih dan hanya berisi konten penting halaman.
Langkah 4: Definisikan Skema Data dan Kirim ke Gemini
Gunakan Pydantic untuk mendefinisikan output yang Anda inginkan. SDK google-genai menerima Pydantic BaseModel langsung sebagai response_schema:
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
name: str
price: str
sku: str | None = None
description: str
sizes: list[str] = []
colors: list[str] = []
client = genai.Client() # membaca GEMINI_API_KEY dari env
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Ekstrak detail produk dari halaman ini:\n\n{markdown_content}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
product = response.parsed
print(product)
Beberapa jebakan dari bug yang sudah didokumentasikan:
- Jangan pakai
Field(default=...)pada skema yang dikirim ke Gemini β API akan melemparValueError. Gunakansku: str | None = Nonedi level tipe saja. - Jaga nesting tetap dangkal (maksimal 3 level). Skema yang terlalu bertingkat sering membuat Flash dan Flash Lite menghasilkan output rekursif atau bracket yang tidak tertutup.
- Tandai field sebagai wajib saat memakai Flash Lite, dan gunakan string kosong sebagai penanda alih-alih menghilangkannya β penanganan field opsional oleh Flash Lite tidak dapat diandalkan.
Sekarang Anda seharusnya sudah punya objek Product yang berhasil diparsing dengan data terstruktur dari halaman.
Langkah 5: Ekspor dan Simpan Data Hasil Scraping
Simpan hasilnya sebagai JSON atau CSV:
import json
with open("products.json", "w") as f:
json.dump(product.model_dump(), f, indent=2)
Kalau ingin mengalirkannya ke Google Sheets, Anda bisa memakai library gspread. Untuk database, serialisasikan ke ORM pilihan Anda. Output terstruktur dari Gemini cukup bersih untuk langsung dipakai di sebagian besar tool downstream.
Langkah demi Langkah: Gemini Web Scraping Tanpa Kode (Pakai Thunderbit)
Ini jalur untuk pengguna bisnis β atau developer yang tidak ingin menulis script scraping sekali pakai.
Sebelum mulai:
- Tingkat kesulitan: Pemula
- Waktu yang dibutuhkan: ~5 menit untuk scraping pertama
- Yang Anda perlukan: Browser Chrome, ekstensi Thunderbit (free tier bekerja)
Langkah 1: Instal Ekstensi Thunderbit Chrome
Buka Chrome Web Store dan klik "Add to Chrome." Daftar dengan email Anda β seluruh prosesnya kurang dari satu menit. Bandingkan dengan setup Python 15β30 menit di atas.
Langkah 2: Buka Halaman Target dan Klik "AI Suggest Fields"
Buka website yang ingin Anda scrape β listing produk, direktori properti, database lead, apa pun itu. Klik ikon Thunderbit di toolbar browser, lalu tekan "AI Suggest Fields."
AI milik Thunderbit membaca halaman dan otomatis merekomendasikan nama kolom serta tipe data β misalnya "Product Name," "Price," "Rating," "Image URL." Anda bisa mengubah nama kolom, menghapus field yang tidak perlu, atau menambahkan prompt AI kustom per kolom (misalnya, "klasifikasikan sebagai High/Medium/Low" atau "terjemahkan ke English").
Anda akan melihat preview tabel dengan kolom yang sudah tersusun sebelum satu baris pun di-scrape.
Langkah 3: Klik "Scrape" dan Periksa Hasilnya
Sekali klik. Thunderbit menangani pagination β baik tombol "Next" berbasis klik maupun infinite scroll β lalu mengekstrak data ke tabel terstruktur. Anda bisa memilih antara:
- Cloud Scraping: Lebih cepat, memproses hingga 50 halaman secara bersamaan. Cocok untuk situs publik.
- Browser Scraping: Berjalan di tab browser Anda yang sedang login. Gunakan untuk situs yang memerlukan autentikasi (CRM, direktori tertutup, tool internal).
Hasilnya tampil langsung di tabel pada sidebar ekstensi. Cek error yang jelas sebelum mengekspor.
Langkah 4: Ekspor ke Excel, Google Sheets, Airtable, atau Notion
Klik tombol export dan pilih format Anda. Thunderbit mengekspor ke Excel, Google Sheets, Airtable, dan Notion β gratis, tanpa paywall. Field gambar diunggah langsung ke library gambar Notion dan Airtable, yang sangat membantu kalau Anda sedang men-scrape foto produk atau foto profil.
Tidak perlu parsing JSON. Tidak perlu scripting. Data siap dipakai seketika.
Scraping Multi-Halaman dan Subpage dengan Gemini
Kebanyakan tutorial diam-diam berhenti setelah satu URL. Pekerjaan scraping nyata tidak sesederhana itu.
Scraping 500 halaman produk dengan pagination dan subpage detail adalah pekerjaan yang berbeda β dan jarak antara demo satu URL dengan realitas itu sangat besar.
Menangani Pagination dengan Gemini API (Pendekatan Kode)
Untuk URL berbasis nomor halaman (pola yang paling umum), lakukan loop melalui halaman sampai hasilnya kosong:
import time
all_products = []
for page in range(1, 101): # sampai 100 halaman
url = f"https://example.com/products?page={page}"
md = fetch_clean(url) # fungsi HTMLβMarkdown Anda dari bagian sebelumnya
response = client.models.generate_content(
model="gemini-2.5-flash-lite", # murah untuk halaman listing
contents=f"Ekstrak nama produk dan URL:\n\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=list[ListingItem],
),
)
items = response.parsed
if not items:
break
all_products.extend(items)
time.sleep(4) # hormati rate limit free tier
Untuk situs berbasis cursor atau infinite scroll, Anda perlu menyadap endpoint XHR yang dipanggil front-end (cek tab Network di browser) dan melakukan loop langsung pada endpoint itu. Lebih murah daripada merender ulang, dan Anda hanya mengirim item ke Gemini jika field-nya memang perlu dibersihkan oleh LLM.
Perhatikan biaya token di sini β setiap halaman melipatgandakan tagihan. Gunakan Flash Lite untuk halaman listing sederhana dan naik ke Flash hanya untuk ekstraksi detail.
Scraping Subpage untuk Data yang Lebih Kaya (Pendekatan Kode)
Pola klasik dua tahap: Tahap 1 men-scrape halaman listing untuk URL, Tahap 2 mengunjungi setiap halaman detail untuk data yang lebih lengkap.
# Tahap 1: kumpulkan URL dengan Flash Lite murah
class Listing(BaseModel):
product_urls: list[str]
listing = client.models.generate_content(
model="gemini-2.5-flash-lite",
contents=f"Ekstrak URL produk:\n{listing_md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Listing,
),
).parsed
# Tahap 2: ekstrak detail dengan Flash
class ProductDetail(BaseModel):
name: str
price: str
specs: dict[str, str]
reviews: list[str]
for url in listing.product_urls:
md = fetch_clean(url)
detail = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Ekstrak detail produk:\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=ProductDetail,
),
).parsed
# simpan detail...
time.sleep(0.5)
Cara ini memang bekerja, tapi banyak sekali plumbing yang harus diurus: deduplikasi URL, error handling, rate limiting, retry logic, caching HTML mentah supaya perubahan skema tidak memaksa fetch ulang. Untuk 50 halaman, masih masuk akal. Untuk 5.000, Anda sedang membangun infrastruktur.
Alternatif No-Code: Pagination dan Scraping Subpage Bawaan Thunderbit
Thunderbit menangani pagination berbasis klik maupun infinite scroll secara otomatis β tanpa perlu menulis loop. Untuk enrichment subpage, fitur "Scrape Subpages" akan membuka setiap halaman detail yang terhubung dari listing Anda dan menambahkan field yang lebih dalam ke tabel asli. Satu klik, bukan satu script.
Mode cloud scraping memproses hingga 50 halaman secara bersamaan, yang sangat membantu saat Anda men-scrape katalog produk atau direktori properti dalam skala besar. Bagi siapa pun yang tidak ingin mengelola loop Python dan retry logic, ini adalah pilihan paling praktis. (Untuk pembahasan lebih lanjut tentang scraping data dari website ke Excel, kami punya panduan terpisah.)
Scraping Screenshot: Jalan Pintas Multimodal Gemini
Ini pendekatan yang biasanya dilewati tutorial: mengirim screenshot halaman web ke API vision Gemini, bukan HTML mentah. Seorang developer melaporkan bahwa satu screenshot hanya memakan sekitar ~258 token β jauh lebih hemat daripada ribuan token bahkan untuk Markdown yang sudah dibersihkan. Selisih biayanya sangat besar untuk ekstraksi sederhana.
Cara Memakai Vision API Gemini untuk Web Scraping
Ambil screenshot dengan Playwright, encode, lalu kirim ke Gemini:
from playwright.sync_api import sync_playwright
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
title: str
price: str
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://example.com/product/widget-pro")
page.wait_for_load_state("networkidle")
png_bytes = page.screenshot(full_page=False) # hanya area atas layar
client = genai.Client()
resp = client.models.generate_content(
model="gemini-2.5-flash",
contents=[
{"inline_data": {"mime_type": "image/png", "data": png_bytes}},
"Ekstrak judul produk dan harga sebagai JSON.",
],
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
print(resp.parsed)
Menurut dokumentasi token gambar Google, gambar dengan kedua dimensi β€ 384 piksel dikenakan biaya 258 token. Gambar yang lebih besar dipecah menjadi tile 768Γ768 dengan biaya 258 token per tile. Screenshot pendek di area atas layar (258β1.600 token) jelas lebih hemat daripada HTML mentah β tapi screenshot penuh yang sangat tinggi (~5.000 token) justru bisa kalah murah dibanding Markdown yang sudah dibersihkan (~765β1.200 token).
Keterbatasan Scraping Screenshot
- Presisi lebih rendah untuk tabel padat: Layout multi-kolom, font kecil, dan elemen yang saling tumpang tindih bisa menyebabkan pembacaan terpotong β bukan halusinasi, melainkan label yang terlewat atau header yang tidak sejajar.
- Tidak bisa mengikuti link: Vision mengembalikan teks, bukan anchor yang bisa diklik. Tidak ada pagination, tidak ada enrichment subpage.
- Batas resolusi: Teks di bawah ~10 px sering salah dibaca. Google menurunkan resolusi ke sekitar ~1.568 px pada sisi terpanjang.
- Overhead pengambilan: Peluncuran Playwright + menunggu networkidle memakan 2β5 detik per halaman, dan itu akan terasa berat saat skala besar.
Scraping screenshot unggul untuk halaman yang berat JavaScript, situs yang diblokir bot (saat requests.get() mendapat 403 tetapi browser bisa merender normal), dan halaman dengan data yang tertanam dalam chart atau gambar. Untuk halaman panjang dan penuh teks, Markdown tetap pilihan terbaik.
Scraping gambar dan PDF di Thunderbit memakai pendekatan AI-vision yang serupa β cukup masukkan gambar atau PDF, lalu sistem mengembalikan tabel terstruktur, tanpa perlu scripting screenshot atau urusan base64. (Lihat juga: cara mengonversi gambar ke Excel.)
Saat Gemini Web Scraping Gagal (dan Apa yang Harus Dilakukan)
Gemini adalah mesin ekstraksi, bukan mesin pengambil halaman. Kalau konten halaman tidak bisa Anda kirim ke Gemini, ia tidak akan membantu. Titik.
Ada beberapa situasi umum ketika pendekatan ini benar-benar gagal, dan kebanyakan tutorial cuma menaruhnya sebagai catatan kecil. Saya lebih suka bicara terus terang.
| Keterbatasan | Yang Terjadi | Mitigasi |
|---|---|---|
| Anti-bot / Cloudflare | Request API diblokir; requests.get() mengembalikan 403 atau halaman challenge | Gunakan proxy dengan rotasi TLS fingerprint, atau tool berbasis browser (mode browser scraping Thunderbit memakai sesi login Anda) |
| Batas context window | Halaman besar melebihi konteks yang bisa dipakai (~200Kβ300K untuk ekstraksi andal, meski secara teknis mendukung 1M) | Bersihkan HTML β Markdown, pecah halaman, atau gunakan screenshot |
| Halusinasi pada konten visual | Gemini menebak dari alt text atau caption, bukan isi gambar sebenarnya | Validasi output; gunakan vision API secara eksplisit untuk data gambar; tambahkan grounding validator |
| Rate limit API | Tersendat saat skala besar β free tier ~100 RPD di Pro, ~1.000 RPD di Flash Lite | Manajemen queue, batching (diskon 50%), atau beralih ke tool siap pakai |
| Ekstraksi tidak konsisten (model Lite) | Field opsional, timestamp, dan data bertingkat terlewat atau bahkan dibuat-buat | Naik ke Flash/Pro, atau tambahkan constraint skema yang lebih ketat |
| Situs terlindungi (LinkedIn, dll.) | Mengembalikan error atau data kosong | Scraping berbasis browser dengan sesi aktif (Thunderbit mendukung ini); patuhi ToS |
Beberapa poin ini layak diberi konteks tambahan.
Anti-bot sekarang aktif memahami LLM. Cloudflare memblokir AI crawler secara default sejak Juli 2025, dengan 416 miliar request bot AI diblokir dalam lima bulan pertama. Datadome menambahkan deteksi khusus LLM pada 2025 dan melihat lalu lintas bot LLM meningkat empat kali lipat. requests.get() biasa + Gemini pada dasarnya sudah tidak mempan untuk situs yang dilindungi Datadome. Masalahnya ada di fingerprint, bukan IP β ganti IP saja tidak akan membantu kalau TLS fingerprint sudah jelas-jelas terdeteksi sebagai "Python requests."
Halusinasi itu halus. LLM yang dilatih untuk membantu cenderung mengisi field opsional dengan fabricasi yang terdengar masuk akal daripada mengembalikan null. Saya pernah melihat model menebak brand produk dari slug URL, menyimpulkan mata uang dari TLD, dan menulis jumlah ulasan palsu yang terlihat meyakinkan dari skeleton loader. Mitigasinya: skema Pydantic yang ketat, retry loop dengan feedback validasi, grounding validator yang memeriksa apakah nilai yang diekstrak benar-benar muncul di HTML sumber, dan two-pass extraction (Flash mengekstrak, Pro memvalidasi sampel).
Context window 1M tidak benar-benar aman dipakai sampai 1M. Penelitian dari Chroma dan lainnya menunjukkan kualitas penalaran turun jauh sebelum batas token tercapai. Anggap saja ~200Kβ300K token sebagai batas praktis untuk ekstraksi terstruktur.
Decision Tree: Tool Mana yang Sebaiknya Dipakai?
- Volume rendah + halaman sederhana + developer β Gemini API free tier + Python
- Volume menengah + skema kompleks + developer β Gemini 2.5 Flash berbayar + Python + structured output + preprocessing
- Volume berapa pun + non-developer + login-walled atau pagination berat β Thunderbit
- Volume sangat tinggi + anti-bot berat + sangat kritis β Infrastruktur scraping terkelola (proxy service) + Gemini sebagai lapisan ekstraksi
Tips Gemini Web Scraping untuk Menghemat Waktu dan Biaya
Baik Anda menulis Python atau klik-klik tombol, tips ini akan menyelamatkan banyak masalah.
- Selalu ubah HTML ke Markdown sebelum mengirim ke Gemini. Penghematan token 5β10Γ itu umum; penghematan 95% juga bisa dicapai kalau Anda sekaligus memangkasnya dengan BeautifulSoup.
- Gunakan
google-genaisaja. Jangan pakai packagegoogle-generativeaiyang sudah deprecated β itu sudah EOL. - Mulai dari Flash Lite hanya untuk skema datar. Begitu ada nesting atau field opsional, langsung naik ke Flash.
- Hindari
Field(default=...)di skema Pydantic yang Anda kirim ke Gemini. Gunakansku: str | None = Nonedi level tipe. - Pydantic +
response_schemaitu sangat penting β ini berfungsi sekaligus sebagai kontrak dan pagar pengaman halusinasi. - Gunakan Batch API untuk pekerjaan di atas 1.000 halaman β diskon 50% dan tidak dihitung ke RPM real-time.
- Validasi sampel acak 10β50 baris secara manual sebelum memperbesar skala extractor baru. Perubahan akurasi sering tidak kelihatan sampai Anda cek langsung.
- Simpan HTML mentah ke disk β perubahan skema seharusnya tidak memaksa fetch ulang.
- Catat source URL pada setiap baris supaya Anda bisa melakukan re-crawl halaman tertentu tanpa mengulang seluruh pekerjaan.
- Untuk pengguna no-code: pakai custom AI prompt per kolom di Thunderbit supaya prompt engineering pindah ke level spreadsheet β terjemahkan, kategorikan, ringkas di level kolom.
Dan satu lagi: jangan bawa free tier ke production. Limit dipotong 50β80% pada Desember 2025 dan bisa dipotong lagi tanpa pemberitahuan.
Penutup
Jarak antara demo Gemini satu URL dan pipeline produksi jauh lebih besar daripada yang sering diakui tutorial.
Jalur Python + Gemini API memberi developer kontrol penuh atas pemilihan model, preprocessing, pagination, dan desain skema. Jalur no-code β tool seperti Thunderbit β memberi pengguna bisnis ekstraksi data terstruktur yang sama tanpa harus menyentuh terminal.
Berikut rangkuman yang paling penting:
- Pemilihan model itu penting. Flash Lite untuk volume, Flash untuk keseimbangan, Pro untuk kompleksitas. Jangan asal pilih yang paling murah lalu bingung kenapa datanya salah.
- Scraping multi-halaman dan subpage adalah bagian yang sering kurang dibahas tutorial β padahal di situlah pekerjaan nyata terjadi. Kedua jalur di sini menutup celah itu.
- Batasan yang dijelaskan dengan jujur justru menghemat waktu. Kalau sebuah situs memblokir request API, prompt engineering sehebat apa pun tidak akan membantu. Pilih tool yang tepat untuk pekerjaan itu, bukan yang paling mewah.
- Mengubah HTML ke Markdown adalah optimasi paling berdampak besar β bisa memangkas biaya lebih dari 75% dan mengurangi halusinasi.
Kalau Anda ingin coba jalur no-code, free tier Thunderbit memungkinkan Anda men-scrape beberapa halaman dan melihat hasilnya langsung. Kalau Anda lebih suka coding, free tier Gemini API cukup untuk membuat prototipe pipeline dalam satu sore. Apa pun pilihannya, Anda akan dapat data terstruktur jauh lebih cepat daripada copy-paste manual. Untuk pembahasan lebih lanjut tentang ekstraksi data dari website ke Excel atau AI web scraper terbaik, kami sudah membahasnya secara mendalam di blog.
Coba Thunderbit untuk Web Scraping dengan AI Get Started Free
FAQ
Berapa biaya memakai Gemini untuk web scraping?
Gemini API punya free tier dengan sekitar 100 request/hari di Pro, 500/hari di Flash, dan 1.000/hari di Flash Lite (per awal 2026 β limit ini dipangkas pada Desember 2025). Di tier berbayar, scraping 10.000 halaman produk biayanya kira-kira $1,50 dengan Flash Lite, $6 dengan Flash, atau $25 dengan Pro β dengan asumsi Anda mengubah HTML ke Markdown terlebih dahulu. Tanpa preprocessing, biayanya naik 4β5Γ. Batch API memberi diskon 50% untuk pekerjaan non-real-time.
Apakah Gemini bisa scrape website yang perlu login?
API Gemini sendiri tidak bisa login ke website β ia hanya memproses konten yang Anda kirim. Anda perlu mengambil HTML sendiri menggunakan sesi yang sudah terautentikasi (misalnya dengan browser headless dan cookie yang tersimpan). Mode Browser Scraping di Thunderbit menanganinya secara native: ia berjalan di tab Chrome yang sudah login, jadi situs apa pun yang bisa Anda lihat di browser juga bisa di-scrape oleh Thunderbit.
Apakah Gemini web scraping legal?
Legalitas tergantung pada syarat dan ketentuan situs, jenis data, dan yurisdiksi Anda. Di AS, setelah hiQ v. LinkedIn dan Meta v. Bright Data, scraping data publik yang bisa diakses tanpa login umumnya dianggap diperbolehkan β tetapi setiap kasus sangat bergantung pada detailnya. Scraping di balik login membawa risiko hukum yang lebih tinggi. Data pribadi milik warga EU tetap tunduk pada GDPR, baik situsnya publik maupun tidak. Selalu hormati robots.txt dan terms of service, serta hindari scraping data pribadi tanpa dasar hukum yang sah.
Bisakah Gemini dipakai untuk scrape situs dinamis yang berat JavaScript?
Bisa, tetapi JavaScript-nya harus dirender terlebih dahulu β entah dengan browser headless (Playwright, Puppeteer) atau dengan menyadap endpoint API situs secara langsung. Setelah HTML hasil render diperoleh, bersihkan dan kirim ke Gemini seperti biasa. Alternatifnya, scraping screenshot dengan vision API Gemini bisa melewati rendering JS sepenuhnya β kalau tampil di browser, Gemini juga bisa melihatnya. Thunderbit menangani halaman hasil render JS secara otomatis, baik di mode Cloud maupun Browser Scraping.
Apa bedanya memakai Gemini untuk scraping dibanding tool scraping khusus seperti Thunderbit?
Gemini adalah mesin ekstraksi β ia menginterpretasikan konten dan mengembalikan data terstruktur. Ia tidak mengunjungi website, menangani pagination, mengelola autentikasi, atau mengekspor ke spreadsheet. Anda tetap butuh sesuatu untuk membawa konten halaman ke Gemini dan sesuatu untuk memanfaatkan outputnya. Tool khusus seperti Thunderbit menggabungkan fetching, rendering, AI extraction, pagination, enrichment subpage, dan ekspor dalam satu paket β tanpa perlu plumbing tambahan.
Pelajari Lebih Lanjut


