2 poin oleh GN⁺ 2024-08-07 | 1 komentar | Bagikan ke WhatsApp

Melacak harga supermarket

  • Pada Desember 2022, sebuah situs web dibangun untuk melacak perubahan harga di tiga supermarket utama di Yunani.
  • Dalam prosesnya, berbagai masalah harus diselesaikan, dan banyak pelajaran pun didapat.

Scraping situs js

  • Masalah utamanya adalah situs web yang dirender dengan JavaScript.
  • Playwright digunakan untuk mengendalikan browser web secara terprogram.
  • Playwright mendukung browser Chromium, Safari, dan Firefox, serta dapat digunakan bersama Node, Java, .NET, dan Python.
  • Ditulis kode untuk menangani infinite scroll dan mengekstrak informasi produk.

Otomatisasi

  • Di M1 MacBook Pro, scraping seluruh supermarket memerlukan waktu antara 50 menit hingga 2 jam 30 menit.
  • Ini bagus untuk pengembangan dan pengujian, tetapi dibutuhkan solusi yang lebih permanen.

Menggunakan laptop lama?

  • Dicoba memakai laptop lama dari tahun 2013, tetapi performanya sangat mengecewakan.

Menggunakan cloud?

  • AWS terlalu mahal, sedangkan Hetzner jauh lebih murah.
  • Diputuskan untuk menggunakan server Hetzner.

Menggunakan laptop lama dan cloud!

  • Scraping diotomatisasi di server cloud, dan laptop lama digunakan sebagai server CI.
  • Pipeline disiapkan dengan Concourse, dan pekerjaan scraping dijalankan setiap hari.

Menghindari pembatasan IP

  • Karena aturan firewall Akamai, permintaan dari alamat IP non-residensial diblokir.
  • Tailscale digunakan agar permintaan terlihat seolah-olah berasal dari alamat IP rumah.

Penyebab dan waktu kegagalan

  • Proyek scraping dipengaruhi oleh para pengembang situs web.
  • Ada dua jenis kegagalan: breaking change dan non-breaking change.
  • Penting untuk mendapatkan umpan balik secepat mungkin.

Optimasi

  • Berbagai optimasi dilakukan, seperti notifikasi email, histeresis, timeout, dan pengaturan retry.
  • Kinerja ditingkatkan dengan memakai server yang lebih besar dan mengurangi pengambilan data.

Biaya

  • Biaya penggunaan server di Hetzner sangat murah.
  • Biaya penyimpanan data ditekan dengan menggunakan free tier Cloudflare R2.

Kesimpulan

  • Dijelaskan komponen-komponen utama dalam membangun pipeline scraping untuk melacak perubahan harga supermarket.

Ringkasan GN⁺

  • Tulisan ini membagikan pengalaman memanfaatkan Playwright dan layanan cloud untuk melacak perubahan harga supermarket.
  • Dibahas cara melakukan scraping pada situs web yang dirender dengan JavaScript, serta metode otomatisasi dan optimasinya.
  • Dijelaskan juga cara mengurangi biaya dan menghindari pembatasan IP dengan menggunakan Hetzner dan Tailscale.
  • Tulisan ini dapat bermanfaat bagi orang-orang yang tertarik pada web scraping dan otomatisasi.

1 komentar

 
GN⁺ 2024-08-07
Komentar Hacker News
  • Berbagi pengalaman mengalami masalah serupa

    • Mengoperasikan situs web perbandingan harga lensa di 30 negara
    • Perubahan HTML situs web menjadi masalah besar
    • Pencocokan produk di lebih dari 100 situs web adalah hambatan awal yang besar
    • Sebagian besar bisa ditangani dengan ekspresi reguler, tetapi tetap perlu pemetaan manual
    • Membangun scraper dan infrastruktur relatif mudah, pemeliharaannya yang sulit
    • Sulit mencari penyebab error saat sebuah produk menghilang
    • Ini proyek yang menarik, tetapi menantang dan perlu menyelesaikan masalah yang merepotkan
  • Sedang menjalankan proyek serupa di Selandia Baru

    • Menggunakan Playwright dan Typescript, menyimpan file Parquet di cloud storage
    • Baru mengumpulkan data dan belum menampilkannya
    • Pekerjaan utamanya adalah melewati layanan reverse proxy seperti Akamai dan Cloudflare
    • Di Selandia Baru ada setidaknya 3 startup yang melakukan pekerjaan yang sama
    • Inflasi mendorong banyak inovasi
    • Mengamati pola bahwa supermarket membuat harga menjadi rumit
  • Membuat situs web serupa dan mendapat banyak perhatian

    • Menggunakan server Linode dengan 2GB RAM, 5 IPv4, 1000 IPv6
    • Melakukan scraping semua produk dengan interval maksimal 40 menit
    • Menggunakan curl impersonate dan scraping JSON
    • 90% pasar menyediakan harga lewat panggilan Ajax, 10% sisanya menggunakan ekspresi reguler
    • Situs web: economizafloripa.com.br
  • Dua supermarket besar di Australia berpotensi melakukan monopoli lewat algoritma AI analisis harga

    • Algoritma AI dapat berkolaborasi untuk memaksimalkan keuntungan
    • Hal itu bisa dilakukan secara legal lewat data harga publik, atau secara ilegal dengan berbagi data biaya pasokan atau margin keuntungan per produk
    • Konsumen akhirnya membayar keuntungan yang sudah dimaksimalkan
  • Sudah aktif lebih dari 8 tahun di pasar Swedia

    • Situs web: matspar.se
    • Pelanggan dapat membandingkan produk dari semua toko online utama dan menambahkannya ke keranjang
    • Setelah membandingkan total harga, keranjang dapat diekspor ke toko yang diinginkan
    • Melakukan scraping lebih dari 30 juta harga setiap hari
  • Dengan transparansi harga, pelacakan akan jadi lebih mudah

    • Contoh: membandingkan harga susu oat di kode pos dan toko bahan makanan yang berbeda
    • Ada kemungkinan melacak "shrinkflation" (jumlah lebih sedikit dengan harga yang sama)
    • Yang perlu diperiksa bukan hanya harga, tetapi juga biaya per gram
  • Cara mengubah sistem agar scraper tidak gagal

    • Bisa menambahkan pemeriksaan otomatis agar harga tidak berubah secara tidak normal
    • Contoh: harga tidak berubah lebih dari 100%, jumlah produk aktif tidak berubah lebih dari 20%
  • Berbagi pengalaman melacak harga saat pindah ke wilayah baru

    • Lebih mudah berbelanja murah di dua pasar atau toko besar
    • Eropa: Aldi/Lidl, AS: Costco/Trader Joe's
    • Online: CamelCamelCamel/Amazon
    • Membeli langsung dari produsen bisa lebih murah
  • Yang sulit bukan scraping, melainkan melewati pemblokir yang makin canggih

    • Harus terus merotasi proxy residensial dan menghindari pola scraping data
    • Beberapa supermarket menyembunyikan permintaan jaringan
    • Melihat permintaan jaringan dan data dari aplikasi mobile juga diblokir
    • Karena biaya dan pekerjaan pengembangan yang berkelanjutan, hal itu dianggap tidak sepadan
  • Masalah perenderan dengan JavaScript sisi klien

    • Ironisnya, data yang mengisi situs disediakan dalam format JSON sederhana sehingga scraping justru lebih andal