爬虫从网站上爬取的内容在读写操作时经常会报以下错误:
UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\u200b’ in position 7: illegal multibyte sequence
所以需要我们对数据Unicode进行清洗,排除文章内异常的Unicode符号。
清洗思路
我的思路是用正则表达式来匹配常用字,不在范围内的Unicode编码则去除。
.compile(u”[^常用字范围]+”)匹配到非范围内字符后,
.sub()方法将特殊字符替换成空
def illegal_char(s):
s = re \
.compile( \
u"[^"
u"\u4e00-\u9fa5"
u"\u0041-\u005A"
u"\u0061-\u007A"
u"\u0030-\u0039"
u"\u3002\uFF1F\uFF01\uFF0C\u3001\uFF1B\uFF1A\u300C\u300D\u300E\u300F\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\u3010\u3011\u2014\u2026\u2013\uFF0E\u300A\u300B\u3008\u3009"
u"\!\@\#\$\%\^\&\*\(\)\-\=\[\]\{\}\\\|\;\'\:\"\,\.\/\<\>\?\/\*\+"
u"]+") \
.sub('', s)
return s
Unicode范围
常用范围
名称 | 范围 |
---|---|
中文 | \u4e00-\u9fa5 |
日文平假名 | \u3040-\u309f |
日文片假名 | \u30a0-\u30ff |
韩文 | \uac00-\ud7ff |
英文字母 | \u0041-\u005A\u0061\u007A |
数字 | \u0030-\u0039 |
英文标点 | !\@#$\%\^\&*()-\=[]{}\\;\’:\”,.\/\<>\?\/*+ |