Mengekstrak data JSON dari permintaan XHR – contoh praktis saya
Titik awal
Saya ingin mengekstrak data produk dari situs e-commerce – harga, nama, ketersediaan. Akan tetapi, dengan pengikisan HTML klasik (misalnya dengan BeautifulSoup), DOM-nya kosong. Tidak ada data yang terlihat, hanya beberapa tempat penampung.
Namun semuanya ada di browser. Kecurigaan: Data dimuat ulang melalui JavaScript – biasanya melalui permintaan XHR dengan respons JSON.
⚙️ Alat saya
Sasarannya bukanlah mengotomatiskan keseluruhan peramban, tetapi menemukan sumber data langsung dan menanyakannya melalui HTTP. Saya menggunakan yang berikut ini:
- Browser DevTools (tab Jaringan, filter XHR)
- Ular piton +
httpx
(juga bekerja denganrequests
) - Penguraian JSON dan rekayasa balik tajuk
Masalah & Pengamatan
- Halaman tersebut tidak menampilkan konten apa pun dalam HTML – semuanya muncul secara tidak sinkron.
- Permintaan XHR memiliki titik akhir yang samar seperti
/api/v3/productinfo?sku=123456
- Tanpa header yang sesuai (terutama User-Agent, Accept, Referer) →
403 Forbidden
- Beberapa parameter seperti
session_id
memang diperlukan, tapi statis
Larutan
1. Permintaan XHR dilacak di DevTools
Mengidentifikasi permintaan yang benar di browser (Chrome atau Firefox → DevTools → Jaringan → XHR). Berisi muatan JSON lengkap dengan data produk.
2. URL, header & parameter kueri disalin
Klik kanan pada Permintaan → “Salin sebagai cURL” → dikonversi ke Python + httpx
.
3. Kode Python Minimal
import httpx headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...", "Accept": "application/json, text/plain, */*", "Referer": "https://zielseite.de/produkt/123456", } url = "https://zielseite.de/api/v3/productinfo?sku=123456" r = httpx.get(url, headers=headers) data = r.json() print(data)
4. JSON diurai
Jawabannya termasuk:
data["price"]["value"]
data["availability"]["status"]
data["product"]["title"]
Apa yang saya pelajari
- XHR seringkali merupakan alternatif yang lebih sederhana untuk pengikisan DOM
- Tanpa menyalin header, seringkali tidak ada yang berhasil
- “Salin sebagai cURL” sangat berharga saat membangun kembali
- Anda terhindar dari kebutuhan akan browser tanpa kepala jika API cukup publik
Bonus: Jika tidak berhasil
Beberapa permintaan XHR berisi token dinamis (CSRF, session_id) yang dibuat ulang setiap kali halaman diakses. Mungkin Anda memerlukan browser sungguhan – misalnya B. Penulis Naskah Drama atau Dalang – untuk mendapatkan token terlebih dahulu.
Kesimpulan
Jika suatu halaman terlihat kosong setelah dimuat, ada baiknya untuk melihat tab jaringan. Seringkali data sebenarnya ada dalam respons JSON – dan lebih mudah diambil daripada yang Anda kira.
Uji coba dan kode mulai 04/2025 – dapat berubah tergantung pada halaman arahan.