อัปเดตล่าสุด June 25, 2023
ต้องการดึงข้อมูลจากหน้าเว็บไซต์ต่าง ๆ แบบอัตโนมัติโดยที่ไม่ต้อง copy/paste แบบ manual ซึ่งกว่าจะทำเสร็จก็ใช้เวลานานมาก ? เพื่อลดงานในส่วนนี้ หรือไม่ว่าจะเป็นเว็บนั้น ๆ ไม่มี API มาให้ใช้เพื่อให้เราดึงข้อมูล ดังนั้นจึงมีวิธีการหนึ่งในทางโปรแกรมมิ่งที่เราสามารถทำได้ เราจะเรียกเทคนิคนี้ว่า "การทำ Web Scraping"
Web Scraping คือ วิธีการในการดึงหรือสกัดเอาข้อมูลจากเว็บไซต์ต่าง ๆ ด้วยการใช้ซอฟต์แวร์ในการ scrape ข้อมูล หรือไม่ว่าจะเป็นการเขียนโปรแกรมด้วยภาษา Scripting Language อย่างภาษา Python เพื่อดึงข้อมูลเหล่านั้นมา โดยหน้าเว็บที่เราจะทำ web scraping ต้องเป็น public data อนุญาตให้เราสามารถดึงข้อมูลได้
เราต้องดูให้ดีว่าหน้าเว็บไหนที่เราสามารถทำ Web Scraping ได้ เพื่อที่จะได้ไม่ขัดต่อกฏหมายและละเมิดข้อมูลส่วนบุคคล คือต้องอ่านรายละเอียดและสังเกตดูให้ดีครับว่าเว็บไหนทำได้หรือไม่ได้ ตัวอย่างดังต่อไปนี้
ด้านบนก็คือข้อสังเกตของการทำ web scraping ที่อาจจะขัดหรือละเมิดต่อกฎหมายได้ครับ ยังไงก็ลองสังเกตและศึกษาเว็บไซต์เป้าหมายของเราให้ดีก่อนนะครับ
ต่อมาเราก็จะมาเริ่มทำ Web Scraping กันแล้วครับด้วยภาษาที่นิยมที่สุดคือ Python โดยสเต็ปแรกต้องติดตั้งไลบรารี่และเครื่องมือที่จำเป็นอยู่ 2 ตัว รวมไปถึง IDE ในการเขียนโค้ดดังต่อไปนี้
Note: เพื่อน ๆ สามารถเลือกเครื่องมือเขียนโค้ดได้ตามใจชอบ เช่น VS Code, Sublime Text, Jupyter Notebook, ฯลฯ แต่ในบทความนี้ผมใช้ PyCharm ครับ
BeautifulSoup4 คือ ไลบรารี่ที่เราจะใช้จัดการกับ HTML Elements และ Attributes ต่าง ๆ ที่เราได้ไป scrape มาในแต่ละหน้าเว็บ ซึ่งจะจัดการส่วนต่าง ๆ ให้เราหมดเลยครับ
Requests คือ ไลบรารี่สำหรับเรียกใช้งาน HTTP Methods ต่าง ๆ ไม่ว่าจะเป็น GET, POST, PUT, DELETE เป็นต้น ซึ่งเป็นหลักการพื้นฐานของเว็บ
ติดตั้ง BeautifulSoup
ทำการติดตั้ง BeautifulSoup4 ด้วยคำสั่ง
pip install beautifulsoup4
ติดตั้ง requests
ทำการติดตั้ง requests ด้วยคำสั่ง
pip install requests
เช็คว่าไลบรารี่ติดตั้งสำเร็จเรียบร้อยดีหรือไม่
pip freeze
ไลบรารี่ทั้ง beautifulsoup4 และ requests ถูกติดตั้งเรียบร้อยดีไม่มีปัญหา (แต่ก็จะมี libs ตัวอื่นปนมาด้วยบางส่วน ไม่ใช่ปัญหาครับ)
beautifulsoup4==4.12.0
certifi==2022.12.7
charset-normalizer==3.1.0
idna==3.4
requests==2.28.2
soupsieve==2.4
urllib3==1.26.15
1. อิมพอร์ตไลบรารี่ที่เกี่ยวข้อง
import requests
from bs4 import BeautifulSoup
2. กำหนด URL ของเว็บที่เราจะสกัด (Scrape) เอาข้อมูล
url = "https://devhub.in.th/"
3. ส่ง GET request เพื่อดึงข้อมูลจากตัวแปร url ที่กำหนดเว็บไซต์ devhub.in.th ไว้ก่อนหน้า
response = requests.get(url)
4. เมื่อได้ elements ทั้งหมดของหน้าเว็บเพจมาแล้ว ก็จะใช้ฟังก์ชัน BeautifulSoup() เพื่อสกัดเอาข้อมูลทั้งหมดออกมา เพื่อที่เราจะสามารถเข้าถึงข้อมูลเหล่านั้นด้วย HTML Tags ได้ในขั้นตอนต่อไป
soup = BeautifulSoup(response.content, "html.parser")
5. ทดสอบแสดงผลข้อมูลที่เราต้องการจะสกัดออกมาด้วยคำสั่ง print() แบบตรงไปตรงมาเลยครับ โดยในที่นี้จะเป็นการเข้าถึง Title (ซึ่งโดยปกติก็จะเป็นแท็ก H1 element) จากนั้นแสดงผลข้อมูลของแท็กนั้นออกมาได้คำสั่ง .string
print(soup.title.string)
ตัวอย่างโค้ดฉบับเต็ม
# ขั้นตอนการอิมพอร์ตไลบรารี่ที่เกี่ยวข้อง
import requests
from bs4 import BeautifulSoup
# ขั้นตอนการโปรเซสและ scrape ข้อมูลจากเว็บไซต์ที่ต้องการ
url = "https://devhub.in.th/" # Target URL (website)
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# ขั้นตอนการแสดงผล
print(soup.title.string)
ผลลัพธ์
DH - Programming Resources for Thai Programmers
จะเห็นว่าตอนนี้เราสามารถดึง Title ของเว็บไซต์ devhub.in.th มาแสดงผลได้แล้ว ด้วยคำสั่ง
print(soup.title.string) # เข้าถึง Title
เราอยากเข้าถึง Elements หรือ Attributes ตัวไหนของ HTML ก็สามารถกำหนดได้ตามต้องครับ ไม่ว่าจะเป็น h2, h3, p หรือแท็กอื่น ๆ เป็นต้น เลือกใช้ตามการใช้งานได้เลย เราสามารถนำแนวคิดนี้ไปต่อยอดในระดับสูงขึ้นได้ครับ
หลายคนน่าจะสงสัยว่า แล้วหน้าเว็บที่ต้องล็อกอินหรือมีระบบ authentication ผู้ใช้ก่อนล่ะ เราจะสามารถทำ web scraping ได้ไหม หรือถ้าทำได้จะมีวิธีการทำอย่างไร เดี๋ยวผมจะมาเขียนส่วนนี้ต่อครับ กดติดตามหรือ bookmark หน้าเว็บไว้ก่อนได้
ถ้าชื่นชอบบทความนี้ก็คอมเมนต์เพื่อซัพพอร์ตเราได้ที่ Web Scraping Facebook post นี้ได้เลย และสามารถแชร์ออกไปให้เพื่อนของเราได้อ่านด้วยครับ
จ้างโปรแกรมเมอร์หรือนักพัฒนาสำหรับโปรเจคท์ด้าน Software Development เช่น Website, Web App, Mobile App หรือสอนโค้ดดิ้งตัวต่อตัว?
ติดต่อเรา