พื้นฐาน 5 ข้อที่ควรรู้ ในการทำ Web Scraping

Image placeholder
แวะมาทักทายกันได้



ปัจจุบันมีเว็บไซต์มากมายให้สามารถเข้าถึงข้อมูล โดยเป้าหมายและเหตุผล ก็แตกต่างกันไปตามลักษณะการนำไปใช้งาน อย่างเช่น การทำข้อมูลเสริมเพื่อการตัดสินใจ โดยการสร้าง Model Machine Learning เพื่อช่วยในการตัดสินใจ มาดูกันว่าทั้ง 5 ข้อมีอะไรบ้าง

 

1.        Web Scraping คืออะไร

 

Web Scraping เป็นเทคนิคการรวบรวมข้อมูลบน Internet แบบอัตโนมัติ สามารถแบ่งออกได้เป็น 2 รูปแบบ คือ API Scraping และ Web Scraping

 

เทคนิคการรวบรวมข้อมูล มักจะอยู่ในรูปแบบที่มีการตกลงกันระหว่างผู้ส่งกับผู้รับข้อมูล หรือ Server ที่ให้บริการ Web service นั้นๆ ที่สามารถติดต่อกับฐานข้อมูลได้ โดยส่วนใหญ่แล้ว จะใช้ protocol เช่น SOAP, XML, JSON และ HTML


โดยส่วนใหญ่ในการรวบรวมข้อมูลจะขึ้นกับการอนุญาตการให้บริการข้อมูลที่สามารถเข้าถึงได้ ทั้งวิธีการลงทะเบียน การเข้าสู่ระบบ จนไปถึง Public Data หรือ OpenData โดยในรูปแบบนี้ จะใช้เทคนิค API Scraping เพื่อดึงข้อมูลมาทำอะไรบ้างนั้น ขึ้นอยู่กับผู้พัฒนา อาจจะนำมาเก็บเอาไว้ เพื่อนำไปวิเคราะห์ในภายหลัง หรือ จะแสดงผลบนแอปพลิเคชัน ซึ่งหากไม่สามารถเข้าถึงได้ผ่าน API อาจจะด้วยเหตุผล ไม่มีผู้พัฒนา Service นี้ให้ได้ เพราะจะต้องใช้งบประมาณในการพัฒนา มีแต่หน้าเว็บที่มีข้อมูลอยู่แล้วก็จะไปใช้เทคนิคการทำด้วย Web Scraping ผ่านหน้าเว็บแทน

 


2.        Web Scraping ไปทำไม



ปัจจุบันมีเว็บไซต์มากมายให้สามารถเข้าถึงข้อมูลได้ เช่น

-      Social Media

-      Search Engine

-      E-Commerce

-      Finance Stock

-      News

-      Research Info

 


โดยเป้าหมายและเหตุผล ก็แตกต่างกันไปตามลักษณะการนำไปใช้งาน มีทั้งประสงค์ดี และ ร้าย แต่ผู้เขียนขอยกตัวอย่างที่นำไปใช้งานดี ๆ อย่างเช่น


-      การทำ Data Monitoring – เป็นระบบติดตามข้อมูลข่าวสาร ข้อมูลประจำวันที่ต้องนำข้อมูลมาทำเป็น Info Graphic เพื่อให้เข้าใจได้ง่ายขึ้น เช่น ราคาน้ำ ราคาหุ้น หรือ จำนวนผู้ติดเชื้อ Covid-19 เป็นต้น

 

-      Data Source Decision – การทำข้อมูลเสริมเพื่อการตัดสินใจ โดยการสร้าง Model Machine Learning เพื่อช่วยในการตัดสินใจ ช่วยวิเคราะห์ข้อมูลได้ทันที เป็นต้น

 

จากที่เกริ่นไปนั้น มีทั้งผู้หวังดีและหวังร้ายบนโลก Internet อยู่เป็นจำนวนมาก ซึ่ง แน่นอนว่ามีคนหลายประเภททำให้ไม่สามารถบอกได้ว่า ผู้ใช้งานบนโลกออนไลน์นั้นจะมีจริยธรรมกันทั้งหมด ดังนั้น จึงต้องมีกฎหมายมารองรับ และในช่วงไม่กี่ปีที่ผ่านมา จะเห็นว่าเรื่อง PDPA มีความตื่นตัวในเรื่องนี้กันมากขึ้น แต่เรื่องจริยธรรมกับ PDPA นั้น ผู้เขียนคิดว่าเป็นคนละเรื่องกัน ซึ่งในการทำ Scraping ข้อมูลเป็นเรื่องวิจารณญาณของแต่ละบุคคล

 


3.        จริยธรรมในการทำ Web Scraping


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

-      การเคารพกฎและข้อกำหนด เงื่อนไขของผู้อื่น

-      การขออนุญาต

-      การให้เครดิต

 

ถ้าถามว่าเราจะทราบได้อย่างไรว่า เว็บไซต์นี้ สามารถทำ Web Scraping ได้หรือไม่ ให้สังเกตจากข้อกำหนดใน Policy Privacy และ Term Of Use ของเว็บไซต์นั้น ๆ


ยกตัวอย่าง เว็บไซต์ของ กรมควบคุมโรค ในเรื่อง Covid-19 ซึ่ง เมื่อ 2 ปีที่แล้ว ในการรวบรวมข้อมูลเพื่อทราบจำนวนของผู้ติดเชื้อ ระบบยังไม่มีความพร้อมที่เท่าที่ควร ยังทำเป็น เว็บเพจ HTML เท่านั้น ในช่วงปีนั้น จึงใช้วิธี Web Scraping ในการรวบรวมข้อมูล แต่ถึงอย่างไรก็ตามก็ยังเป็นเรื่องที่ไม่ถูกต้อง เพราะเราต้องไปอ่าน ใน Policy ของทางกรมก่อน ที่  (นโยบายเว็บไซต์ของกรมควบคุมโรค)


ในข้อที่ 3.3 ของหัวข้อหลัก สิทธิ หน้าที่และความรับผิดชอบของผู้ใช้บริการ


ผู้ใช้บริการจะไม่เข้าใช้หรือพยายามเข้าใช้บริการหนึ่งบริการใดโดยวิธีอื่น รวมถึงการใช้ วิธีการอัตโนมัติ (การใช้สคริปต์) นอกจากช่องทางที่ กรมควบคุมโรค จัดเตรียมไว้ให้ เว้นแต่ผู้ใช้บริการจะได้รับอนุญาตจากกรมควบคุมโรค โดยชัดแจ้งให้ทำเช่นนั้นได้


จะเห็นว่าทางเว็บไซต์ ไม่อนุญาตให้ทำการ Web Scraping ได้ แต่จะมีส่วนที่จัดเตรียมไว้ให้ ทั้งแบบเผยแพร่และแบบต้องขออนุญาตก่อน ที่ (สถานการณ์ผู้ติดเชื้อ Covid-19 อัพเดตรายวัน รูปแบบ API)

 

ดังนั้น เราจะมาใช้การทำ API Scraping แทนในข้อมูลชุดนี้

 

4.        สิ่งที่ต้องรู้ในการทำ Web Scraping


โครงสร้างของ HTML

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

 

<html>
    <head>
    <title>sklsongkist - พื้นฐาน 5 ข้อที่ควรรู้ ในการทำ Web Scraping </title> </head>
    <body>
        <p id="author">sklsongkiat</p>
        <p id="subject">พื้นฐาน 5 ข้อที่ควรรู้ ในการทำ Web Scraping </p>
    </body>
</html>

 


JSON คืออะไร

      JSON หรือ Java Script Object Notation เป็น format string ในรูปแบบ Serialize จะมีลักษณะเหมือนกับ Dict ในภาษา Python จริงๆแล้วในทุกภาษาสามารถจัดการ JSON ได้ จะมีลักษณะเป็น Key และ Value ที่ขั้นกลางด้วย Semi colon ตามตัวอย่างด้านล่าง

 

{
     "title" : "พื้นฐาน 5 ข้อที่ควรรู้ ในการทำ Web Scraping ",
     "author" : "sklsongkiat",
     "topics" : [ "machine learning", "data engineer", "data science"]
 }


เครื่องมือและคำสั่งต่างๆ 


       ผู้เขียนจะขอกล่าวเฉพาะ ในภาษา Python เท่านั้น เพราะเหมาะกับการทำงานด้าน Data และมี library ที่รองรับการใช้งานอยู่แล้ว  ให้ผู้อ่านเปิดใช้งาน Jupyter Notebook แล้วติดตั้งใช้งานตามกันไปได้เลย


pip install beautifulsoup4

pip install requests

pip install html5lib


หลังจากติดตั้งเสร็จก็ทำการ Restart Kernel แล้วเขียน code ตามหัวข้อถัดไป


5.        Let’s do it มาลองทำกันเถอะ

 

มาลองทำ API Scraping แบบง่ายๆด้วย Python


    จากที่เกริ่นเอาไว้ในหัวข้อที่ 3 เรื่องการดึงข้อมูลจาก Web Service API ของ กรมควบคุมโรค โดยผู้เขียนจะขอยกตัวอย่าง เพียงดึงข้อมูลมาเท่านั้น

 

import requests, json
from bs4 import BeautifulSoup
 
base_url = "https://covid19.ddc.moph.go.th/api/Cases/today-cases-all"
 
deserialized = json.loads(requests.get(base_url).text)
print(deserialized)

 

ผลลัพท์ #

[{'txn_date': '2022-04-09', 'new_case': 25298, 'total_case': 3858346, 'new_case_excludeabroad': 25220, 'total_case_excludeabroad': 3835304, 'new_death': 98, 'total_death': 25975, 'new_recovered': 22003, 'total_recovered': 3580920, 'update_date': '2022-04-09 07:31:29'}]

 


มาลองทำ Web Scraping แบบง่ายๆด้วย Python

 

คราวนี้มาลองทำด้วย Web Scraping กันบ้าง ส่วนใหญ่วิธีนี้จะทำกับระบบที่ public อย่างพวกข้อมูลข่าว ผู้เขียนจึงเลือกดึงข้อมูลง่ายอย่าง title ของเว็บไซต์ BBC

 

html = requests.get("https://www.bbc.co.uk/news").text
soup = BeautifulSoup(html, 'html5lib')
title = soup.head.title
 
print(title) ผลลัพท์ #  <title>Home - BBC News</title>
 
text = soup.head.title.text
 
print(text) ผลลัพท์ #  ‘Home - BBC News
 
split_text = soup.head.title.text.split()

 

print(split_text) ผลลัพท์ #  ['Home', '-', 'BBC', 'News']  จะอยู่ในรูปของ Array

 

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

แวะมาทักทายกันได้
donate