📉
Tutorials
  • Computer History
  • Function
    • Finance
      • Calculate
    • Manage Data
    • Date&Time
    • Strings and Character
  • Snippets
    • Web Application
      • Hugo
      • JavaScript
        • Stopwatch using JavaScript?
    • Note
    • Start Project
      • GitHub
      • GitLab
    • Python Programming
      • Strings and Character Data
      • List
      • Dictionaries
    • Data Science
      • Setting Option
      • Get Data
  • Link Center
    • Next Articles
    • Google
    • Excel VBA
    • Python
      • Notebook
    • WebApp
      • Vue.js
    • Finance
    • Project
      • Kids
        • Scratch
      • Finance
        • Plotly.js
        • Portfolio
      • Mini Lab
        • Systems Administration
        • Auto Adjust Image
      • Sending Emails
      • ECS
        • Knowledge Base
        • ระบบผู้เชี่ยวชาญ (Expert System)
        • Check product
        • Compare two SQL databases
      • e-Library
        • Knowledge base
        • การจัดหมวดหมู่ห้องสมุด
        • Temp
      • AppSheet
        • บัญชีรายรับรายจ่าย
      • Weather App
      • COVID-19
  • Tutorials
    • Data Science
      • Data Science IPython notebooks
    • UX & UI
      • 7 กฎการออกแบบ UI
    • Web Scraping
      • Scrape Wikipedia Articles
      • Quick Start
    • GUI
      • pysimple
        • Create a GUI
      • Tkinter
        • Python Tkinter Tutorial
      • PyQt
        • PyQt Tutorial
    • MachineLearning
      • การพัฒนา Chat Bot
      • AI ผู้ช่วยใหม่ในการทำ Customer Segmentation
      • Customer Segmentation
      • ตัดคำภาษาไทย ด้วย PyThaiNLP API
    • Excel & VBA
      • INDEX กับ MATCH
      • รวมสูตร Excel ปี 2020
      • How to Write Code in a Spreadsheet
    • Visualization
      • Bokeh
        • Part I: Getting Started
        • Data visualization
        • Plotting a Line Graph
        • Panel Document
        • Interactive Data Visualization
    • VueJS
      • VueJS - Quick Guide
    • Django
      • Customize the Django Admin
      • พัฒนาเว็บด้วย Django
    • Git
      • วิธีสร้าง SSH Key
      • Git คืออะไร
      • เริ่มต้นใช้งาน Git
      • การใช้งาน Git และ Github
      • รวม 10 คำสั่ง Git
      • GIT Push and Pull
    • Finance
      • Stock Analysis using Pandas (Series)
      • Building Investment AI for fintech
      • Resampling Time Series
      • Python for Finance (Series)
      • Stock Data Analysis (Second Edition)
      • Get Stock Data Using Python
      • Stock Price Trend Analysis
      • Calculate Stock Returns
      • Quantitative Trading
      • Backtrader for Backtesting
      • Binance Python API
      • Pine Script (TradingView)
      • Stocks Analysis with Pandas and Scikit-Learn
      • Yahoo Finance API
      • Sentiment Analysis
      • yfinance Library
      • Stock Data Analysis
      • YAHOO_FIN
      • Algorithmic Trading
    • JavaScript
      • Split a number
      • Callback Function
      • The Best JavaScript Examples
      • File and FileReader
      • JavaScript Tutorial
      • Build Reusable HTML Components
      • Developing JavaScript components
      • JavaScript - Quick Guide
      • JavaScript Style Guide()
      • Beginner's Handbook
      • Date Now
    • Frontend
      • HTML
        • File Path
      • Static Site Generators.
        • Creating a New Theme
    • Flask
      • Flask - Quick Guide
      • Flask Dashboards
        • Black Dashboard
        • Light Blue
        • Flask Dashboard Argon
      • Create Flask App
        • Creating First Application
        • Rendering Pages Using Jinja
      • Jinja Templates
        • Primer on Jinja Templating
        • Jinja Template Document
      • Learning Flask
        • Ep.1 Your first Flask app
        • Ep.2 Flask application structure
        • Ep.3 Serving HTML files
        • Ep.4 Serving static files
        • Ep.5 Jinja template inheritance
        • Ep.6 Jinja template design
        • Ep.7 Working with forms in Flask
        • Ep.8 Generating dynamic URLs in Flask
        • Ep.9 Working with JSON data
        • Ep.23 Deploying Flask to a VM
        • Ep.24 Flask and Docker
        • Ep. 25: uWSGI Introduction
        • Ep. 26 Flask before and after request
        • Ep. 27 uWSGI Decorators
        • Ep. 28 uWSGI Decorators
        • Ep. 29 Flask MethodView
        • Ep. 30 Application factory pattern
      • The Flask Mega-Tutorial
        • Chapter 2: Templates
      • Building Flask Apps
      • Practical Flask tutorial series
      • Compiling SCSS to CSS
      • Flask application structure
    • Database
      • READING FROM DATABASES
      • SQLite
        • Data Management
        • Fast subsets of large datasets
      • Pickle Module
        • How to Persist Objects
      • Python SQL Libraries
        • Create Python apps using SQL Server
    • Python
      • Python vs JavaScript
      • Python Pillow – Adjust Image
      • Python Library for Google Search
      • Python 3 - Quick Guide
      • Regular Expressions
        • Python Regular Expressions
        • Regular Expression (RegEx)
        • Validate ZIP Codes
        • Regular Expression Tutorial
      • Python Turtle
      • Python Beginner's Handbook
      • From Beginner to Pro
      • Standard Library
      • Datetime Tutorial
        • Manipulate Times, Dates, and Time Spans
      • Work With a PDF
      • geeksforgeeks.org
        • Python Tutorial
      • Class
      • Modules
        • Modules List
        • pickle Module
      • Working With Files
        • Open, Read, Append, and Other File Handling
        • File Manipulation
        • Reading & Writing to text files
      • Virtual Environments
        • Virtual Environments made easy
        • Virtual Environmen
        • A Primer
        • for Beginners
      • Functions
        • Function Guide
        • Inner Functions
      • Learning Python
        • Pt. 4 Python Strings
        • Pt. 3 Python Variables
      • Zip Function
      • Iterators
      • Try and Except
        • Exceptions: Introduction
        • Exceptions Handling
        • try and excep
        • Errors and Exceptions
        • Errors & Exceptions
      • Control Flow
      • Lambda Functions
        • Lambda Expression คืออะไร
        • map() Function
      • Date and Time
        • Python datetime()
        • Get Current Date and Time
        • datetime in Python
      • Awesome Python
      • Dictionary
        • Dictionary Comprehension
        • ALL ABOUT DICTIONARIES
        • DefaultDict Type for Handling Missing Keys
        • The Definitive Guide
        • Why Functions Modify Lists and Dictionaries
      • Python Structures
      • Variable & Data Types
      • List
        • Lists Explained
        • List Comprehensions
          • Python List Comprehension
          • List Comprehensions in 5-minutes
          • List Comprehension
        • Python List
      • String
        • Strings and Character Data
        • Splitting, Concatenating, and Joining Strings
      • String Formatting
        • Improved String Formatting Syntax
        • String Formatting Best Practices
        • Remove Space
        • Add Spaces
      • Important basic syntax
      • List all the packages
      • comment
    • Pandas
      • Tutorial (GeeksforGeeks)
      • 10 minutes to pandas
      • Options and settings
      • เริ่มต้น Set Up Kaggle.com
      • Pandas - Quick Guide
      • Cookbook
      • NumPy
        • NumPy Package for Scientific
      • IO tools (text, CSV, …)
      • pandas.concat
      • Excel & Google Sheets
        • A Guide to Excel
        • Quickstart to the Google Sheets
        • Python Excel Tutorial: The Definitive Guide
      • Working With Text Data
        • Quickstart
      • API Reference
      • Groupby
      • DateTime Methods
      • DataFrame
      • sort_values()
      • Pundit: Accessing Data in DataFrames
      • datatable
        • DataFrame: to_json()
        • pydatatable
      • Read and Write Files
      • Data Analysis with Pandas
      • Pandas and Python: Top 10
      • 10 minutes to pandas
      • Getting Started with Pandas in Python
    • Markdown
      • Create Responsive HTML Emails
      • Using Markup Languages with Hugo
    • AngularJS
      • Learn AngularJS
    • CSS
      • The CSS Handbook
      • Box Shadow
      • Image Center
      • The CSS Handbook
      • The CSS Handbook
      • Loading Animation
      • CSS Grid Layout
      • Background Image Size
      • Flexbox
  • Series
    • จาวาสคริปต์เบื้องต้น
      • 1: รู้จักกับจาวาสคริปต์
  • Articles
    • Visualization
      • Dash
        • Introducing Dash
    • Finance
      • PyPortfolioOpt
      • Best Libraries for Finance
      • Detection of price support
      • Portfolio Optimization
      • Python Packages For Finance
    • Django
      • เริ่มต้น Django RestFramework
    • General
      • Heroku คืออะไร
      • How to Crack Passwords
    • Notebook
      • IPython Documentation
      • Importing Notebooks
      • Google Colab for Data Analytics
      • Creating Interactive Dashboards
      • The Definitive Guide
      • A gallery of interesting Jupyter Notebooks
      • Advanced Jupyter Notebooks
      • Converting HTML to Notebook
    • Pandas
      • Pandas_UI
      • Pandas Style API
      • Difference Between two Dataframes
      • 19 Essential Snippets in Pandas
      • Time Series Analysis
      • Selecting Columns in a DataFrame
      • Cleaning Up Currency Data
      • Combine Multiple Excel Worksheets
      • Stylin’ with Pandas
      • Pythonic Data Cleaning
      • Make Excel Faster
      • Reading Excel (xlsx) Files
      • How to use iloc and loc for Indexing
      • The Easiest Data Cleaning Method
    • Python
      • pip install package
      • Automating your daily tasks
      • Convert Speech to Text
      • Tutorial, Project Ideas, and Tips
      • Image Handling and Processing
        • Image Processing Part I
        • Image Processing Part II
        • Image tutorial
        • Image Processing with Numpy
        • Converts PIL Image to Numpy Array
      • Convert Dictionary To JSON
      • JSON Dump
      • Speech-to-Text Model
      • Convert Text to Speech
      • Tips & Tricks
        • Fundamentals for Data Science
        • Best Python Code Examples
        • Top 50 Tips & Tricks
        • 11 Beginner Tips
        • 10 Tips & Tricks
      • Password hashing
      • psutil
      • Lambda Expressions
    • Web Scraping
      • Web Scraping using Python
      • Build a Web Scraper
      • Web Scraping for beginner
      • Beautiful Soup
      • Scrape Websites
      • Python Web Scraping
        • Web Scraping Part 1
        • Web Scraping Part 2
        • Web Scraping Part 3
        • Web Scraping Part 4
      • Web Scraper
    • Frontend
      • Book Online with GitBook
      • Progressive Web App คืออะไร
      • self-host a Hugo web app
  • Examples
    • Django
      • Build a Portfolio App
      • SchoolManagement
    • Flask
      • Flask Stock Visualizer
      • Flask by Example
      • Building Flask Apps
      • Flask 101
    • OpenCV
      • Build a Celebrity Look-Alike
      • Face Detection-OpenCV
    • Python
      • Make Game FLASH CARD
      • Sending emails using Google
      • ตรวจหาภาพซ้ำด้วย Perceptual hashing
        • Sending Emails in Python
      • Deck of Cards
      • Extract Wikipedia Data
      • Convert Python File to EXE
      • Business Machine Learning
      • python-business-analytics
      • Simple Blackjack Game
      • Python Turtle Clock
      • Countdown
      • 3D Animation : Moon Phases
      • Defragmentation Algorithm
      • PDF File
        • จัดการข้อความ และรูป จากไฟล์ PDF ด้วย PDFBox
      • Reading and Generating QR codes
      • Generating Password
        • generate one-time password (OTP)
        • Random Password Generator
        • Generating Strong Password
      • PyQt: Building Calculator
      • List Files in a Directory
      • [Project] qID – โปรแกรมแต่งรูปง่ายๆ เพื่อการอัพลงเว็บ
      • Python and Google Docs to Build Books
      • Tools for Record Linking
      • Create Responsive HTML Email
      • psutil()
      • Transfer Learning for Deep Learning
      • ดึงข้อมูลคุณภาพอากาศประเทศไทย
        • Image Classification
    • Web Scraper
      • Scrape Wikipedia Articles
        • Untitled
      • How Scrape Websites with Python 3
    • Finance
      • Algorithmic Trading for Beginners
      • Parse TradingView Stock
      • Creating a stock price database with MariaDB and python
      • Source Code
        • stocks-list
      • Visualizing with D3
      • Real Time Stock in Excel using Python
      • Create Stock Quote Module
      • The Magic Formula Lost Its Sparkle?
      • Stock Market Analysis
      • Stock Portfolio Analyses Part 1
      • Stock Portfolio Analyses Part 2
      • Build A Dashboard In Python
      • Stock Market Predictions with LSTM
      • Trading example
      • Algorithmic Trading Strategies
      • DOWNLOAD FUNDAMENTALS DATA
      • Algorithmic Trading
      • numfin
      • Financial Machine Learning
      • Algorithm To Predict Stock Direction
      • Interactive Brokers API Code
      • The (Artificially) Intelligent Investor
      • Create Auto-Updating Excel of Stock Market
      • Stock Market Predictions
      • Automate Your Stock Portfolio
      • create an analytics dashboard
      • Bitcoin Price Notifications
      • Portfolio Management
    • WebApp
      • CSS
        • The Best CSS Examples
      • JavaScript
        • Memory Game
      • School Clock
      • Frontend Tutorials & Example
      • Side Menu Bar with sub-menu
      • Create Simple CPU Monitor App
      • Vue.js building a converter app
      • jQuery
        • The Best jQuery Examples
      • Image Slideshow
      • Handle Timezones
      • Text to Speech with Javascript
      • Building Blog for Your Portfolio
      • Responsive Website Layout
      • Maths Homework Generator
  • Books
    • Finance
      • Python for Finance (O'Reilly)
    • Website
      • Hugo
        • Go Bootcamp
        • Hugo in Action.
          • About this MEAP
          • Welcome
          • 1. The JAM stack with Hugo
          • 2. Live in 30 minutes
          • 3. Using Markup for content
          • 4. Content Management with Hugo
          • 5. Custom Pages and Customized Content
          • 6. Structuring web pages
          • A Appendix A.
          • B Appendix B.
          • C Appendix C.
    • Python
      • ภาษาไพธอนเบื้องต้น
      • Python Cheatsheet
        • Python Cheatsheet
      • Beginning Python
      • IPython Cookbook
      • The Quick Python Book
        • Case study
        • Part 1. Starting out
          • 1. About Python
          • 2. Getting started
          • 3. The Quick Python overview
        • Part 2. The essentials
          • 14. Exceptions
          • 13. Reading and writing files
          • 12. Using the filesystem
          • 11. Python programs
          • 10. Modules and scoping rules
          • 9. Functions
          • 8. Control flow
          • 4. The absolute basics
          • 5. Lists, tuples, and sets
          • 6. Strings
          • 7. Dictionaries
        • Part 3. Advanced language features
          • 19. Using Python libraries
          • 18. Packages
          • 17. Data types as objects
          • 16. Regular expressions
          • 15. Classes and OOP
        • Part 4. Working with data
          • Appendix B. Exercise answers
          • Appendix A. Python’s documentation
          • 24. Exploring data
          • 23. Saving data
          • 20. Basic file wrangling
          • 21. Processing data files
          • 22. Data over the network
      • The Hitchhiker’s Guide to Python
      • A Whirlwind Tour of Python
        • 9. Defining Functions
      • Automate the Boring Stuff
        • 4. Lists
        • 5. Dictionaries
        • 12. Web Scraping
        • 13. Excel
        • 14. Google Sheets
        • 15. PDF and Word
        • 16. CSV and JSON
    • IPython
    • Pandas
      • จัดการข้อมูลด้วย pandas เบื้องต้น
      • Pandas Tutorial
  • Link Center
    • Temp
  • เทควันโด
    • รวมเทคนิค
    • Help and Documentation
  • Image
    • Logistics
Powered by GitBook
On this page

Was this helpful?

  1. Articles
  2. Web Scraping

Web Scraping for beginner

PreviousBuild a Web ScraperNextBeautiful Soup

Last updated 5 years ago

Was this helpful?

Web Scraping ฉบับคนไม่รู้ด้านนี้เลยก็สามารถทำได้ by Botnoi student

ในบทความนี้ผมจะพูดถึงการทำ Web Scraping ซึ่งเป็นวิธีการดึงข้อมูลจาก web page ต่างๆ เพื่อนำไปใช้ประโยชน์ตามที่เราต้องการ โดยจะใช้ Library BeautifulSoup ใน Python ครับ

บทความที่ผมจะมาแชร์ในวันนี้เป็นบางส่วนใน Botnoi data science classroom เป็นคลาสที่เปิดสอนสำหรับคนที่สนใจด้าน Data Science ครับ ซึ่ง web scraping เกี่ยวข้องกับด้านงานด้าน data ได้อย่างไร และจำเป็นมากแค่ไหนที่จะต้องรู้ ?

ดังที่ทราบกันว่าแหล่งข้อมูล (Data source) ที่ใหญ่ที่สุดคือ internet นั้นเองแล้วเราจะเข้าถึงข้อมูลที่มีอยู่ในนั้นได้อย่างไรล่ะ ก็โดย web scraping นั้นไง ซึ่งจะทำการสกัดและดึงข้อมูลจากแหล่งข้อมูล (ในที่นี้คือเว็บไซต์) เพื่อนำข้อมูลออกมาใช้ ดังเช่นว่า data scientist สามาถสร้าง model เพื่อเทรนหุ้น จากการดึงข้อมูลข่าวจากเว็บข่าวทั่วไป หรือ data analyst ทำการดึงข้อมูลร้านอาหารที่เปิดใหม่ล่าสุดในเขตกรุงเทพและปริมณฑลใน Wongnai มาทำการวิเคราะห์เพื่อจะใช้ประโยชน์ในด้านธุรกิจเป็นการต่อไป ขึ้นอยู่กับว่าเราจะนำข้อมูลที่ได้มานั้นไปใช้อย่างไร ซึ่งการดึงข้อมูลนั้นไม่ยากเลยครับ เรามาลอง scrape website เพื่อดึงข้อมูลออกมาใช้กันในบทความนี้ครับSyncsort:

ETL (Extract, Transform and Load)

ก่อนอื่นเรามาทำความเข้าใจกับคำว่า web scraping กันก่อน web scraping นั้นเป็นการดึงข้อมูลจากหน้าเว็บ (web page) โดยวิเคราะห์จากลักษณะของภาษา HTML (Hyper Text Markup Language) ที่ใช้ในการแสดงผลบนอินเตอร์เน็ตในลักษณะของข้อความ รูปภาพ ต่างๆ โดยการจะดึงข้อมูลออกมาขั้นต้น เราควรที่จะเข้าใจข้อมูลพื้นฐานของ web ก่อน เพื่อทำให้รู้ว่าถ้าจะเราสนใจข้อมูลตรงนี้ในเว็บ เราต้องดูตรงจุดไหน จะได้ดึงข้อมูลนั้นออกมาครบถ้วนและถูกต้องครับ

เรามาทำความเข้าใจภาษา HTML เบื้องต้นกันก่อนแบบไม่ต้องเขียนกันครับ

โดยแต่ละส่วนประกอบหลักๆ จะมีชื่อเรียกดังนี้

Tag name ใช้ในการระบุรูปแบบคำสั่ง หรือการลงรหัสคำสั่ง ภายในเครื่องหมาย less-than bracket ( < ) และ greater-than bracket ( > ) โดยที่ Tag HTML แบ่งได้ 2 ลักษณะ คือ

  • Tag เดี่ยว เป็น Tag ที่ไม่ต้องมีการปิดรหัส เช่น <meta>, <link> เป็นต้น

  • Tag เปิด/ปิด รูปแบบของ tag นี้จะเป็นแบบ <title> …. </title> โดยที่ <title> เราเรียกว่า tag เปิด และ </title> เราเรียกว่า tag ปิด

ซึ่งเราจะใช้ tag เพื่อระบุตำแหน่งของข้อมูลที่ต้องการในการดึงข้อมูลออกมาครับ

Attribute คือ เป็นตัวบอกรายละเอียดของ tag นั้นเช่น <meta http-equiv=”Content type”> เป็นการบอกว่า meta นี้บรรจุ http อยู่ใน tag (http-equiv)

Value คือ ค่าของ Tag นั้น อย่างเช่น <meta http-equiv=”Content type”> มี Value คือ “Content-Type”

Nefted-element คือ Tag ย่อยที่ถูกบรรจุอยู่ อย่างในภาพ Tag ใหญ่ คือ <head>……</head> โดยมี Nefted-element คือ <meta> ,<title>…</title> และ <link>

Web-scraping ethics

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

Introduce Developer-Tools

หลังจากได้ตรวจเช็คแล้วเรามาทำความรู้จักกับ dev-tools กันครับ โดย dev-tools สามารถทำให้เราดูว่ามีอะไรบ้างอยุ่ในเว็บนั้นและคัดกรองว่าจะนำอะไรมาใช้ได้บ้างและต้องทำอย่างไรถึงจะนำออกมาใช้ได้ โดยวิธีใช้เครื่องมือนี้ไม่จำเป็นต้องติดตั้งโปรแกรม เพราะมีอยู่ใน Browser ที่ทุกท่านใช้อยุ่แล้ว อย่างผมใช้ Opera หรือ Chrome สามารถทำได้โดยกด Ctrl + Shift + I หรือ กด F12 หรือ Right click แล้วเลือก Inspect หรือจะกดที่มุมซ้ายบนได้เลยครับ

How to select element in HTML document : CSS Selector

เราจะมาเริ่มแตะ coding กันเลยนะครับ ภาษาที่เราจะใช้คือ Python โดยมี Library อยู่ที่เราใช้ในการ scrape web คือ BeautifulSoup , Selenium และ Scrapy ซึ่งจะมีข้อดีและข้อเสียที่แตกต่างกัน แต่ในบทความนี้ผมจะพูดถึงเฉพาะ BeautifulSoup เพราะค่อนข้างง่ายและเหมาะกับผู้เริ่มต้นครับ เรามาเริ่มต้น scraping ผ่าน library BeautifulSoup กันเลย

Scrapy vs Selenium vs BeautifulSoup:

ก่อนอื่นเราต้องดึง Library BeautifulSoup มาใช้ โดย BeautifulSoup เป็นตัวที่ใช้ในการจัดการข้อมูล ที่ได้จากการ request มาอีกที เพื่อให้ง่ายต่อการค้นหาและจัดการข้อมูลที่เราดึงมาจากในเว็บครับ

import bs4 ##ถ้ายังไม่มีก็สามารถลงได้โดย pip install bs4 

และเราก็ดึง Library request มาใช้ในการดึงเว็บที่เราสนใจ โดย requests จะใช้สำหรับการสร้างการเชื่อมต่อกับ HTTP หรือตัวหน้าเว็บเรานั้นเอง

import requests ##มี s ลงท้ายด้วย 
## ถ้ายังไม่มีก็สามารถลงได้โดย pip install requests

ทีนี้เราก็สามารถดึงข้อมูลจากเว็บที่เราสนใจได้แล้ว โดยใช้ requests.get(‘web link’)

r = requests.get(‘https://www.wongnai.com/restaurants/sushimasa’)

เรามาเช็คข้อมูลทั้งหมดที่มีอยู่ในหน้าเว็บนั้น

r.text

นี่คือสิ่งที่เราได้จากการ request ซึ่งก็คือ Source code ของเว็บเพจนั้นแหละครับ แต่มันจะแสดงผลโดยการนำมาต่อกันทั้งหมดเลย ซึ่งจะทำให้ดูยากมากๆ แต่มีคำสั่งมาช่วยทำให้ดูง่ายขึ้น

ต่อไปเราจะนำสิ่งที่เราได้มาแปลงเป็น type bs4.BeautifulSoup เพื่อให้เราสามารถใช้คำสั่งของ BeautifulSoup ในการจัดการและดึงข้อมูลออกมาได้ครับ

html_page = bs4.BeautifulSoup(r.text, ‘html.parser’)
print(html_page)
type(html_page)

โดยเราสามารถทำให้ source ดูได้ง่ายขึ้นไปอีกด้วย .prettify()

print(html_page.prettify())

จะเห็นได้ว่า การใช้คำสั่ง prettify() ทำให้ Source code ที่เราได้มาจะถูกจัดการให้อยู่ในรูปแบบที่ดูง่ายขึ้นมากๆ ซึ่งจะอยู่ในรูปแบบที่คล้ายกับการกด F12 ดูใน web page เลยครับ

เรามาเริ่มดึงข้อมูลกัน โดยจะใช้ CSS Selector ในการดึงข้อมูลออกมานะครับ

CSS Selector reference:

อย่างเช่นผมอยากจะดึง ประเภทราคาของร้านค้านี้ออกมา เราต้องเริ่มด้วยการไปดูก่อนว่าประเภทราคานั้นอยู่ส่วนไหนของเว็บนั้น และถูกบรรจุอยู่ในคลาสอะไร มาเริ่มกันเลยดีกว่าก่อนจะงง **อย่าลืม ethics ด้วยนะครับ อย่างใน Wongnai not allow เฉพาะ users ดังนั้นเราสามารถดึงข้อมูลในส่วนของประเภทราคาของร้านได้ครับ

ตรง span.sc-1ascgl-3.cbakhs คือ tag ของช่วงราคา ดังที่กล่าวไว้ข้างต้นว่า Tag name จะใช้ในการระบุรูปแบบคำสั่ง หรือการลงรหัสคำสั่ง โดยตรงนี้แหละครับที่จะใช้ css selectors ดึงออกมาเป็นข้อมูลที่เราต้องการ เรามา coding กันต่อครับ

selector = 'span._2qDKIyMmA-jMRyfxACZWt6'
price = html_page.select_one(selector)
price

โดยใน BeautifulSoup นั้นได้มี function ที่จะสกัดข้อมูลที่เราต้องการได้ทันที

price.text

แต่ถ้าเราใส่ข้อมูลผิดจะแสดงผลว่า None จากภาพด้านบนผมจงใจจะลบ 6 ใน class ออก พอมันหา ‘span._2qDKIyMmA-jMRyfxACZWt’ ในเว็บแต่หาไม่เจอในเว็บเพราะข้อมูลที่เราใส่ผิด ได้ผลที่ออกมาเป็น None

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

picture_selector = 'img.ogo0re-0.llQZZn.w0wgso-15.hgqWqI'
pic = html_page.select(picture_selector)
pic

จากที่ดึงมาจะมี 9 img tag ดังปรากฏภาพ 9 ภาพในหน้าเว็บนั้น แล้วเราจะใช้เครื่องมือของ BeautifulSoup ในการสกัดเอาลิงค์ออกมานะครับ

for image in pic:print(image[‘src’]) #src = source
ภาพตัวอย่างหน้า HTML Page

ถ้าสงสัยตรงไหนสามารถศึกษาเพิ่มเติมได้จากลิงค์นี้เลยครับ

โดยเราสามารถตรวจสอบข้อมูลที่เว็บนั้นสงวนไว้ ด้วยการเติม /robots.txt หลังที่อยู่เว็บไซต์ (address) นั้นเช่น อย่างจากภาพเป็นเว็บไซต์ Wongnai จากในเว็บแสดงถึง เราห้าม (Disallow) ดึงข้อมูล Users ออกมา

หรืออย่าง Lazada ได้ห้ามเราดึงข้อมูลหลายอย่าง เช่น cart (สินค้าในรถเข็น) หรือ shop microsoft
หน้าตาของ Developer tool

หน้าเว็บไซต์ที่เราสนใจ (ยิ่งทำไปเรื่อยๆยิ่งหิวเลยครับ 5555)
โดย type ของข้อมูลที่เราดึงมา จะเป็น bs4.BeautifulSoup

ก่อนอื่นเลยเราต้องเข้า dev-tools ก่อนแล้วทำการเลือก (ด้วยการนำ cursor เมาส์ไปคลิ้กตรงส่วนที่เราสนใจในหน้าเว็บนั้นได้เลย) ซึ่ง dev-tools จะระบุที่อยู่ของ tag ที่บรรจุข้อมูลนั้นมาให้เลย

กลับไปที่ web browser ของเรา จากนั้นคลิกที่ select element (วงกลมสีแดง) แล้วคลิกตรงช่วงราคา (ข้อมูลที่เราสนใจ)
ถ้า tag ที่เราได้มาเว้นด้วย spacebar เราจะแทนด้วย . ลงไปแทนนะครับ เช่น span. sc-1u6e7er-1 cvVMHV จะต้องใช้เป็น span. sc-1u6e7er-1.cvVMHV

มาอีก fuction นึง .select_one(selector) เป็นการระบุว่า tag span ใน class _2qDKIyMmA-jMRyfxACZWt6 จะเลือกออกมากี่ตัว โดยจะมีอยู่ 2 แบบคือ เลือกตัวเดียว(ตัวแรกที่พบ) .select_one() หรือจะดึงออกมาทุกตัวเลย .select()จากการ select จะได้เป็นอะไรยืดยาว แต่เราพอได้ข้อมูลที่เราสนใจคร่าวๆแล้วนั่นคือ >฿<! — →฿<! — →฿<

และ type ที่ได้จากการดึงข้อมูลออกมาจะเป็น bs4.element.Tag
tag ของภาพที่ผู้ใช้มารีวิว
จากที่ดึงมาจะมี 9 ดังปรากฏในหน้าเว็บนั้นนะครับ
เรียบร้อยครับ ได้ลิงค์ของแต่ละภาพมาแล้ว

เป็นไงบ้างครับ พอจะทำตามกันได้ไหมครับ ซึ่งเจ้า Web-scraping ที่ได้เรียนจาก data science school by Botnoi จะอยู่ในขอบเขต data extraction เป็นการดึงข้อมูลหรือรวบรวมข้อมูลจากที่ต่างๆก่อนที่จะนำมาใช้ในการต่อไป ซึ่งการที่เราเข้าใจในด้านนี้ได้มากขึ้น จะช่วยทำให้เวลาเราดึงข้อมูลออกมาข้อมูลที่ได้จะมีความ clean มากขึ้นและตรงกับความต้องการมากขึ้นครับ หวังว่าทุกคนจะเข้าใจนะครับไว้ถ้ายังไงในบทความต่อไปผมได้ตั้งโปรเจ็คไว้กับ โดยจะดึงข้อมูลช่วงราคาและตำแหน่งที่ตั้งของร้านอาหารในเขตกรุงเทพและปริมณฑลเพื่อจะนำมา visualize หาความหนาแน่นของร้านในช่วงราคาต่างๆ ฝากติดตามกันด้วยนะครับ

ขอบคุณพี่ก็อต และพี่วิน สำหรับคำแนะนำด้วยครับ

Reference :

https://www.hellomyweb.com/course/html/structure_of_html/
https://www.wongnai.com/robots.txt
https://towardsdatascience.com/scrapy-vs-selenium-vs-beautiful-soup-for-web-scraping-24008b6c87b8
https://www.w3schools.com/cssref/css_selectors.as
Tamagotchi
Tamagotchi
Dr. Winn Voravuthikunchai
https://medium.com/botnoi-classroom