Jika Anda memantau harga pesaing di Wildberries, Ozon, atau Avito melalui IMPORTXML di Google Sheets, cepat atau lambat tabel mulai mengeluarkan kesalahan #N/A, data diperbarui dengan keterlambatan beberapa jam, dan terkadang bahkan berhenti menarik data sama sekali. Ini bukan bug — ini adalah batasan dari Google Sheets itu sendiri dan perlindungan situs dari permintaan massal dari alamat IP yang sama. Dalam artikel ini, kita akan membahas tanda-tanda yang menunjukkan bahwa tabel telah mencapai batasnya, dan bagaimana beralih ke parser sendiri dengan proxy tanpa rasa sakit.
Bagaimana cara kerja IMPORTXML dan mengapa digunakan
IMPORTXML — adalah fungsi bawaan Google Sheets yang mengambil data dari halaman menggunakan permintaan XPath dan menyisipkannya langsung ke dalam sel. Rumus dalam bentuk =IMPORTXML("URL"; "//span[@class='price']") memungkinkan Anda untuk menarik harga produk dari halaman di Wildberries atau Ozon tanpa menulis satu baris kode pun dan secara otomatis memperbaruinya setiap jam.
Bagi penjual dan pemasar, ini tampak sebagai solusi yang ideal: tidak perlu pengembang, tidak perlu server, semuanya berfungsi langsung di tabel yang sudah dikenal. Toko kecil dengan 20-30 produk benar-benar dapat bertahan bertahun-tahun hanya dengan satu IMPORTXML, tanpa menyadari adanya masalah. Namun, begitu jumlah SKU yang dilacak melebihi beberapa ratus, dan frekuensi pembaruan diperlukan lebih dari sekali sehari, tetapi sekali setiap jam — mulai terjadi gangguan sistem yang tidak dapat diselesaikan hanya dengan pengaturan fungsi itu sendiri.
Masalahnya adalah semua permintaan IMPORTXML berasal dari server Google, bukan dari komputer Anda. Google memiliki kumpulan alamat IP yang terbatas untuk permintaan semacam itu, dan marketplace sangat menyadari rentang ini. Ketika jumlah permintaan meningkat, perlindungan situs diaktifkan — dan alih-alih harga di sel, muncul kesalahan atau nilai kosong.
7 tanda bahwa IMPORTXML sudah tidak berfungsi
Sebelum menghabiskan waktu untuk beralih ke solusi yang lebih kompleks, pastikan bahwa masalahnya memang terletak pada batasan, bukan pada kesalahan pengetikan dalam rumus. Berikut adalah gejala konkret yang menunjukkan hal ini:
- Massal #N/A — secara bersamaan 30-50% rumus berhenti bekerja, meskipun kemarin semuanya baik-baik saja dan struktur halaman tidak berubah.
- Keterlambatan pembaruan meningkat — sebelumnya data diperbarui dalam 5-10 menit, sekarang tabel "berpikir" selama 30-40 menit atau tidak diperbarui sama sekali tanpa perhitungan manual.
- Kesalahan "Resource at url contacted too many times" — pesan langsung dari Google bahwa Anda telah mencapai batas internal untuk permintaan ke satu domain.
- Data yang diterima sudah usang — harga di tabel berbeda dari yang sebenarnya di situs, karena Google memberikan versi halaman yang di-cache alih-alih yang terbaru.
- Jumlah baris melebihi 300-500 — semakin banyak rumus IMPORTXML dalam satu dokumen, semakin tinggi kemungkinan pemblokiran kolektif berdasarkan domain.
- Frekuensi pembaruan diperlukan lebih sering dari sekali per jam — IMPORTXML secara fisik tidak dirancang untuk pemantauan real-time, tidak ada mekanisme rotasi IP.
- Situs meminta otorisasi atau captcha — Wildberries dan Ozon semakin sering menampilkan halaman dengan pemeriksaan JavaScript, yang tidak dapat dilalui oleh IMPORTXML sama sekali.
Jika Anda menemukan setidaknya 2-3 poin dari daftar ini — ini bukan glitch sementara dari Google Sheets, tetapi batas struktural dari teknologi. Selanjutnya, Anda dapat terus memperbaiki rumus, menambahkan IFERROR dan menghitung ulang secara manual, tetapi volume pekerjaan manual akan tumbuh lebih cepat daripada volume data yang berguna.
Mengapa situs memblokir permintaan dari Google Sheets
Marketplace seperti Wildberries dan Ozon setiap hari menerima jutaan permintaan otomatis dari pesaing, layanan analitik, dan bot. Untuk tidak membebani server dan melindungi data harga dari penguraian massal, mereka menerapkan beberapa tingkat perlindungan:
- Rate limiting berdasarkan IP — jika dari satu alamat datang lebih dari N permintaan per menit, IP tersebut diblokir sementara.
- Analisis User-Agent — permintaan dari bot Google untuk IMPORTXML mudah dibedakan dari browser biasa berdasarkan header.
- JavaScript rendering — sebagian konten dimuat secara dinamis melalui skrip, dan IMPORTXML hanya melihat HTML asli tanpa menjalankan JS.
- Geo-filtering — permintaan dari IP server Google sering kali terjebak dalam filter "tidak terlihat seperti pembeli nyata".
Masalah utama adalah bahwa semua pengguna IMPORTXML di seluruh dunia secara teknis menggunakan satu set alamat IP server Google yang terbatas. Ketika ribuan tabel secara bersamaan menarik satu domain Wildberries yang sama, perlindungan situs memblokir bukan pengguna tertentu, tetapi seluruh rentang — dan semua orang menderita, termasuk Anda.
IMPORTXML vs parser tanpa kode vs parser sendiri: tabel perbandingan
Beralih dari fungsi bawaan Google Sheets tidak selalu berarti mempekerjakan seorang programmer. Ada opsi perantara. Mari kita bandingkan tiga pendekatan berdasarkan parameter kunci:
| Kriteria | IMPORTXML | Parser tanpa kode (Octoparse, ParseHub) | Parser sendiri dengan proxy |
|---|---|---|---|
| Butuh kode | Tidak | Tidak | Ya (atau kontraktor) |
| Batas permintaan | Keras, tersembunyi | Tergantung pada tarif | Anda mengontrol sendiri |
| Rotasi IP | Tidak tersedia | Terintegrasi sebagian | Kontrol penuh melalui proxy |
| Bekerja dengan halaman JS | Tidak | Ya | Ya (dengan Selenium/Playwright) |
| Frekuensi pembaruan | Sekali per jam atau lebih jarang | Dapat disesuaikan | Apa saja, hingga real-time |
| Skala (SKU) | Hingga 200-300 | Hingga beberapa ribu | Tanpa batas praktis |
Parser tanpa kode — adalah langkah perantara yang baik jika Anda perlu segera menyelesaikan tugas tanpa pengembang. Namun, jika pemantauan harga adalah proses bisnis yang berkelanjutan, bukan tugas sekali pakai, parser sendiri dengan proxy akan terbayar melalui kontrol atas data dan tidak tergantung pada layanan orang lain dan batasan-batasannya.
Proxy apa yang dibutuhkan untuk mengurai marketplace
Alasan utama mengapa parser sendiri bekerja lebih stabil daripada IMPORTXML adalah kemampuan untuk mendistribusikan permintaan di antara berbagai alamat IP alih-alih satu kumpulan server Google. Namun, jenis proxy juga penting:
- Proxy pusat data — adalah opsi tercepat dan paling terjangkau untuk memulai. Cocok jika marketplace belum mengenali pola permintaan otomatis. Baik untuk pengujian awal parser dan jumlah SKU yang kecil.
- Proxy residensial — menggunakan alamat IP nyata dari penyedia rumah, sehingga terlihat bagi Wildberries dan Ozon seperti pembeli biasa. Ini adalah opsi utama untuk pemantauan harga secara teratur dalam skala industri, ketika penting untuk tidak terjebak dalam pemblokiran berdasarkan geo atau pola lalu lintas.
- Proxy seluler — IP dari operator seluler, yang sangat enggan diblokir oleh marketplace, karena satu IP seluler sering kali digunakan oleh ribuan pengguna yang berbeda secara bersamaan. Relevan jika Anda memerlukan penguraian melalui versi seluler situs atau aplikasi.
Untuk memulai pemantauan harga di Wildberries dan Ozon, kombinasi yang optimal adalah: proxy residensial dengan rotasi IP untuk setiap permintaan atau setiap beberapa menit. Ini mengurangi risiko terkena batasan dan memungkinkan distribusi ribuan permintaan di antara ratusan alamat yang berbeda, meniru perilaku pengguna biasa dari berbagai wilayah.
Rencana langkah demi langkah untuk beralih ke parser sendiri
Beralih dari IMPORTXML tidak memerlukan penghentian total pekerjaan — tabel dapat tetap sebagai saluran cadangan, sementara parser baru sedang diuji.
- Catat daftar SKU dan pemilih XPath yang sudah digunakan dalam rumus IMPORTXML — ini adalah peta data yang siap untuk solusi baru.
- Pilih format parser: layanan tanpa kode (Octoparse, ParseHub, Apify) untuk memulai cepat tanpa programmer, atau skrip di Python/Node.js, jika ada pengembang atau freelancer di tim.
- Hubungkan proxy dengan rotasi IP. Tanpa ini, parser baru akan menghadapi pemblokiran yang sama seperti IMPORTXML, hanya sedikit lebih lambat.
- Atur jadwal permintaan dengan sedikit keterlambatan acak antara permintaan (2-5 detik) — ini mengurangi kemungkinan perlindungan berdasarkan pola.
- Ekstrak data kembali ke Google Sheets melalui Google Sheets API atau layanan seperti Zapier/Make, agar tidak merusak laporan dan dasbor tim yang sudah dikenal.
- Uji pada 10-15% produk selama seminggu, membandingkan akurasi dengan data dari rumus IMPORTXML lama sebelum sepenuhnya beralih.
- Atur peringatan untuk kesalahan — notifikasi di Telegram atau email, jika parser mulai menerima captcha atau kode 403, untuk segera mengganti proxy atau mengurangi frekuensi permintaan.
Parser minimal menggunakan Python dengan proxy
Jika ada pengembang di tim, versi dasar parser hanya membutuhkan beberapa puluh baris kode. Di bawah ini adalah contoh sederhana permintaan halaman produk melalui proxy menggunakan pustaka requests:
import requests
import time
import random
proxies = {
"http": "http://login:password@proxy_host:port",
"https": "http://login:password@proxy_host:port",
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36"
}
urls = [
"https://example-marketplace.com/product/12345",
"https://example-marketplace.com/product/67890",
]
for url in urls:
try:
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
if response.status_code == 200:
# selanjutnya mengurai harga melalui BeautifulSoup atau lxml
print(f"OK: {url}")
else:
print(f"Status {response.status_code} untuk {url}")
except requests.exceptions.RequestException as e:
print(f"Kesalahan permintaan: {e}")
time.sleep(random.uniform(2, 5)) # jeda antara permintaan
Untuk halaman dengan pemuatan dinamis harga melalui JavaScript (yang khas untuk Wildberries dan Ozon), alih-alih menggunakan requests biasa, Anda akan memerlukan Selenium atau Playwright, yang dapat merender halaman seperti browser nyata, dan juga mendukung pengiriman proxy melalui parameter peluncuran.
Daftar periksa sebelum peluncuran
- Daftar URL dan pemilih data telah dipindahkan dari rumus IMPORTXML lama
- Proxy dengan rotasi IP telah terhubung (residensial atau seluler untuk marketplace)
- Keterlambatan acak antara permintaan telah diatur (2-5 detik)
- User-Agent dan header browser yang realistis di setiap permintaan
- Logging kesalahan dan peringatan untuk kode 403/captcha telah diatur
- Data diekstrak dalam format yang dikenal (Google Sheets, CRM, dasbor BI)
- Uji coba dilakukan selama 1-2 minggu pada sub-kumpulan produk sebelum beralih sepenuhnya
Kesimpulan
IMPORTXML — adalah alat yang hebat untuk memulai, selama daftar produk kecil, dan frekuensi pembaruan tidak kritis. Namun, segera setelah Anda melihat banyak #N/A, keterlambatan yang meningkat, dan pesan kesalahan langsung tentang batasan — ini adalah sinyal bahwa fungsi bawaan Google Sheets telah mencapai batas arsitektural. Secara teknis, ini tidak dapat diperbaiki hanya dengan pengaturan tabel, karena masalahnya terletak pada kumpulan alamat IP Google yang terbatas, yang diblokir oleh marketplace secara keseluruhan.
Beralih ke parser sendiri, baik itu layanan tanpa kode atau skrip di Python, menyelesaikan masalah dengan mengontrol alamat IP dari permintaan. Jika Anda berencana untuk melakukan pemantauan harga secara teratur di Wildberries, Ozon, atau Avito dalam skala industri, kami merekomendasikan untuk memulai dengan proxy residensial — mereka memberikan risiko pemblokiran terendah karena kesamaan dengan lalu lintas pembeli nyata. Untuk pengujian cepat di awal, Anda dapat menggunakan proxy pusat data yang lebih terjangkau, dan untuk skenario dengan versi seluler situs — pertimbangkan proxy seluler.