0%

day4_beautifulsoup 找特定字元

在使用beautifulsoup過程中,遇到亂數生成classid
而又想要搜尋特定element時,採取兩種文字搜尋策略:

  1. re 的正規表示式尋找法
  2. find_all 再過濾文字內容法。

0. 測試環境

python 3.9.2 64bit
bs4 0.0.1

1. 測試程式

都是搜尋Google股票頁面,使用以下兩種方法:

re方案

print(soup.find_all('h2',text=re.compile('財經資訊搜尋結果')))

if方案

print([h2 for h2 in soup.find_all('h2') if h2.text=="財經資訊搜尋結果"])

2. 兩種結果比較

re方案

[<h2 class="Uo8X3b OhScic zsYMMe">財經資訊搜尋結果</h2>]
--- 0.7046294212341309 seconds ---

re方案多次測試整體程式時間不會超過1秒(求簡便,網路等待部分不計),符合正常操作需求。

if方案

[<h2 class="Uo8X3b OhScic zsYMMe">財經資訊搜尋結果</h2>]
--- 7.800491094589233 seconds ---

if方可能因與find_all重複做了相同的事,所以等於搜尋樹隨tag數量指數成長,造成平均搜尋秒數都到達3秒以上。

若後續有機會再碰到這個問題,再深入解析其中的技術細節。