7 poin oleh GN⁺ 2024-09-03 | 1 komentar | Bagikan ke WhatsApp
  • Tulisan yang merangkum pengalaman mengembangkan web scraper berbantuan AI menggunakan fitur output terstruktur baru dari OpenAI

Meminta GPT-4o melakukan scraping data

  • Eksperimen pertama adalah meminta GPT-4o mengekstrak data dari string HTML
  • Output terstruktur diatur menggunakan model Pydantic
    from typing import List, Dict  
    class ParsedColumn(BaseModel):  
        name: str  
        values: List[str]  
    
    class ParsedTable(BaseModel):  
        name: str  
        columns: List[ParsedColumn]  
    
  • Prompt sistemnya adalah sebagai berikut:

    Anda adalah pakar web scraping. Anda menerima isi tabel HTML dan harus mengekstrak data terstruktur

Mengurai tabel yang kompleks

  • Setelah bereksperimen dengan tabel sederhana, penulis menguji tabel yang kompleks seperti prakiraan cuaca 10 hari dari Weather.com
  • GPT-4o menambahkan kolom Day/Night dan mengurai data dengan akurat
  • Kolom Condition tidak terlihat di situs web sehingga sempat diduga sebagai halusinasi, tetapi setelah kode sumber diperiksa ternyata tag tersebut memang ada

Baris gabungan merusak model

  • Penulis menguji tabel sederhana dari Wikipedia (Human Development Index), tetapi model gagal karena adanya baris gabungan
  • Prompt sistem dicoba untuk dimodifikasi, tetapi tidak efektif

Meminta GPT-4o mengembalikan XPath

  • Untuk menurunkan biaya panggilan API OpenAI, penulis meminta model mengembalikan XPath alih-alih data yang sudah diurai
  • Namun, model sering mengembalikan XPath yang salah atau tidak mengembalikan data sama sekali

Menggabungkan dua pendekatan

  • Penulis mencoba pendekatan yang meminta XPath dengan merujuk pada data yang telah diekstrak terlebih dahulu
  • Metode ini memberikan hasil yang lebih baik, tetapi muncul masalah gambar yang diubah menjadi teks

GPT-4o sangat mahal

  • Scraping dengan GPT-4o memakan biaya besar
  • Penulis menambahkan logika pembersihan untuk menghapus data yang tidak perlu dari string HTML guna menghemat biaya

Kesimpulan dan demo

  • Penulis terkesan dengan kualitas ekstraksi data GPT-4o, tetapi kecewa dengan masalah biaya
  • Disediakan demo sederhana menggunakan Streamlit
  • Masih banyak hal yang bisa diperbaiki melalui eksperimen lebih lanjut

Ringkasan GN⁺

  • Tulisan ini mengeksplorasi kemungkinan dan keterbatasan web scraping dengan AI
  • Menunjukkan bahwa fitur output terstruktur GPT-4o dapat digunakan untuk mengekstrak data tabel kompleks secara akurat
  • Meski ada masalah biaya dan beberapa keterbatasan teknis, potensi alat web scraping berbantuan AI tetap terlihat
  • Proyek lain dengan fungsi serupa antara lain BeautifulSoup dan Scrapy

1 komentar

 
GN⁺ 2024-09-03
Komentar Hacker News
  • Berhasil dengan mengubah HTML ke format sederhana (misalnya markdown) lalu mengirimkannya ke LLM

    • Sudah mencoba Extractus dan dom-to-semantic-markdown
    • Secara internal menggunakan Apify dan Firecrawl untuk menjalankan Magic Loops di cloud
    • Di Chrome Extension menggunakan dom-to-semantic-markdown
    • Sedang mengeksplorasi cara mengekstrak elemen tertentu melalui alur dukungan pengguna
    • Dengan menyederhanakan masalah, berhasil juga menggunakan GPT-4o mini
  • Untuk konten terstruktur (misalnya daftar item, tabel sederhana), LLM tidak diperlukan

    • Versi awal web scraper dibuat dengan AI, tetapi heuristik berbasis atribut elemen dan posisi ternyata lebih cepat, lebih murah, dan lebih akurat
    • Pada sebagian besar situs web, pendekatan non-AI bekerja sangat baik
    • Perlu memastikan apakah AI benar-benar diperlukan
  • Mengejutkan bahwa penulis menyelesaikan 99% pekerjaan tetapi tidak mengunduh dan menguji ollama untuk 1% sisanya

    • Model 7B atau 30B bisa bekerja dengan baik untuk kasus ini
    • Tidak perlu GPT-4o
  • Menggunakan metode mengambil screenshot halaman, memotong bagian yang diperlukan, lalu mengirimkannya ke GPT

    • Berguna saat harus bekerja manual untuk membandingkan harga dari berbagai pemasok
    • Bisa mahal, tetapi tetap lebih murah daripada manusia sungguhan dan memungkinkan mereka mengerjakan hal yang lebih bermakna
  • OpenAI baru-baru ini mengumumkan Batch API

    • Semua prompt bisa disiapkan lalu dijalankan dalam batch
    • Biaya turun menjadi setengahnya
    • Berguna untuk aplikasi non-real-time
  • Memberikan contoh HTML lalu meminta snippet kode beautifulsoup terbukti efektif

    • Struktur yang ingin di-scrape tetap sama
    • Menggunakan LLM untuk parsing secara langsung berlebihan dan berisiko mendistorsi hasil
  • Bertanya-tanya apakah ada "html reducer"

    • 90% token dalam source halaman tidak diperlukan
    • Jika memakai parser DOM dan hanya mempertahankan node yang berisi teks, penghematannya akan cukup besar
    • Menggunakan readability, tetapi kualitasnya menurun pada situs web yang banyak memakai JS
  • Daripada scraping langsung dengan GPT-4o, GPT-4o bisa diminta menulis skrip web scraper sederhana

    • Jika muncul masalah, gunakan prompt loop
    • Lebih efisien membuat dan menjalankan pemecah kendala
  • Di Kadoa sedang mengerjakan tugas web scraping otomatis berbasis AI

    • Pada awalnya menggunakan GPT-3, tetapi kemudian mengembangkan solusi yang hemat biaya
    • Menggunakan codegen yang menghasilkan kode ekstraksi CSS selector atau XPath
    • Menggunakan LLM kecil untuk membersihkan data dan memetakannya ke format yang diinginkan
    • Menggunakan LLM sebagai juri untuk menilai kualitas data
    • Menggabungkan metode rekayasa ETL tradisional dengan tahapan LLM kecil
  • Sedang membangun basis data musik klasik

    • Menggunakan ChatGPT untuk mengekstrak daftar acara dari Wikipedia
    • Menggunakan chatgpt-mini untuk mengurangi biaya
    • Menggunakan BeautifulSoup(html).text untuk mengurangi jumlah token
    • Saat scraping 10.000 halaman, lebih efisien memberikan HTML dan memintanya menulis kode Python
    • Fitur from_html milik Pandas berguna, tetapi tidak semua tabel menggunakan tag <table>