Tool: scrape_table — ดึงตารางจากเว็บ JS-rendered แบบ deterministic ไม่พึ่ง AI

scrape_table ดึงตารางที่อยู่บนหน้าเว็บออกมาเป็นข้อมูลมีโครงสร้าง โดยไม่ต้องให้โมเดลตีความข้อความทั้งหน้า เหมาะกับราคาสินค้า สถิติ หรือรายการที่เปรียบเทียบกันเป็นแถวและคอลัมน์
Tool นี้คืออะไร
ดึงตารางตัวเลขจากหน้าเว็บที่ render ด้วย JavaScript (React, Vue, single-page app) ผ่าน Playwright (เปิด browser จริงแบบ headless รอจน network idle แปลว่า JS โหลดข้อมูลตารางเสร็จแล้ว) จากนั้นใช้ pandas.read_html สกัดทุกตารางที่เจอใน HTML ออกมาเป็น DataFrame แล้วคืนเป็น CSV string พร้อมส่งต่อให้ python_exec วิเคราะห์ต่อ
จุดต่างสำคัญจาก browser_use: code-controlled ไม่ใช่ AI agent
คอมเมนต์ในซอร์สเน้นย้ำจุดนี้ตรงๆ: “ต่างจาก browser_use: code-controlled ไม่ใช่ AI agent — output deterministic” — browser_use ให้ AI ตัดสินใจเองว่าจะคลิกตรงไหน แต่ scrape_table เป็นโค้ดตายตัวที่ทำสิ่งเดียวกันทุกครั้ง: เปิดหน้า → รอโหลด → ดึง HTML → สกัดตาราง — ไม่มีการตัดสินใจของ AI เข้ามาเกี่ยวข้องระหว่างขั้นตอนดึงข้อมูลเลย ผลลัพธ์จึงคาดเดาได้และตรวจสอบได้เต็มที่ ต่างจาก browser_use ที่พฤติกรรมขึ้นกับการตัดสินใจของโมเดลในแต่ละครั้ง
การเลือกใช้ approach ไหนขึ้นกับงาน: ถ้าแค่ต้องการตารางตัวเลขจากหน้าที่ render ด้วย JS scrape_table เร็วกว่าและเชื่อถือได้กว่า (ไม่มีความเสี่ยงที่ AI agent จะคลิกผิดที่) แต่ถ้าต้อง login หรือ navigate หลายขั้นตอนก่อนถึงตาราง ต้องใช้ browser_use แทนเพราะ scrape_table ทำได้แค่ “เปิดหน้าเดียว ดึงตาราง”
Agent เรียก tool นี้เมื่อไร
ใช้เมื่อผู้ใช้แปะ URL มาแล้วสั่งวิเคราะห์/เปรียบเทียบข้อมูลตัวเลขจากตารางในหน้านั้น — ต่างจาก web_search ที่คืนข้อความสรุป scrape_table คืนข้อมูลตัวเลขที่มีโครงสร้างชัดเจน (แถว/คอลัมน์) พร้อมให้วิเคราะห์เชิงปริมาณต่อได้ทันที
สำรวจตารางก่อนเลือก ด้วย table_index=-1
หน้าเว็บหนึ่งอาจมีหลายตาราง — เรียก scrape_table(url, table_index=-1) ก่อนเพื่อดูรายชื่อตารางทั้งหมดที่เจอ (จำนวนแถว/คอลัมน์ และชื่อคอลัมน์ 5 อันแรกของแต่ละตาราง) แล้วค่อยเรียกซ้ำด้วย table_index ที่ถูกต้องเพื่อดึงตารางที่ต้องการจริงๆ — กันปัญหาดึงผิดตารางเมื่อหน้าเว็บมีตารางหลายอัน (เช่นตาราง navigation ที่ไม่ใช่ข้อมูลจริงมักติดมาด้วย)
ถ้าตารางใหญ่เกิน ตัดแบบไม่ตัดกลางแถว
ถ้า CSV ที่ได้ยาวเกิน SCRAPE_TABLE_MAX_CHARS ระบบตัดที่ตำแหน่งขึ้นบรรทัดใหม่ล่าสุดก่อนถึง limit (csv[:csv.rfind("\n") + 1]) — รับประกันว่าจะไม่ตัดกลางแถวข้อมูลจนได้ CSV ที่ parse ต่อไม่ได้ พร้อมข้อความแนะนำให้ใช้ python_exec อ่าน URL โดยตรงถ้าต้องการข้อมูลครบทุกแถว
ทำไมเรื่องนี้ถึงสำคัญ
scrape_table แสดงหลักการที่สำคัญ: ไม่ใช่ทุกงานที่ “เกี่ยวกับเว็บ” ต้องใช้ AI ตัดสินใจ งานที่มีโครงสร้างชัดเจนและทำซ้ำได้ (ดึงตารางจาก URL ที่รู้แน่ชัด) เหมาะกับโค้ด deterministic มากกว่า AI agent เพราะให้ผลลัพธ์ที่คาดเดาได้ ตรวจสอบได้ และเร็วกว่า — AI ควรถูกสงวนไว้สำหรับงานที่ต้องตัดสินใจจริงๆ (เช่น navigate หน้าเว็บที่ไม่รู้โครงสร้างล่วงหน้า) ไม่ใช่ทุกงานที่แตะเว็บ
ความคิดเห็น
กำลังโหลดความคิดเห็น...