Python HTMLParser中有关转义字符的Problem&Solution

此文仅仅是记录了一个real project中出现的problem和我的unofficial solution,for reference only.

HTMLParser在使用中出现的一个Problem

在Python爬虫等项目中我们常常会遇到从HTML文件中提取信息的场景,比较通用的方案是使用HTMLParser模块将HTML的标签与内容分离,进而解析内容。

在我的实际使用中,HTMLParser解析过程中会舍弃Unicode转义字符的中文Unicode(&#xxxxx),为此我不得不在HTMLParser处理HTML内容前事先使用HTMLParser().unescape()来将内容中的Unicode转换为UTF-8(without DOM),从而使中文能够被解析。
此尝试的方法又引发了一个更严重的BUG,在解析过程中,由于我对内容中的尖括号进行了提前转义,造成了标签混乱,影响了HTMLParser的解析,所以需要做一些改进。

Solution

在使用Unicode to UTF-8转义前应该逐行使用AngleBracketsDisplacement来替换'<'和 '>'

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来还原'<'和 '>'

def AngleBracketsReduction(secure_str):
    unsecure_str = secure_str.replace('LEFT_ANGELBRACEKET', '<')
    unsecure_str = unsecure_str.replace('RIGHT_ANGELBRACEKET', '>')
    return unsecure_str

转载于:https://www.cnblogs.com/c4isr/p/6295981.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值