htmlparser 解析html标签中文属性且未加标签 bug解决办法

本文探讨了使用HTMLParser解析包含中文属性标签时遇到的问题及解决方案。通过调整正则表达式,使其能正确处理中文字符,解决了解析错误。提供了一个具体的案例测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bug:

利用HTMLParser解析 带有中文属性的标签,例如:"<img alt=周润发 src="/html"/>"

会出现如下错误:

 

raise HTMLParseError(message, self.getpos())

HTMLParser.HTMLParseError: junk characters in start tag: u'\u5468\u6da6\u53d1 src="/html"/>', at line 1, column 1

 

错误原因还是正则表达式惹的祸。

attrfind = re.compile(

    r'\s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(\s*=\s*'

    r'(\'[^\']*\'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~@]*))?') 

attrfind 没有匹配中文字符。

 

解决办法:

修改attrfind:

attrfind = re.compile(

    ur'\s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(\s*=\s*'

    ur'(\'[^\']*\'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~@\u4e00-\u9fa5]*))?')

 

然后案例测试如下:

 

htmldata="""<img alt=周润发 src="/html"/>""".decode("utf8")

 

没有错误。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值