六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 37|回复: 0

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

[复制链接]

升级  22.67%

22

主题

22

主题

22

主题

秀才

Rank: 2

积分
84
 楼主| 发表于 2013-2-7 14:55:14 | 显示全部楼层 |阅读模式
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")
 
没有错误。
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表