2023-08-13|閱讀時間 ‧ 約 4 分鐘

【筆記】BeautifulSoup 4 實作:環境架設跟基本架構

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跟銀行美元兌台幣的價格,可以抓到價格的方法有三種:

  1. 打API,但這個需要看該網站有沒有開放API,如果沒有或是需要比較繁瑣的註冊的話,就會比較麻煩一點,好處是打API比較穩定,不會因為網站頁面改版需要重抓元素。
  2. 用Selenium webdriver無頭模式抓價格欄位的價格,但這種方式會需要啟動瀏覽器,即便是無頭瀏覽器還是會彈一下。
  3. 用BeautifulSoup爬,透過requests網站內容,再進行解析,獲取我們要的資訊,這個就是本篇要做的事情了。


首先我們要獲取網頁的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}")


結果:


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.