htmlparser 解析html标签中文属性且未加标签 bug..
时间:2010-05-06 来源:pikyshen
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")
没有错误。