ได้รับงานเล็ก ๆมาลองทำเล่นดู
นั่นคือ การดึงข้อมูลจาก web มาเพื่อใช้งานต่อไป
เนื่องจาก web ปลายทางไม่มี API เตรียมไว้ให้
ดังนั้นการดึงข้อมูลหรือเรียกว่า Web Scraping
จึงเป็นทางเลือกที่น่าสนใจ
แต่ก็ต้องระวังด้วยว่า web ปลายทางจะ block
หรือตรวจจับการดึงข้อมูลรูปแบบนี้หรือไม่
เมื่อได้รู้ความต้องการและปัญหาที่ต้องแก้ไขแล้ว
จึงมาถึงเครื่องมือที่ใช้งาน
ซึ่งจากที่เคยทำมามีเยอะเลย
ทั้งเรียกไปยังปลายทางตรง ๆ แล้วเอาข้อมูลมา processing ต่อ
หรือเปิด web browser แล้วตัดเอาข้อมูลใน element ที่ต้องการมา
โดยแนวทางที่เลือกคือ เปิด web browser นี่แหละ
แต่จะเป็น web browser ขึ้นมาก็น่าจะช้ามาก ๆ
ดังนั้นจึงเลือกเป็น headless mode ดีกว่า
และ library แรกที่เด้งมาจากในหัวเลยคือ Puppeteer นั่นเอง
ก็เลยใช้ซะ
ทำงานผ่าน DevTool protocol สำหรับควบคุม Google Chrome เท่านั้น
ซึ่งเร็วแน่นอน !!
การใช้งานก็ไม่ได้ยากอะไร ใคร ๆ ก็เขียนได้
โดยมีขั้นตอนการทำงานดังนี้
- เปิด browser ขึ้นมา ซึ่งสามารถกำหนด option ต่าง ๆ ไปได้ เช่น timeout เป็นต้น
- ไปยังหน้าหรือ URL ของ web ที่เราต้องการ แน่นอนว่า ใส่ option ไปได้อีก
- ทำการเข้าถึง element ที่เราต้องการนำข้อมูลมาใช้งาน โดยสามารถเข้าถึงได้ด้วย selector ของ element นั้น ๆ ตรงนี้ก็ต้องใช้ความเข้าในเรื่อง Web และ DOM กันนิดหน่อย แต่ไม่ยากจนเกินไป
- สุดท้ายก็อย่างลืมปิด web browser ด้วยนะ
แสดงตัวอย่าง code ง่าย ๆ ดังนี้
[gist id="1eb260387e8ca980007d560d582deed1" file="sample.js"]เขียน code จบงานภายใน 10-20 บรรทัดเท่านั้น
ที่เหลือก็อยู่ความต้องการของเราแล้วว่าจะเอาไปทำอะไรต่อไป
ซึ่งไม่ยากเท่าไรนัก
สรุปแล้วแนวทางนี้ถูกสร้างขึ้นมาภายใน 10 นาที
จากนั้นก็ตกแต่งให้สวยงามและให้ได้ผลตามที่ต้องการอีกเล็กน้อย
สุดท้ายก็ run งาน ในส่วนนี้แหละที่ใช้เวลาเป็นวัน
เนื่องจากข้อมูลเยอะ และระบบปลายทางช้ามาก ๆ
แถมการทำงานของ code ที่ผมเขียนยังเป็นแบบ sequencial
ดังนั้นก็ยิ่งช้าไปกันใหญ่ แต่ก็ถือว่าตอบโจทย์และเพียงพอต่อการใช้งานแล้ว
ขอให้สนุกกับก่ีเขียน code