正則表達(dá)式可用于提取html中的特定內(nèi)容,但并非最佳工具,推薦使用beautifulsoup等庫。1. 提取標(biāo)簽內(nèi)文本可用類似
可用
,但嵌套結(jié)構(gòu)可能導(dǎo)致匹配失敗;建議測試時(shí)用真實(shí)數(shù)據(jù)、多用非貪婪模式,并在復(fù)雜結(jié)構(gòu)中優(yōu)先選用html解析庫以避免問題。
在處理網(wǎng)頁數(shù)據(jù)時(shí),提取HTML中的特定內(nèi)容是很常見的需求。正則表達(dá)式(Regex)雖然不是解析HTML的最佳工具(推薦用BeautifulSoup或類似庫),但在簡單場景下,它仍然是一種快速有效的方法。
匹配標(biāo)簽內(nèi)的文本內(nèi)容
如果你只想提取某個(gè)標(biāo)簽之間的文本,比如

<title.*?>(.*?)</title>
這個(gè)表達(dá)式的意思是:
立即學(xué)習(xí)“前端免費(fèi)學(xué)習(xí)筆記(深入)”;
- .*? 表示非貪婪匹配任意字符
- (.*?) 是一個(gè)捕獲組,用來提取你真正想要的內(nèi)容
例如,面對這段HTML:
<title>這是要提取的網(wǎng)頁標(biāo)題</title>
正則會(huì)提取出“這是要提取的網(wǎng)頁標(biāo)題”。
??注意:如果頁面中有多處
提取指定屬性的值
有時(shí)候你需要從HTML標(biāo)簽中提取某個(gè)屬性的值,比如所有圖片的src:
@@##@@
這樣就能從下面這樣的HTML中提取出圖片地址:
@@##@@
結(jié)果就是 /images/logo.png
?技巧:
匹配帶特定類名的標(biāo)簽內(nèi)容
想提取某個(gè)class下的內(nèi)容?比如
中的整個(gè)塊:
<div class="content".*?>([sS]*?)</div>
這里用了[sS]*?來匹配包括換行在內(nèi)的所有字符。
??風(fēng)險(xiǎn)提示:
- HTML嵌套結(jié)構(gòu)容易讓這種正則失效,比如內(nèi)部還有多個(gè)
- 更穩(wěn)妥的方式是使用HTML解析器,避免“標(biāo)簽沒閉合”、“屬性順序變化”等問題
一些實(shí)用建議
- 測試正則時(shí)盡量用真實(shí)的數(shù)據(jù)樣本,別只看理想情況
- 多用非貪婪模式(.*?),否則很容易匹配過多內(nèi)容
- 遇到復(fù)雜HTML結(jié)構(gòu)時(shí),優(yōu)先考慮專門的解析庫,而不是硬著頭皮寫正則
- 正則只是工具之一,不適用于所有HTML解析場景
基本上就這些。正則提取HTML內(nèi)容不復(fù)雜,但細(xì)節(jié)容易出錯(cuò),多測試、多觀察匹配結(jié)果才是關(guān)鍵。