Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

บันทึกการดึงข้อมูลจาก web ด้วย Puppeteer (Web Scraping)

$
0
0

ได้รับงานเล็ก ๆมาลองทำเล่นดู
นั่นคือ การดึงข้อมูลจาก 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


Viewing all articles
Browse latest Browse all 1997

Trending Articles