在Python爬蟲等項目中咱們經常會遇到從HTML文件中提取信息的場景,比較通用的方案是使用HTMLParser模塊將HTML的標籤與內容分離,進而解析內容。html
在個人實際使用中,HTMLParser解析過程當中會捨棄Unicode轉義字符的中文Unicode(&#xxxxx),爲此我不得不在HTMLParser處理HTML內容前事先使用HTMLParser().unescape()來將內容中的Unicode轉換爲UTF-8(without DOM),從而使中文可以被解析。
此嘗試的方法又引起了一個更嚴重的BUG,在解析過程當中,因爲我對內容中的尖括號進行了提早轉義,形成了標籤混亂,影響了HTMLParser的解析,因此須要作一些改進。python
在使用Unicode to UTF-8轉義前應該逐行使用AngleBracketsDisplacement來替換'<'和 '>'code
def AngleBracketsDisplacement(unsecure_str): secure_str = unsecure_str.replace('<', 'LEFT_ANGELBRACEKET') secure_str = secure_str.replace('>', '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