john2007 发表于 2013-2-7 14:55:14

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

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_0-9]*)(\s*=\s*'
    r'(\'[^\']*\'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~@]*))?') 
attrfind 没有匹配中文字符。
 
解决办法:
修改attrfind:

attrfind = re.compile(
    ur'\s*([-.:a-zA-Z_0-9]*)(\s*=\s*'
    ur'(\'[^\']*\'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~@\u4e00-\u9fa5]*))?')
 
然后案例测试如下:
 
htmldata="""<img alt=周润发 src="/html"/>""".decode("utf8")
 
没有错误。
 
 
页: [1]
查看完整版本: htmlparser 解析html标签中文属性且未加标签 bug解决办法