在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