บทความนี้แอดมาสอนการดึงข้อมูลจากเว็บไซต์ หรือการทำ web scraping กับหน้าเว็บไซต์ static ง่ายๆ เช่น wikipedia, IMDb, เว็บไซต์ข้อมูลทั่วๆไป เป็นต้น
ตัวอย่างโค้ดแอดสอนด้วย R เพื่อนๆสามารถทำตามบน RStudio Cloud ได้เลย
Table of Contents
What is Web Scraping
Web scraping คือการดึงข้อมูลจากเว็บไซต์ (data extraction) เพื่อสร้าง datasets สำหรับใช้ในงานอื่นๆต่อไป โดยขั้นตอนการดึงข้อมูลจริงๆไม่มีอะไรเลยสำหรับ static websites
- ดาวน์โหลด source (html, css, javascript) จากเว็บไซต์
- ดึง nodes (HTML elements) ที่เราต้องการ
- รวมข้อมูลที่เราดึงออกมาเป็น data frame
Web scraping refers to the extraction of data from a website. This information is collected and then exported into a format that is more useful for the user
Parsehub.com
✅ ความรู้พื้นฐานที่ควรมีก่อนเริ่มทำ web data harvesting คือ basic HTML, CSS และ JavaScript is a plus แอดแนะนำลองรีวิว concepts สำคัญๆได้ที่ W3schools
ถ้าใครยังไม่เคยใช้ RStudio Cloud สามารถสมัคร free account และสร้าง new project รอไว้ได้เลย ด้านล่างเป็นตัวอย่าง code
ทั้งหมดที่เราจะเขียนวันนี้ ไม่ถึง 20 บรรทัด

Introducing rvest
R มี package ชื่อ rvest
สำหรับดึงข้อมูลจาก static website พัฒนาโดย Hadley Wickham Chief data scientist ที่ RStudio/ Posit
มาลองดาวน์โหลดและเรียกใช้งาน packages กันก่อน โดยแอดใช้ tidyverse เพื่อ prep data และ rvest สำหรับ web scraping
install.packages(c("tidyverse", "rvest"))
library(tidyverse)
library(rvest)
เว็บไซต์ที่เราจะ scrape วันนี้ชื่อ SpecPhone โดยเราจะเข้าไปที่หน้า Samsung Galaxy S22 และดึง specs ของโทรศัพท์รุ่นนี้ออกมา เช่น ชื่อแบรนด์ cpu ram กล้อง วันเปิดตัว เป็นต้น
url <- "https://specphone.com/Samsung-Galaxy-S22.html"
web <- read_html(url)
✅ เราใช้ฟังก์ชัน read_html()
เพื่ออ่านไฟล์ html บนเว็บ SpecPhone

Step ถัดไปคือการค้นหา node/ element ที่เราต้องการจะดึงข้อมูล
- วิธีการดู source
HTML
ของหน้า web page ให้เราคลิกขวาบนหน้าจอเลือกinspect
- Web browser ที่เราแนะนำคือ Google Chrome/ Microsoft Edge/ Firefox นะครับ 😊

คลิกที่ element ที่เราต้องการบนหน้าเว็บไซต์เพื่อดูชื่อ tag หรือ class สำหรับใช้ในขั้นตอน scrape ความยากง่ายของการดึงข้อมูลจะอยู่ที่ขั้นตอนนี้ ส่วนใหญ่เว็บ static จะมีโครงสร้างไม่ซับซ้อน จะหา tag ได้ง่ายกว่าเว็บแบบ dynamic/ interactive

พอเรารู้แล้วว่าข้อมูลที่เราต้องการอยู่ที่ HTML tags อะไร ก็เขียน R เพื่อดึงข้อมูลได้เลย เราใช้ฟังก์ชัน html_nodes()
เพื่อดึง elements เสร็จแล้วใช้ html_text()
เพื่อดึง content หรือ text
- key อยู่ที่ div.topic
- value อยู่ที่ div.detail
✅ div
คือชื่อ tag ที่เราต้องการ ส่วน .topic
/ .detail
เป็น class ของ tag นั้น
topics <- web %>%
html_nodes("div.topic") %>%
html_text()
details <- web %>%
html_nodes("div.detail") %>%
html_text()
ประกอบร่างตัว topics และ details เป็น Data Frame
df <- data.frame(topics, details)
View(df)
เสร็จแล้ว ง่ายเหลือเชื่อ 555+ โค้ดแค่ไม่กี่บรรทัดได้ข้อมูลไปทำ data analysis ต่อได้เลย

Full R Script
✅ ถ้าเราสร้าง list ของหน้า web pages ที่ต้องการ scrape มาเก็บใน R ก็ใช้ for-loop
เพื่อดึงข้อมูลทีละหน้า แล้วค่อยประกอบร่างเป็น dataframe ทีหลังก็ได้ สบายๆ
R เป็นภาษาที่ทรงพลังมากสำหรับงาน data science ตัวอย่าง tasks ที่ R ทำได้เช่น
- Web Data Extraction
- Data Transformation
- Data Visualization
- Statistics & Machine Learning
- Web Application & API
ถ้าใครสนใจเรียนเพิ่มเติม ลองดูคอร์สฟรี 30-Minute R หรือเรียนบน YouTube ของเราได้เลยนะครับ 😊
Leave a Reply