如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?

正則表達(dá)式可用于提取html中的特定內(nèi)容,但并非最佳工具,推薦使用beautifulsoup等庫。1. 提取標(biāo)簽內(nèi)文本可用類似

(.*?)的正則,捕獲組提取所需內(nèi)容;2. 提取屬性值如圖片src可用如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?,并可通過src=([‘”])(.*?)1兼容單雙引號;3. 匹配帶特定類名的標(biāo)簽內(nèi)容如

可用

([ss]*?)

,但嵌套結(jié)構(gòu)可能導(dǎo)致匹配失敗;建議測試時(shí)用真實(shí)數(shù)據(jù)、多用非貪婪模式,并在復(fù)雜結(jié)構(gòu)中優(yōu)先選用html解析庫以避免問題。

如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?

在處理網(wǎng)頁數(shù)據(jù)時(shí),提取HTML中的特定內(nèi)容是很常見的需求。正則表達(dá)式(Regex)雖然不是解析HTML的最佳工具(推薦用BeautifulSoup或類似庫),但在簡單場景下,它仍然是一種快速有效的方法。

如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?

匹配標(biāo)簽內(nèi)的文本內(nèi)容

如果你只想提取某個(gè)標(biāo)簽之間的文本,比如

標(biāo)簽里的標(biāo)題,可以用如下正則:<img decoding="async" title="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?" alt="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?" src="https://img.php.cn/upload/article/001/503/042/175118676691000.png" alt="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?"></p> <div style="position:relative; padding:0px; margin:0px;"> <pre><title.*?>(.*?)</title></pre> <div></div> </div> <p>這個(gè)表達(dá)式的意思是:</p> <p><span>立即學(xué)習(xí)</span>“<a href="http://www.babyishan.com/?golink=aHR0cHM6Ly9wYW4ucXVhcmsuY24vcy9jYjY4MzVkYzdkYjE=" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免費(fèi)學(xué)習(xí)筆記(深入)</a>”;</p> <ul> <li>.*? 表示非貪婪匹配任意字符</li> <li>(.*?) 是一個(gè)捕獲組,用來提取你真正想要的內(nèi)容</li> </ul> <p>例如,面對這段HTML:</p> <p> <img decoding="async" title="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?" alt="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?" src="https://img.php.cn/upload/article/001/503/042/175118676782924.png" alt="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?"></p> <div style="position:relative; padding:0px; margin:0px;"> <pre><title>這是要提取的網(wǎng)頁標(biāo)題</title></pre> <div></div> </div> <p>正則會(huì)提取出“這是要提取的網(wǎng)頁標(biāo)題”。</p> <p>??注意:如果頁面中有多處</p> <p> <title>標(biāo)簽或者結(jié)構(gòu)復(fù)雜,可能會(huì)出現(xiàn)誤匹配,這時(shí)候需要結(jié)合上下文或其他方式輔助判斷。</p> <h2>提取指定屬性的值</h2> <p>有時(shí)候你需要從HTML標(biāo)簽中提取某個(gè)屬性的值,比如所有圖片的src:</p> <div style="position:relative; padding:0px; margin:0px;"> <pre>@@##@@</pre> <div></div> </div> <p>這樣就能從下面這樣的HTML中提取出圖片地址:</p> <div style="position:relative; padding:0px; margin:0px;"> <pre>@@##@@</pre> <div></div> </div> <p>結(jié)果就是 /images/logo.png</p> <p>?技巧:</p> <ul> <li>如果不確定引號類型,可以使用src=([‘”])(.*?)1來兼容單引號和雙引號</li> <li>注意轉(zhuǎn)義字符,比如在<a href="http://www.babyishan.com/tag/python"><b>python</b></a>中要用原始<a href="http://www.babyishan.com/tag/%e5%ad%97%e7%ac%a6%e4%b8%b2"><b>字符串</b></a>r”避免反斜杠被轉(zhuǎn)義</li> </ul> <h2>匹配帶特定類名的標(biāo)簽內(nèi)容</h2> <p>想提取某個(gè)<a href="http://www.babyishan.com/tag/class"><b>class</b></a>下的內(nèi)容?比如</p> <div>…</div> <p>中的整個(gè)塊:</p> <div style="position:relative; padding:0px; margin:0px;"> <pre><div class="content".*?>([sS]*?)</div></pre> <div></div> </div> <p>這里用了[sS]*?來匹配包括換行在內(nèi)的所有字符。</p> <p>??風(fēng)險(xiǎn)提示:</p> <ul> <li>HTML嵌套結(jié)構(gòu)容易讓這種正則失效,比如內(nèi)部還有多個(gè)</li> <li>更穩(wěn)妥的方式是使用HTML解析器,避免“標(biāo)簽沒閉合”、“屬性順序變化”等問題</li> </ul> <h2>一些實(shí)用建議</h2> <ul> <li>測試正則時(shí)盡量用真實(shí)的數(shù)據(jù)樣本,別只看理想情況</li> <li>多用非貪婪模式(.*?),否則很容易匹配過多內(nèi)容</li> <li>遇到復(fù)雜HTML結(jié)構(gòu)時(shí),優(yōu)先考慮專門的解析庫,而不是硬著頭皮寫正則</li> <li>正則只是工具之一,不適用于所有HTML解析場景</li> </ul> <p>基本上就這些。正則提取HTML內(nèi)容不復(fù)雜,但細(xì)節(jié)容易出錯(cuò),多測試、多觀察匹配結(jié)果才是關(guān)鍵。</p> <p> <img . alt="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?" ><img decoding="async" title="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?" alt="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?" src="https://www.php.cn/images/logo.png" alt="如何使用正則表達(dá)式提取HTML中的特定內(nèi)容?"></img.>

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享