Yandex.Eda, Delivery Club, SberMarket, dan puluhan agregator pengiriman regional ā adalah sumber data yang sangat berharga bagi pemasar, analis, dan pemilik bisnis restoran. Namun, begitu Anda mulai mengumpulkan harga dan posisi menu secara sistematis, layanan mulai memblokir permintaan. Dalam artikel ini, kita akan membahas cara yang benar untuk mengatur parsing menu dan harga pengiriman, alat apa yang digunakan, dan bagaimana proxy membantu menghindari pemblokiran.
Mengapa mem-parsing menu restoran dan harga pengiriman
Pasar pengiriman makanan di Rusia adalah salah satu segmen e-commerce yang paling dinamis. Harga hidangan, komposisi menu, dan syarat pengiriman berubah hampir setiap hari. Melacak perubahan ini secara manual tidak mungkin dilakukan jika melibatkan puluhan pesaing atau ratusan posisi. Di sinilah pengumpulan data otomatis menjadi penting.
Berikut adalah siapa yang menggunakan parsing menu dan harga dalam praktik:
- Pemilik restoran dan kafe ā melacak harga pesaing di daerah mereka untuk segera menyesuaikan penetapan harga mereka sendiri.
- Pemasar jaringan restoran ā menganalisis posisi menu mana yang dipromosikan oleh pesaing melalui promosi dan penawaran khusus.
- Analis pasar HoReCa ā menyusun laporan tentang harga rata-rata untuk kategori hidangan di berbagai kota dan wilayah.
- Startup agregator ā mengumpulkan basis restoran dengan menu dan harga untuk katalog mereka sendiri.
- Investor dan konsultan ā mengevaluasi lingkungan kompetitif sebelum membuka tempat baru atau waralaba.
- Pengembang aplikasi ā membentuk basis data hidangan untuk aplikasi perhitungan kalori atau perencanaan makanan.
Jika Anda bekerja di bisnis restoran atau melakukan analisisnya, pemantauan harga pesaing secara teratur bukanlah kemewahan, tetapi sebuah kebutuhan. Perbedaan 30ā50 rubel pada hidangan populer dapat secara langsung mempengaruhi konversi menjadi pesanan. Tanpa otomatisasi, Anda akan selalu satu langkah di belakang mereka yang sudah mengatur pengumpulan data.
Data apa yang dikumpulkan dari agregator pengiriman
Sebelum mengatur parser, penting untuk memahami data apa yang Anda butuhkan. Agregator pengiriman memiliki beberapa lapisan informasi, dan masing-masing berguna untuk tugas yang berbeda.
| Jenis data | Apa yang termasuk | Untuk siapa berguna |
|---|---|---|
| Menu dan posisi | Nama hidangan, deskripsi, komposisi, berat, KJ, protein, lemak, karbohidrat | Pengembang aplikasi, ahli gizi |
| Harga hidangan | Harga saat ini, harga diskon, riwayat perubahan | Pemilik restoran, pemasar |
| Syarat pengiriman | Biaya pengiriman, jumlah minimum pesanan, waktu pengiriman | Analis, startup |
| Promosi dan penawaran khusus | Diskon, kombo, hidangan promosi, penawaran musiman | Pemasar, intelijen kompetitif |
| Peringkat dan ulasan | Penilaian tempat, jumlah ulasan, tag kualitas | Investor, konsultan |
| Geodata | Alamat, zona pengiriman, daerah kehadiran | Analis pasar, waralaba |
Pemantauan harga dalam dinamika sangat berharga: jika data dikumpulkan sekali sehari selama beberapa bulan, Anda dapat melihat pola penetapan harga pesaing ā kapan mereka menaikkan harga, kapan mereka meluncurkan promosi, dan bagaimana mereka bereaksi terhadap peristiwa eksternal (liburan, acara olahraga, cuaca buruk).
Fitur perlindungan Yandex.Eda, Delivery Club, dan lainnya
Agregator pengiriman besar secara aktif melindungi data mereka dari pengumpulan otomatis. Dan itu bisa dimengerti: basis data restoran mereka dan harga yang berlaku adalah keunggulan kompetitif mereka. Sebelum mengatur parser, Anda perlu memahami perlindungan apa yang akan Anda hadapi.
Yandex.Eda
Menggunakan beberapa tingkat perlindungan secara bersamaan. Pertama, geolokasi diterapkan secara aktif: konten menu dan harga ditampilkan tergantung pada alamat IP Anda ā jika IP dari Moskow, Anda melihat restoran Moskow. Kedua, situs berfungsi sebagai SPA (Single Page Application) di React, artinya data dimuat melalui permintaan API, bukan disematkan dalam HTML. Ketiga, jika ada aktivitas mencurigakan, Yandex SmartCaptcha diaktifkan. Jika ada permintaan yang sering dari satu IP, Anda akan dilarang mengakses situs.
Delivery Club (SberMarket)
Arsitektur yang mirip: data diberikan melalui API internal, bukan melalui HTML statis. Layanan menganalisis pola perilaku: jika permintaan datang terlalu cepat atau tanpa jeda ā pemblokiran. Analisis User-Agent dan header permintaan juga digunakan. Header yang tidak standar segera menimbulkan kecurigaan.
Agregator regional
Layanan seperti Chibbis, Goloso, agregator lokal di daerah, umumnya memiliki perlindungan yang lebih lemah. Beberapa dari mereka menggunakan halaman HTML sederhana yang dapat diparsing dengan alat standar. Namun, di sini juga pemblokiran berdasarkan IP pada permintaan yang sering adalah praktik standar.
Mekanisme utama pemblokiran parser di agregator pengiriman:
- Pemblokiran IP saat melebihi batas permintaan (rate limiting)
- Geoblocking ā menampilkan konten yang berbeda untuk IP yang berbeda
- Analisis User-Agent dan header HTTP
- Captcha saat aktivitas mencurigakan
- Rendering data JavaScript (arsitektur SPA)
- Analisis perilaku: kecepatan klik, gulir, jeda
Alat untuk parsing tanpa kode dan dengan kode
Kabar baik: untuk mem-parsing menu restoran tidak perlu bisa memprogram. Ada solusi no-code yang siap pakai yang dapat menyelesaikan sebagian besar tugas. Namun, untuk bekerja dengan situs SPA seperti Yandex.Eda, Anda memerlukan alat yang lebih serius.
Alat No-code (tanpa pemrograman)
Octoparse ā salah satu parser visual yang paling populer. Memungkinkan Anda mengklik elemen halaman dan membangun skenario pengumpulan data tanpa menulis kode. Ada mode cloud dengan rotasi IP. Cocok untuk mengumpulkan menu dari situs dengan struktur sederhana.
ParseHub ā alat serupa dengan antarmuka visual. Dapat bekerja dengan halaman JavaScript, yang membuatnya dapat diterapkan untuk agregator modern. Mendukung proxy.
Apify ā platform dengan "aktor" siap pakai (parser siap untuk situs populer). Untuk beberapa agregator pengiriman, sudah ada solusi siap pakai di marketplace mereka. Dapat dijalankan melalui antarmuka web tanpa kode.
Alat dengan kode (untuk pengembang)
Python + Requests + BeautifulSoup ā kombinasi klasik untuk mem-parsing halaman statis. Cepat, mudah, tetapi tidak dapat menangani rendering JavaScript.
Python + Selenium atau Playwright ā mengelola browser nyata (Chrome/Firefox), sehingga dapat menangani situs SPA, JavaScript, dan bahkan beberapa captcha. Playwright dianggap sebagai solusi yang lebih modern dan cepat. Kombinasi ini bekerja dengan Yandex.Eda dan Delivery Club.
Scrapy ā framework profesional untuk parsing skala besar di Python. Mendukung antrean permintaan, middleware untuk proxy, ekspor ke berbagai format. Untuk proyek besar dalam pengumpulan data restoran ā pilihan yang optimal.
| Alat | Perlu kode? | JS-rendering | Proxy | Cocok untuk |
|---|---|---|---|---|
| Octoparse | Tidak | Sebagian | Rotasi bawaan | Agregator regional |
| ParseHub | Tidak | Ya | Proxy eksternal | Sebagian besar agregator |
| Apify | Tidak | Ya | Bawaan + eksternal | Yandex.Eda, Delivery Club |
| Selenium/Playwright | Ya (Python) | Ya | Proxy eksternal | Semua situs |
| Scrapy | Ya (Python) | Melalui plugin | Proxy eksternal | Pengumpulan data skala besar |
Mengapa tanpa proxy parsing tidak berfungsi
Ini adalah pertanyaan kunci. Banyak analis pemula mencoba menjalankan parser langsung dari IP mereka dan segera menghadapi pemblokiran. Alasannya sederhana: agregator pengiriman melihat ratusan permintaan dari satu alamat dalam waktu singkat dan secara otomatis memblokirnya. Pemulihan akses dapat memakan waktu dari beberapa jam hingga beberapa hari.
Proxy menyelesaikan masalah ini dengan mendistribusikan permintaan di antara banyak alamat IP yang berbeda. Dari sudut pandang server, permintaan terlihat seperti lalu lintas biasa dari berbagai pengguna dari berbagai tempat. Namun, tidak semua proxy sama efektifnya untuk tugas ini.
Proxy residensial
Proxy residensial menggunakan alamat IP pengguna rumah yang nyata. Dari sudut pandang Yandex.Eda atau Delivery Club ā ini adalah orang biasa yang masuk untuk melihat menu restoran. Proxy semacam ini hampir tidak pernah diblokir jika digunakan dengan benar. Pilihan ideal untuk mengumpulkan data dari agregator besar dengan perlindungan yang serius.
Proxy seluler
Proxy seluler ā alamat IP dari operator seluler (MTS, Beeline, MegaFon, dll.). Ciri khasnya adalah satu IP seluler dapat digunakan oleh ribuan pengguna nyata secara bersamaan (melalui NAT), sehingga situs sangat jarang memblokir alamat seluler. Ini menjadikannya salah satu opsi paling andal untuk parsing dengan frekuensi permintaan tinggi.
Proxy pusat data
Proxy pusat data adalah yang tercepat dan termurah, tetapi IP mereka mudah dikenali sebagai "bukan manusia". Untuk agregator regional dengan perlindungan sederhana, mereka akan cocok, tetapi Yandex.Eda dan Delivery Club cukup cepat memblokirnya. Namun, proxy pusat data bekerja dengan baik untuk penelusuran awal struktur situs dan pengujian parser sebelum peluncuran penuh.
Jenis proxy apa yang dipilih untuk parsing menu:
- Yandex.Eda, Delivery Club ā proxy residensial atau seluler
- Agregator regional (Chibbis, dll.) ā proxy pusat data atau residensial
- Pengumpulan data di seluruh Rusia (berbagai kota) ā proxy residensial dengan geotargeting berdasarkan kota
- Pemantauan frekuensi tinggi (setiap jam) ā proxy seluler dengan rotasi
Pengaturan langkah demi langkah parser dengan proxy
Mari kita bahas skenario praktis: Anda ingin mengumpulkan harga pizza dari 20 pesaing di kota Anda setiap hari dari Yandex.Eda. Berikut cara mengaturnya langkah demi langkah.
Langkah 1. Pelajari struktur API agregator
Buka Yandex.Eda di browser, tekan F12 (DevTools), pergi ke tab Jaringan dan filter permintaan berdasarkan XHR/Fetch. Temukan halaman restoran dan lihat permintaan API apa yang dikirim saat memuat menu. Biasanya ini adalah sesuatu seperti api/v1/menu?restaurantId=.... Catat header permintaan ini ā mereka akan diperlukan untuk simulasi.
Langkah 2. Pilih alat
Jika Anda tidak menulis kode ā gunakan Apify atau ParseHub. Jika Anda menulis dalam Python ā Playwright akan menjadi pilihan optimal untuk bekerja dengan situs JavaScript. Instal alat yang diperlukan dan pastikan itu mendukung koneksi proxy eksternal.
Langkah 3. Dapatkan proxy dengan geotargeting
Ini adalah poin penting. Yandex.Eda menampilkan restoran yang berbeda tergantung pada kota. Jika Anda mem-parsing menu restoran di Yekaterinburg ā Anda memerlukan proxy dengan IP dari Yekaterinburg. Proxy residensial dengan geotargeting berdasarkan kota memungkinkan Anda mendapatkan konten yang sama dengan yang dilihat pengguna lokal. Tentukan wilayah yang diperlukan saat mengatur proxy.
Langkah 4. Atur rotasi proxy
Jangan gunakan satu proxy untuk semua permintaan. Atur rotasi: ganti IP setiap 5ā10 permintaan. Di Apify, ini dilakukan melalui pengaturan proxy pool. Di Scrapy ā melalui middleware. Di Playwright ā dengan memberikan proxy baru setiap kali konteks browser dibuat. Semakin sering IP berubah, semakin rendah risiko pemblokiran.
Langkah 5. Atur jeda antara permintaan
Tambahkan jeda acak antara permintaan ā dari 2 hingga 8 detik. Ini meniru perilaku pengguna nyata. Jangan pernah melakukan permintaan dengan interval kurang dari 1 detik ā ini adalah cara pasti untuk diblokir. Di Scrapy, gunakan parameter DOWNLOAD_DELAY dan aktifkan AUTOTHROTTLE_ENABLED.
Langkah 6. Atur header permintaan yang benar
Selalu kirim User-Agent yang realistis (string browser), header Accept-Language (misalnya, ru-RU,ru;q=0.9) dan Referer. Permintaan tanpa header ini terlihat seperti bot dan diblokir terlebih dahulu. Gunakan string User-Agent yang relevan dari Chrome atau Firefox.
Langkah 7. Atur jadwal dan penyimpanan data
Jalankan parser di malam hari (dari 2:00 hingga 6:00) ā beban pada server agregator minimal, dan lalu lintas yang mencurigakan kurang terlihat. Simpan data ke database (PostgreSQL, MySQL) atau setidaknya dalam CSV dengan cap waktu. Ini akan memungkinkan Anda membangun riwayat perubahan harga.
# Contoh pengaturan proxy di Playwright (Python)
from playwright.sync_api import sync_playwright
import random
import time
proxies = [
{"server": "http://proxy1.example.com:8080", "username": "user", "password": "pass"},
{"server": "http://proxy2.example.com:8080", "username": "user", "password": "pass"},
# ... lebih banyak proxy
]
def parse_restaurant_menu(url):
proxy = random.choice(proxies)
with sync_playwright() as p:
browser = p.chromium.launch()
context = browser.new_context(
proxy=proxy,
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
)
page = context.new_page()
# Jeda acak 2-8 detik
time.sleep(random.uniform(2, 8))
page.goto(url)
page.wait_for_selector('.menu-item') # menunggu menu dimuat
# Pengumpulan data tentang hidangan
items = page.query_selector_all('.menu-item')
menu_data = []
for item in items:
name = item.query_selector('.item-name').inner_text()
price = item.query_selector('.item-price').inner_text()
menu_data.append({'name': name, 'price': price})
browser.close()
return menu_data
Kesalahan umum dan cara menghindarinya
Bahkan dengan pengaturan alat yang benar, banyak yang menghadapi masalah saat mem-parsing data tentang pengiriman makanan. Berikut adalah kesalahan yang paling umum dan cara mengatasinya.
Kesalahan 1: Menggunakan satu proxy untuk semua permintaan
Bahkan proxy residensial yang berkualitas tinggi akan diblokir jika ada ratusan permintaan per hari ke satu situs. Selalu gunakan kumpulan minimal 10ā20 proxy dengan rotasi. Semakin banyak restoran yang Anda parsing, semakin banyak proxy yang Anda butuhkan.
Kesalahan 2: Mengabaikan geotargeting
Yandex.Eda dan Delivery Club menampilkan konten yang berbeda tergantung pada kota pengguna. Jika Anda ingin mengumpulkan data tentang restoran di Novosibirsk, tetapi menggunakan proxy Moskow ā Anda akan mendapatkan data Moskow. Selalu periksa bahwa proxy sesuai dengan wilayah yang diperlukan.
Kesalahan 3: Mem-parsing HTML alih-alih API
Parser pemula mencoba mengumpulkan data dari kode HTML halaman. Namun, di situs SPA (dan Yandex.Eda adalah salah satunya), data tidak disematkan dalam HTML ā mereka dimuat melalui API. Jauh lebih efisien untuk menemukan endpoint API yang diperlukan melalui DevTools dan mengaksesnya secara langsung. Ini lebih cepat, lebih stabil, dan membutuhkan lebih sedikit sumber daya.
Kesalahan 4: Frekuensi permintaan terlalu tinggi
Keinginan untuk mengumpulkan data lebih cepat dapat dimengerti, tetapi itu mengarah pada pemblokiran instan. Untuk pemantauan harga harian di 50 restoran, cukup jalankan parser sekali sehari dengan jeda 3ā5 detik antara permintaan. Jangan mencoba mempercepat proses dengan mengurangi jeda.
Kesalahan 5: Tidak memantau kinerja proxy
Proxy dapat "mati" ā mereka diblokir, masa berlakunya habis. Jika parser terus bekerja dengan proxy yang diblokir, Anda akan mendapatkan data kosong atau kesalahan, tanpa menyadari masalah tersebut. Atur pemeriksaan kinerja proxy sebelum setiap peluncuran dan penggantian otomatis untuk alamat yang tidak berfungsi.
Kesalahan 6: Mengabaikan perubahan struktur situs
Agregator secara teratur memperbarui situs dan API mereka. Parser yang bekerja sebulan yang lalu mungkin berhenti berfungsi setelah pembaruan berikutnya. Atur pemberitahuan kesalahan dan periksa kinerja parser setidaknya sekali seminggu. Simpan dokumentasi tentang struktur data yang Anda kumpulkan.
Checklist sebelum menjalankan parser menu restoran:
- ā Kumpulan 10+ proxy dengan rotasi telah diatur
- ā Proxy sesuai dengan kota/wilayah yang diperlukan
- ā Jeda antara permintaan 3ā8 detik (acak)
- ā User-Agent yang realistis telah diatur
- ā Header Accept-Language dan Referer telah ditambahkan
- ā Penyimpanan data dengan cap waktu telah diatur
- ā Pemantauan kesalahan dan pemberitahuan telah diaktifkan
- ā Peluncuran dijadwalkan pada malam hari
Kesimpulan
Mem-parsing menu restoran dan harga pengiriman adalah alat nyata untuk keunggulan kompetitif dalam bisnis restoran dan analisis pasar HoReCa. Yandex.Eda, Delivery Club, dan agregator lainnya secara aktif melindungi data mereka, tetapi dengan pendekatan yang tepat ā pemilihan alat yang cerdas, pengaturan jeda, dan penggunaan proxy yang berkualitas ā pengumpulan data dapat berfungsi dengan stabil dan tanpa pemblokiran.
Kesimpulan kunci dari artikel ini: gunakan alat yang mendukung rendering JavaScript (Playwright, Apify), atur rotasi proxy, jangan lupa tentang geotargeting, dan selalu tambahkan jeda acak antara permintaan. Ini adalah tiga pilar parsing yang stabil.
Jika Anda berencana untuk secara teratur mengumpulkan data dari Yandex.Eda, Delivery Club, atau agregator pengiriman regional, kami merekomendasikan untuk memperhatikan proxy residensial ā mereka memberikan ketahanan maksimum terhadap pemblokiran dan mendukung geotargeting berdasarkan kota-kota Rusia, yang sangat penting untuk pengumpulan data harga yang akurat di wilayah tertentu.
```