在使用beautifulsoup過程中,遇到亂數生成class、id
而又想要搜尋特定element時,採取兩種文字搜尋策略:
- re 的正規表示式尋找法
- 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>] |
re方案多次測試整體程式時間不會超過1秒(求簡便,網路等待部分不計),符合正常操作需求。
if方案
[<h2 class="Uo8X3b OhScic zsYMMe">財經資訊搜尋結果</h2>] |
if方可能因與find_all重複做了相同的事,所以等於搜尋樹隨tag數量指數成長,造成平均搜尋秒數都到達3秒以上。
若後續有機會再碰到這個問題,再深入解析其中的技術細節。