Python中HTML格式不規(guī)范的四種處理方法
在Python中處理HTML格式不規(guī)范的問題,可以通過以下方法實(shí)現(xiàn):
一、使用BeautifulSoup自動(dòng)修復(fù)
from bs4 import BeautifulSoup dirty_html = "<html><body><p>Hello<div>World</p></div></body>" # 使用html.parser自動(dòng)修復(fù) soup = BeautifulSoup(dirty_html, "html.parser") clean_html = soup.prettify() # 或使用html5lib(需安裝) # soup = BeautifulSoup(dirty_html, "html5lib") print(clean_html)
二、使用lxml庫修復(fù)
from lxml.html import fromstring, tostring parser = fromstring(dirty_html) clean_html = tostring(parser, pretty_print=True).decode()
三、專用清理庫
安裝:pip install html-sanitizer
from sanitizer import Sanitizer sanitizer = Sanitizer() clean_html = sanitizer.sanitize(dirty_html)
四、正則表達(dá)式輔助處理
import re # 修復(fù)未閉合的標(biāo)簽 clean_html = re.sub(r'<(?!area|base|br|col|embed|hr|img|input|link|meta|param)(([a-z][a-z0-9]*)\b[^>]*)(?<!/)>', r'<\1></\2>', dirty_html)
不同方案對(duì)比:
| 方法 | 優(yōu)點(diǎn) | 缺點(diǎn) |
|---|---|---|
| BeautifulSoup | 自動(dòng)修復(fù)結(jié)構(gòu),支持多種解析器 | 可能改變?cè)紭?biāo)簽順序 |
| lxml | 修復(fù)速度快,支持XHTML標(biāo)準(zhǔn) | 對(duì)嚴(yán)重錯(cuò)誤容忍度較低 |
| html-sanitizer | 可配置安全策略,防止XSS攻擊 | 需要明確配置允許的標(biāo)簽/屬性 |
| 正則表達(dá)式 | 輕量級(jí)快速修復(fù) | 無法處理復(fù)雜嵌套錯(cuò)誤 |
注意事項(xiàng):
- 優(yōu)先使用
html5lib解析器處理嚴(yán)重?fù)p壞的HTML - 處理XML命名空間時(shí)需使用
lxml的特殊配置 - 對(duì)保留的特殊字符(如
<在代碼片段中)需要額外處理 - 修復(fù)后建議使用W3C驗(yàn)證器檢查:https://validator.w3.org/
完整處理流程建議:
- 使用
html5lib解析原始內(nèi)容 - 通過
lxml進(jìn)行結(jié)構(gòu)優(yōu)化 - 使用
html-sanitizer進(jìn)行安全過濾 - 最后用
BeautifulSoup格式化輸出
對(duì)于包含混合內(nèi)容(如Markdown+HTML)的特殊情況,建議先進(jìn)行內(nèi)容分離處理,再分別應(yīng)用不同的修復(fù)策略。
到此這篇關(guān)于Python中HTML格式不規(guī)范的處理方法的文章就介紹到這了,更多相關(guān)Python HTML格式不規(guī)范內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python實(shí)現(xiàn)更改Word文檔的頁面大小
頁面大小確定文檔中每個(gè)頁面的尺寸和布局,有時(shí)我們會(huì)需要自定義頁面大小以滿足特定要求,下面我們就來看看如何使用Python實(shí)現(xiàn)這一效果吧2024-03-03
Python提取Word中圖片的實(shí)現(xiàn)步驟
本文主要介紹了Python提取Word中圖片的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Python轉(zhuǎn)換itertools.chain對(duì)象為數(shù)組的方法
這篇文章主要介紹了Python轉(zhuǎn)換itertools.chain對(duì)象為數(shù)組的方法,通過代碼給大家介紹了itertools 的 chain() 方法,需要的朋友可以參考下2020-02-02
教你一步步利用python實(shí)現(xiàn)貪吃蛇游戲
這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)貪吃蛇游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
python實(shí)現(xiàn)小世界網(wǎng)絡(luò)生成
今天小編就為大家分享一篇python實(shí)現(xiàn)小世界網(wǎng)絡(luò)生成,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
python中subprocess實(shí)例用法及知識(shí)點(diǎn)詳解
在本篇文章里小編給大家分享的是關(guān)于python中subprocess實(shí)例用法及知識(shí)點(diǎn)詳解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2021-10-10
django如何連接已存在數(shù)據(jù)的數(shù)據(jù)庫
這篇文章主要給大家介紹了關(guān)于django如何連接已存在數(shù)據(jù)的數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08

