รู้จักคร่าวๆ ของ ไอ้ Beautiful Soup 4
หลังจากที่ผู้เขียนได้เรียนคลาสแรกของคอร์ส 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/ กันนะครับ
สิ่งที่ต้องรู้
- Html เบื้องต้น ( จำพวก Tag class และอื่นๆ)
- การดู Source Code
- คำสั่งเบื้องต้น ของ 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 วิแล้ว ง่ายมั้ยครับ :)
วันนี้ก็ขอ ขอบคุณครับ :)