BeautifulSoup 4 是一個Python的模組,用來解析HTML和XML的文本,並將內容轉換成Python可作用的對象,我們以HTML為對象來獲取需要的資訊,先從頁面上的值抓起。
要使用Beautiful Soup 4,得先安裝套件,打開終端機:
pip install beautifulsoup4
安裝完畢後在編譯器上導入套件,多數情況下,會跟requests一起用:
from bs4 import BeautifulSoup
import requests
用requests從網站獲取網頁內容,再使用BeautifulSoup解析HTML的內容,就是俗稱的網路爬蟲,可以根據自身的需要解析一段數據或是整頁網頁的內容,至於可以解析哪些內容,這個就牽扯到HTML結構了,根據個人非常不完整且粗略的理解,大致上長下面這樣:
有一個分層的概念,會比較知道需要解析什麼內容。
身為一個數字貨幣交易所的員工,最常使用的數字貨幣就是USDT了,它是美元的穩定幣,跟美元匯率的掛鉤,於是想做一段程式知道各交易所的USDT/TWD跟銀行美元兌台幣的價格,可以抓到價格的方法有三種:
首先我們要獲取網頁的HTML內容:
# 台灣銀行牌告匯率網頁
url = "https://rate.bot.com.tw/xrt?Lang=zh-TW"
# 定義一個變數為response,它是使用requests套件的get函式,對指定的url發起請求。
response = requests.get(url)
# 將回應內容轉換為純文字
html_doc = response.text
透過BeautifulSoup解析:
soup = BeautifulSoup(html_doc, "html.parser")
BeautifulSoup的( )內:
第一格參數是放要解析的對象,可以是HTML字符串、存放在電腦中的HTML檔案以及網頁請求的回應內容,這裡我們填上html_doc。
第二格是填解析器,可填可不填,不填會使用標準函式庫預設的"html.parser",程式碼可以執行但會跳提示,所以還是填上吧。
除了"html.parser"這個解析方法以外,還有"lxml"跟"html5lib":
lxml,執行效率快的解析器,可以快速解析 HTML 和 XML 文本,如果要使用的話需要先安裝相應的函式庫。
pip install lxml
html5lib,可以處理不完整或是複雜的HTML,容錯率比較高,但速度比較慢,也需要安裝相應的函式庫。
pip install html5lib
接著我們透過解析出來的內容找到要的欄位:
#定義變數為element,它從解析好的文件中找符合字典中兩個屬性的td
element = soup.find("td", {"data-table": "本行即期賣出", "class": "rate-content-sight"})
提取出數字:
#從element中取得文字內容,並且字串化,透過strip去除空格、換行
number = element.text.strip()
接著把內容印出來:
#將{number}變數字串化
print(f"台灣銀行 的USD/TWD匯率:{number}")
結果: