- บทความสรุปประสบการณ์การพัฒนาเว็บสแครปเปอร์ที่มี AI ช่วย โดยใช้ฟีเจอร์ structured outputs ใหม่ของ OpenAI
ขอให้ GPT-4o สแครปข้อมูล
- การทดลองแรกคือขอให้ GPT-4o ดึงข้อมูลจากสตริง HTML
- ตั้งค่า structured output โดยใช้โมเดล Pydantic
from typing import List, Dict class ParsedColumn(BaseModel): name: str values: List[str] class ParsedTable(BaseModel): name: str columns: List[ParsedColumn] - system prompt มีดังนี้:
คุณเป็นผู้เชี่ยวชาญด้านเว็บสแครปปิง ต้องรับเนื้อหาของตาราง HTML และดึงข้อมูลแบบมีโครงสร้างออกมา
การพาร์สตารางที่ซับซ้อน
- หลังจากทดลองกับตารางแบบง่ายแล้ว ได้ทดสอบตารางที่ซับซ้อน เช่น พยากรณ์อากาศ 10 วันของ Weather.com
- GPT-4o พาร์สข้อมูลได้อย่างแม่นยำโดยเพิ่มคอลัมน์
Day/Night - ตอนแรกคิดว่าคอลัมน์
Conditionเป็น Hallucination เพราะมองไม่เห็นบนเว็บไซต์ แต่เมื่อตรวจดูซอร์สโค้ดพบว่าเป็นแท็กที่มีอยู่จริง
แถวที่ถูกผสานทำให้โมเดลพัง
- ได้ทดสอบตารางแบบง่ายของ Wikipedia (Human Development Index) แต่โมเดลล้มเหลวเพราะมีแถวที่ถูกผสาน
- ลองแก้ system prompt แล้ว แต่ก็ไม่ได้ผล
ขอให้ GPT-4o ส่งคืน XPath
- เพื่อลดค่าใช้จ่ายของการเรียก OpenAI API จึงขอให้ส่งคืน XPath แทนข้อมูลที่พาร์สแล้ว
- อย่างไรก็ตาม โมเดลมักส่งคืน XPath ที่ผิดหรือไม่ส่งข้อมูลกลับมาเลย
ผสานสองแนวทางเข้าด้วยกัน
- ได้ลองใช้แนวทางดึงข้อมูลออกมาก่อน แล้วจึงอ้างอิงข้อมูลนั้นเพื่อขอ XPath
- วิธีนี้ให้ผลลัพธ์ดีกว่า แต่เกิดปัญหาที่รูปภาพถูกแปลงเป็นข้อความ
GPT-4o มีค่าใช้จ่ายสูงมาก
- การสแครปด้วย GPT-4o มีค่าใช้จ่ายสูง
- จึงเพิ่มตรรกะสำหรับทำความสะอาดสตริง HTML เพื่อลบข้อมูลที่ไม่จำเป็นและลดต้นทุน
บทสรุปและเดโม
- ผู้เขียนประทับใจกับคุณภาพการดึงข้อมูลของ GPT-4o แต่ก็ผิดหวังกับปัญหาเรื่องค่าใช้จ่าย
- มีการให้เดโมอย่างง่ายที่สร้างด้วย Streamlit
- ยังมีอีกหลายจุดที่ต้องปรับปรุงผ่านการทดลองเพิ่มเติม
สรุปโดย GN⁺
- บทความนี้สำรวจทั้งศักยภาพและข้อจำกัดของเว็บสแครปปิงที่ใช้ AI
- แสดงให้เห็นว่าสามารถใช้ฟีเจอร์ structured outputs ของ GPT-4o เพื่อดึงข้อมูลตารางที่ซับซ้อนได้อย่างแม่นยำ
- แม้จะมีปัญหาเรื่องต้นทุนและข้อจำกัดทางเทคนิคบางส่วน แต่ก็สะท้อนให้เห็นศักยภาพของเครื่องมือเว็บสแครปปิงที่มี AI ช่วย
- โครงการอื่นที่มีฟังก์ชันคล้ายกัน ได้แก่ BeautifulSoup, Scrapy เป็นต้น
1 ความคิดเห็น
ความเห็นจาก Hacker News
การแปลง HTML เป็นรูปแบบที่เรียบง่ายกว่า (เช่น markdown) แล้วค่อยส่งให้ LLM ได้ผลดี
สำหรับคอนเทนต์ที่มีโครงสร้างชัดเจน (เช่น รายการข้อมูลหรือตารางง่าย ๆ) ไม่จำเป็นต้องใช้ LLM
น่าแปลกใจที่ผู้เขียนทำงานเสร็จไปแล้ว 99% แต่ไม่ได้ดาวน์โหลด ollama มาทดสอบสำหรับอีก 1% ที่เหลือ
มีการใช้วิธีแคปภาพหน้าจอของหน้าเว็บ แล้วครอปเฉพาะส่วนที่ต้องการส่งให้ GPT
OpenAI เพิ่งประกาศ Batch API
วิธีให้ตัวอย่าง HTML แล้วขอ code snippet ของ beautifulsoup นั้นได้ผลดี
สงสัยว่ามี "html reducer" หรือไม่
แทนที่จะให้ GPT-4o สแครปโดยตรง อาจให้ GPT-4o เขียนสคริปต์เว็บสแครปเปอร์แบบง่ายแทนได้
ที่ Kadoa กำลังทำงานด้าน AI automation สำหรับเว็บสแครปปิง
กำลังสร้างฐานข้อมูลดนตรีคลาสสิก