Dari Regex ke LLM: Perjalanan Saya Mengekstrak Data Web yang Tidak Terstruktur
Saya mencoba membangun alat pembanding harga. Alat ini membutuhkan data produk dari puluhan situs e-commerce.
Setiap situs menggunakan struktur HTML yang berbeda. Beberapa menggunakan kelas CSS acak. Yang lain menggunakan JavaScript untuk memuat konten.
Rencana pertama saya menggunakan Regex dan BeautifulSoup. Itu berhasil untuk dua situs. Kemudian semuanya rusak. Satu situs mengubah tata letaknya. Situs lain mulai menggunakan konten dinamis. Saya menghabiskan lebih banyak waktu untuk memperbaiki scraper daripada menggunakan datanya.
Selanjutnya, saya mencoba menggunakan LLM. Saya mengirimkan HTML mentah ke AI dan meminta datanya. Ini juga gagal. Outputnya tidak konsisten. AI mengalami halusinasi nilai. Biaya API saya membengkak karena HTML menggunakan terlalu banyak token.
Saya menemukan jalan tengah. Sekarang saya menggunakan pendekatan hibrida.
Berikut adalah proses saya:
- Praproses HTML. Saya menghapus script, style, dan bilah navigasi. Saya hanya menyisakan teks yang terlihat. Ini menjaga jumlah token tetap rendah.
- Gunakan mode JSON. Saya menggunakan function calling untuk memaksa LLM mengembalikan data terstruktur.
- Tambahkan logika retry. Saya mencoba lagi hingga tiga kali jika JSON gagal.
- Cache hasil. Saya menyimpan ekstraksi yang berhasil berdasarkan URL untuk menghindari biaya berulang.
Regex dan BeautifulSoup masih yang terbaik untuk halaman statis yang terstruktur dengan baik. Keduanya cepat dan gratis.
LLM adalah yang terbaik untuk situs yang berantakan atau sering berubah. Mereka bukan sihir. Anda harus membersihkan input terlebih dahulu untuk menghemat biaya.
Alur kerja saya saat ini:
• Gunakan parser ringan untuk situs yang mudah. • Gunakan LLM untuk situs yang tidak terprediksi. • Pantau biaya per ekstraksi. • Validasi output untuk memastikan harga terlihat nyata.
Perubahan ini membantu saya menambahkan toko baru dalam satu jam, bukan satu hari.
Apa strategi Anda untuk data web yang berantakan? Apakah Anda menggunakan LLM atau tetap menggunakan scraper tradisional?