Brief-nya
Toko Kita adalah toko online kecil di Indonesia. Awalnya toko ini menjual kopi dan peralatan dapur, dan tahun ini mulai menjual ponsel dan perangkat audio juga. Itu membuatnya berhadapan dengan Nusantara Gadget, toko yang lebih besar dan hanya menjual elektronik. Kalau Nusantara Gadget menurunkan harga, pelanggan Toko Kita menyadarinya lebih dulu daripada pemiliknya.
Pemilik toko ingin pemantau harga: sekumpulan skrip kecil yang mengumpulkan harga dan stok Nusantara Gadget, supaya setiap pagi tim bisa melihat di mana Toko Kita kemahalan. Kamu akan membangunnya dalam tiga tugas pada salinan latihan situs mereka di https://nusantara-gadget.test, situs yang sama yang dipakai di track scraping.
Men-scrape situs orang lain datang dengan tanggung jawab, dan proyek ini menganggapnya serius. robots.txt mereka meminta Crawl-delay 1 detik, dan halaman produk mereka menjawab 429 Too Many Requests kepada siapa pun yang meminta lebih dari empat halaman per detik. Kalau sebuah situs menyediakan API JSON, biasanya lebih sopan (dan lebih andal) memakai API itu daripada HTML-nya.
Cara kerja tugas-tugasnya
Setiap tugas dicek otomatis, seperti soal-soal modul. Situs latihannya berjalan di dalam halaman dengan jam virtual, jadi menunggu satu detik tidak memakan waktu sungguhan. Tapi menunggu tetap penting: situsnya menghitung request, dan kalau kamu terlalu cepat situsnya mulai menolak, persis seperti situs sungguhan. Tiketnya menyebut apa yang harus dikumpulkan dan dalam bentuk apa. Ada petunjuk kalau kamu buntu, tapi coba setiap tugas tanpa membuka solusinya dulu.
Tugas-tugasnya
| # | Tugas | Keterampilan utama |
|---|---|---|
| 1 | Seluruh katalog | Locator, atribut, mengikuti "Next" di beberapa halaman |
| 2 | Cek stok dengan sopan | Halaman detail, status code, menghormati Crawl-delay |
| 3 | Harga kita dibandingkan harga mereka | Memanggil API JSON dengan requests, membandingkan, menyimpan CSV |
Situsnya
Ini bagian-bagian Nusantara Gadget yang dipakai tugas-tugasnya:
/productsmenampilkan 12 produk per halaman. Setiap produk adalaharticle.product-carddengan atributdata-id, dan di dalamnya ada.title(namanya, sebagai link),.brand,.price(dengan angkanya didata-price),.rating(dengan angkanya didata-rating), dan elemen.stockyang punya classin-stockatausold-out. Selama masih ada halaman berikutnya, ada linka.nextke sana. Di halaman terakhir, "Next" berupaspan.next.disabled, jadi tidak adaa.nextyang bisa diklik./product/<id>adalah halaman detail satu produk. Isinya.product-title,.pricedengandata-price, dan paragraf.stockyang berbunyi sepertiIn stock: 18 leftatauSold out. Id yang tidak ada menjawab 404./api/productsmenjawab dengan JSON:{"page": ..., "per_page": ..., "total": ..., "total_pages": ..., "items": [...]}. Endpoint ini menerimacategory,page, danper_page(paling banyak 50) sebagai parameter query, dan setiap item punyaid,name,brand,category,price,rating,stock, dan lainnya.
Kalau sudah siap, buka Task 1.