41 คะแนน โดย GN⁺ 2024-02-21 | 5 ความคิดเห็น | แชร์ทาง WhatsApp

ข้อดีของการทำเว็บสแครปด้วย Python

  • ไวยากรณ์เรียบง่าย: เขียนโค้ดได้รวดเร็ว
  • ไลบรารีในตัว: urllib, lxml เป็นต้น ช่วยในการสแครป
  • ไลบรารีสแครปที่พัฒนาเต็มที่: Beautiful Soup, Scrapy เป็นต้น
  • ความอเนกประสงค์: นำไปใช้สร้าง data pipeline ได้
  • การทำงานร่วมกันได้: ผสานกับภาษาอื่นได้ และทำงานได้ดีเมื่อต้องให้ความสำคัญกับประสิทธิภาพ

ไลบรารีเว็บสแครปของ Python

  • BeautifulSoup: พาร์ส HTML/XML, นำทางและค้นหาได้อย่างยืดหยุ่น
  • Scrapy: รวดเร็วและขยายต่อได้ รองรับ middleware และการ crawl แบบกระจาย
  • Selenium: ทำ browser automation และจัดการเว็บไซต์ที่ขับเคลื่อนด้วย JavaScript
  • lxml: ตัวพาร์ส XML/HTML ที่รวดเร็วมาก
  • pyquery: เข้าถึงองค์ประกอบ HTML ด้วยไวยากรณ์สไตล์ jQuery

สิ่งที่ต้องเตรียมสำหรับการสแครป

  • แนะนำให้ตั้งค่า virtual environment
  • ไลบรารีที่จำเป็น: Requests, BeautifulSoup, OS

การเลือกเว็บไซต์เป้าหมายสำหรับสแครป

  • เลือกหน้ารายการ 'สายพันธุ์สุนัข' ของ Wikipedia
  • มี HTML ที่จัดโครงสร้างไว้อย่างดี มีฟิลด์ข้อมูลหลากหลาย และมีรูปภาพประกอบ

การเขียนโค้ดสแครป

  • import ไลบรารีที่จำเป็น
  • ใช้ User-Agent เพื่อปลอมตัวเป็นเบราว์เซอร์
  • ดาวน์โหลดหน้า HTML ผ่าน requests และตรวจสอบความถูกต้อง
  • พาร์ส HTML ด้วย BeautifulSoup
  • ดึงข้อมูลด้วย CSS selector
  • ดาวน์โหลดและบันทึกรูปภาพ

ความท้าทายในโลกจริงของเว็บสแครปและแนวปฏิบัติที่ดี

  • การจัดการคอนเทนต์แบบไดนามิก: ใช้ Selenium หรือการผสาน splash ของ Scrapy
  • การหลีกเลี่ยงการถูกบล็อก: ควบคุมความเร็วในการส่งคำขอ เลียนแบบเบราว์เซอร์ หมุนเวียน user agent และ proxy
  • การจำกัดอัตรา: เคารพ crawl delay ใช้ proxy และปรับคำขออัตโนมัติ
  • การพาร์ส HTML ที่ซับซ้อน: ใช้ตัวพาร์สที่ทรงพลังอย่าง lxml และปรับ selector ให้แข็งแรงขึ้น

ความเห็นของ GN⁺

  • ประเด็นสำคัญที่สุด: Python เป็นภาษาที่ทรงพลังสำหรับการทำเว็บสแครป ด้วยไวยากรณ์ที่เรียบง่ายและไลบรารีที่หลากหลาย จึงเหมาะกับโปรเจ็กต์เว็บสแครปในหลายระดับขนาด
  • เหตุผลที่น่าสนใจ: เว็บสแครปเป็นทักษะสำคัญสำหรับการเก็บและวิเคราะห์ข้อมูล และคู่มือนี้มอบความรู้เชิงปฏิบัติที่วิศวกรซอฟต์แวร์ระดับเริ่มต้นนำไปใช้กับโปรเจ็กต์จริงได้
  • เหตุผลที่มีประโยชน์: เว็บสแครปสามารถประยุกต์ใช้ได้ในหลากหลายสาขา และคู่มือนี้ช่วยพัฒนาทักษะการสแครปที่พร้อมใช้งานจริงผ่านความท้าทายและแนวปฏิบัติที่ดีในภาคสนาม

5 ความคิดเห็น

 
yangeok 2024-02-26

สำหรับการเรนเดอร์ JavaScript นี่ต้องยกให้ playwright เลยครับ การรองรับภาษาก็กว้างมากด้วย

ถ้าเอาไปใช้คู่กับ scrapy ก็น่าจะเกิดซินเนอร์จี้กันได้ครับ

 
ikbzbcg15 2024-02-21

เออ ยุคนี้ก็ต้องใช้ playwright สิ

 
bandoche 2024-02-21

พอทำงานสแครปจริง ๆ แล้ว จะพบว่าสิ่งที่ยุ่งยากกว่าที่คิดมากที่สุดคือการจัดการเบราว์เซอร์ (เช่น chrome webdriver ที่มักเกิดข้อผิดพลาดเป็นครั้งคราว) และการรับมือกับการบล็อกต่าง ๆ (captcha หลากหลายรูปแบบ)

 
GN⁺ 2024-02-21
ความคิดเห็นบน Hacker News
  • การแยก web crawling ออกจาก scraping เป็นสิ่งสำคัญ โดย crawling คือขั้นตอนการหา URL และดึงเนื้อหา HTML มา ส่วน scraping คือขั้นตอนการดึงข้อมูลแบบมีโครงสร้างออกมาจาก HTML การแยกสองขั้นตอนนี้ออกจากกันทำให้ภายหลังสามารถแก้ไข scraper แล้วนำไปใช้กับข้อมูลเดิมซ้ำได้อย่างรวดเร็ว
  • แนะนำ Playwright เป็นเครื่องมือสำหรับ web scraping ใน Python เป็นเครื่องมือ browser automation ที่ทรงพลังมากและออกแบบมาอย่างดี และยังใช้เครื่องมือ CLI shot-scraper ที่สามารถ scrape หน้าเว็บได้โดยตรงจาก command line
  • การที่บริษัท SaaS โปรโมตผลิตภัณฑ์ของตัวเองในบล็อกโพสต์ก็เป็นส่วนหนึ่งของการตลาด แต่การแนะนำปัญหาให้มือใหม่รู้จักเป็นครั้งแรกแล้วเสนอผลิตภัณฑ์ของตัวเองเป็นคำตอบก็ดูน่าสนใจดีเสมอ
  • การตรวจสอบ <domain>/robots.txt ซึ่งมีข้อมูลที่เป็นประโยชน์ต่อการ scrape เว็บไซต์ และการดึงข้อมูลผ่าน structured metadata แทนการ parse HTML tag อาจช่วยได้ นอกจากนี้ยังมีไลบรารีที่ดึงข้อมูลนี้ออกมาเป็น JSON ได้ด้วย
  • ตั้งคำถามถึงความนิยมของการทำ web scraping ด้วย Node.js แทน Python โดยใน npm มีแพ็กเกจสำหรับ parse DOM ที่ทำมาอย่างดี และการใช้ JavaScript ก็ทำให้ใช้ความสามารถของ DOM ได้อย่างเป็นธรรมชาติมากกว่า
  • สามารถใช้ read_html ของ pandas เพื่อดึงลิงก์ได้อย่างง่ายดาย และใช้วิธีนี้เพื่อดึงข้อมูลตารางจากเว็บไซต์ได้สะดวก
  • เหนื่อยกับงาน web scraping ที่ทำซ้ำ ๆ และไม่ค่อยต้องใช้ความคิดสร้างสรรค์ จึงกำลังพยายามใช้ LLM (Large Language Models) เพื่อทำให้ทั้งกระบวนการเป็นอัตโนมัติ การใช้ LLM เพื่อสร้างและปรับโค้ด scraper ให้รองรับการเปลี่ยนแปลงของเว็บไซต์มีประสิทธิภาพดี
  • ตั้งคำถามว่ามีคำว่า "คู่มือฉบับสมบูรณ์" สำหรับการ scrape ด้วย Python มากแค่ไหนแล้ว
  • การตั้งค่า web scraping แบบสมัยใหม่ต้องมี browser agent และหากต้องการดึงข้อมูลจากแพลตฟอร์มโซเชียลมีเดียรายใหญ่หรือบทความของ New York Times ก็อาจต้องสร้างเครื่องมือขึ้นมาใช้เอง
  • ระหว่างทำงาน scrape ไลบรารี requests-cache มีประโยชน์มาก มันใช้แทนไลบรารี requests แต่จะ cache ทุก response ลงในฐานข้อมูล SQLite ซึ่งมีประโยชน์เวลาปรับสคริปต์ในตอนที่ถูกเว็บไซต์จำกัดการใช้งาน
 
xguru 2024-02-21

ประเด็นสำคัญในคอมเมนต์นี้คือ

การที่บริษัท SaaS โปรโมตสินค้าของตัวเองในบล็อกโพสต์ก็เป็นส่วนหนึ่งของการตลาด แต่การแนะนำปัญหาให้มือใหม่รู้จักเป็นครั้งแรก แล้วเสนอสินค้าของตัวเองเป็นทางออกนั้นก็น่าสนใจอยู่เสมอ

นี่แหละครับ ต้องอ่านโดยคำนึงไว้เสมอว่าบทความแบบนี้มักจะมีการโปรโมตสินค้าของตัวเองอยู่ในตอนท้าย
ถ้ามองกลับกัน ผมคิดว่าบริษัทในประเทศก็ควรใช้วิธีแบบนี้เป็นพื้นฐานเหมือนกัน