Python HTMLParser中有關轉義字符的Problem&Solution

此文僅僅是記錄了一個real project中出現的problem和個人unofficial solution,for reference only.

HTMLParser在使用中出現的一個Problem

在Python爬蟲等項目中咱們經常會遇到從HTML文件中提取信息的場景,比較通用的方案是使用HTMLParser模塊將HTML的標籤與內容分離,進而解析內容。html

在個人實際使用中,HTMLParser解析過程當中會捨棄Unicode轉義字符的中文Unicode(&#xxxxx),爲此我不得不在HTMLParser處理HTML內容前事先使用HTMLParser().unescape()來將內容中的Unicode轉換爲UTF-8(without DOM),從而使中文可以被解析。
此嘗試的方法又引起了一個更嚴重的BUG,在解析過程當中,因爲我對內容中的尖括號進行了提早轉義,形成了標籤混亂,影響了HTMLParser的解析,因此須要作一些改進。python

Solution

在使用Unicode to UTF-8轉義前應該逐行使用AngleBracketsDisplacement來替換'<'和 '>'code

def AngleBracketsDisplacement(unsecure_str):
    secure_str = unsecure_str.replace('&lt;', 'LEFT_ANGELBRACEKET')
    secure_str = secure_str.replace('&gt;', 'RIGHT_ANGELBRACEKET')
    return secure_str

在完成HTML標籤解析後應該逐行使用AngleBracketsReduction來還原'<'和 '>'htm

def AngleBracketsReduction(secure_str):
    unsecure_str = secure_str.replace('LEFT_ANGELBRACEKET', '<')
    unsecure_str = unsecure_str.replace('RIGHT_ANGELBRACEKET', '>')
    return unsecure_str
相關文章
相關標籤/搜索