รู้จักคร่าวๆ ของ ไอ้ Beautiful Soup 4

Mister Nay
2 min readDec 10, 2017

--

หลังจากที่ผู้เขียนได้เรียนคลาสแรกของคอร์ส Data-Science ได้เรียนรู้เกี่ยวกับเจ้า Beautiful Soup คร่าวๆ ก็จะนำมาแชร์นะครับ :)

Beautiful Soup คืออะไร?

Beautiful Soup คือ Python library สำหรับดึงข้อมูลหน้าเว็บ หรือ HTML

Beautiful Soup ทำอะไร?

Beautiful Soup เป็นตัว Parser ทำให้ง่ายและเร็วในการจัดการข้อมูลหน้าเว็บ (Html)

อ้างอิงค์ https://www.crummy.com/software/BeautifulSoup/bs4/doc/

มาเริ่มกันเลย

แรกเริ่ม ต้องลง

  • python 2.7 or python 3
  • Beautiful Soup 4

ขั้นตอนลง Python ขอ Skip นะครับ

Lib

  • pip install beautifulsoup4

เมื่อติดตั้งเสร็จ มาลุยกันเลย

เราจะลองเทส ดึงข้อมูลราคา BTC จาก เว็บ https://coins.co.th/ กันนะครับ

สิ่งที่ต้องรู้

  1. Html เบื้องต้น ( จำพวก Tag class และอื่นๆ)
  2. การดู Source Code
  3. คำสั่งเบื้องต้น ของ beautifulsoup

สามารถอ่าน Beautiful soup ได้ที่ https://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-the-tree

สำหรับวันนี้เราจะใช้

  • find_all(“Tag”, {“Key: “Value”}) EX. (“span”,{“class”:”detail-xxx”})
  • ส่วนอื่น สามารถดูเพิ่มจาก DOC

Coding

import requests
from bs4 import BeautifulSoup

r = requests.get("https://coins.co.th/")
soup = BeautifulSoup(r.content, "html.parser")
print(soup.test)

ก็จะได้ Source Code หน้า index.html ของ Coins

ถัดไปเราก็ต้องหา Tag ที่เป็น keyword ในการแสดงตัวเลข ราคา BTC นะครับ

ทำได้ง่ายๆคือ คลิกขวาที่ตัวเลข → ตรวจสอบ

เราก็จะได้ Tag ที่ต้องการ มาเขียนต่อกันเลย

import requests
from bs4 import BeautifulSoup

r = requests.get("https://coins.co.th/")
soup = BeautifulSoup(r.content, "html.parser")
data = soup.find_all("span", {"itemprop": "price"})
print(data)

ก็จะได้มาแล้ว เรามาจัดข้อมูลกันต่อ จะเห็นว่าข้อมูลมีสองตัวเราจะดึงค่า text ของทั้งสองนะครับ ปล. สามารถเขียนดึงได้หลายวิธีนะครับ

import requests
from bs4 import BeautifulSoup

r = requests.get("https://coins.co.th/")
soup = BeautifulSoup(r.content, "html.parser")
data = soup.find_all("span", {"itemprop": "price"})
for i in range(len(data)):
print(data[i].text)

แค่นี้เราก็ได้ ราคามาแล้วครับ

ง่ายๆใช่มั้ยล่าา :) สามารถศึกษาเพิ่มเติมได้ที่ DOC นะครับ

แถมๆ ถ้าเราต้องการแสดงแบบ Real-Time ทุกๆ 10 วิให้ดึง โดยเราจะ import time มาใช้ ในการ sleep นะครับ

import requests
from bs4 import BeautifulSoup
import time

def getPrice():
r = requests.get("https://coins.co.th/")
soup = BeautifulSoup(r.content, "html.parser")
data = soup.find_all("span", {"itemprop": "price"})
for i in range(len(data)):
print(data[i].text)
time.sleep(10)
getPrice()
getPrice()

แค่นี้เราก็จะได้ ราคาทุกๆ 10 วิแล้ว ง่ายมั้ยครับ :)

วันนี้ก็ขอ ขอบคุณครับ :)

--

--

Responses (3)