之前记录了从网上翻来的Python HTMLParser处理HTML转义字符 文档。不过在对带有中文字符的内容进行处理的时候会报错,代码如下:
# cat html.py#/usr/bin/python#coding=utf-8import HTMLParserhtml_parser = HTMLParser.HTMLParser()title = 'eclipse功能<template>学习。e.g : 快速在代码中插入时间戳 - 361way.com'newtitle = html_parser.unescape(title)print newtitle
报错内容如下:
Traceback (most recent call last): File "html.py", line 7, in <module> newtitle = html_parser.unescape(title) File "/usr/lib64/python2.6/HTMLParser.py", line 390, in unescape return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|w{1,8}));", replaceEntities, s) File "/usr/lib64/python2.6/re.py", line 151, in sub return _compile(pattern, 0).sub(repl, string, count)UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)
解决方法如下:
#/usr/bin/python#coding=utf-8import HTMLParserimport sysreload(sys)sys.setdefaultencoding('utf-8')html_parser = HTMLParser.HTMLParser()title = 'eclipse功能<template>学习。e.g : 快速在代码中插入时间戳 - SegmentFault'newtitle = html_parser.unescape(title)print newtitle
需要载入sys模块,重新设置默认编码为utf8,就不会出错了。不过要处理的内容只不过是一个文章的title部分,而常用的html转义内容也就如下几个:
” " " & & & < < < > > > 不断开空格(non-breaking space)
注:不常用的具体可以参看开源中国在线工具上的html转义字符表。
于是决定使用python的replace功能实现一个简单的转义功能函数,具体如下:
#/usr/bin/python#coding=utf-8def replace_html(s): s = s.replace('"','"') s = s.replace('&','&') s = s.replace('<','<') s = s.replace('>','>') s = s.replace(' ',' ') s = s.replace(' - 361way.com','') print sreplace_html(title)
优点就是快速简洁,不依赖于模块,实用时也无需再reload sys模块指定默认编码。
原文地址:python实现html代码转义转换, 感谢原作者分享。 而其实你还爱着他,你一点也不好。