专业在线电子书网站
10.3.2 问题2:非法字符抛出异常
当我们将某个字符串从GBK解码为Unicode的时候,可以采用:
str1.decode('GBK')
但是在实际进行网络爬虫的时候,可能会遇到如下异常:
UnicodeDecodeError:'GBK'codec can't decode byte in position 20146-20147:illegal multibyte sequence
出错的原因是有些网站的编码不规范,在一个页面里混入了多种编码,于是出现了非法字符。
例如,全角的空格往往有多种不同的实现方式,如\xa3\xa0、\xa4\x57,这些字符看起来像是全角空格,但是它们并不是真正的全角空格,真正的全角空格为\xa1\xa1,所以在解码的过程中就会出现异常。但是这样的问题很让人头疼,因为只要字符串中出现了一个非法字符,整个爬虫程序都有可能因此报错,进而停止运行。
解决方法很简单,可以采用ignore忽略这些非法字符:
str1.decode('GBK','ignore')
在decode方法中,decode的函数原型为decode([encoding],[errors='strict']),第二个变量为控制错误处理的方式,默认为strict,遇到非法字符时会抛出异常。
我们可以把第二个参数设置为其他变量,有以下3种方法:
(1)ignore,忽略其中的非法字符,仅显示有效字符。
(2)replace,使用符号代替非法字符,如'?'或'\ufffd'。
(3)xmlcharrefreplace,使用XML字符引用代替非法字符。
赞 (0)