报错的代码:
url= 'http://kaijiang.500.com/shtml/ssq/19001.shtml'
page =urllib.request.urlopen(url)
content = page.read().decode('gb2312')
报这个错的原因是获取到的网页内容是经过压缩了的,打开url可以看到请求head
Accept-Encoding:gzip, deflate
一种方式是请求时把Accept-Encoding设为空,这样的话网页数据未压缩,会相对比较大,增加网络传输时间
另一种方式就是对请求后的数据解压,显然这个方式处理会更快,如下
content = gzip.decompress(page.read()).decode('gb2312')
可是修改之后发现运行还是报错,这时候发现应该是因为网页中含有编码集之外的字符(网页内容指定charset是gb2312),就算加到更大范围还是报错(PS:汉字字符集范围 gb2312 < gbk < gb18030)
这时候选择忽略这些无法解码的字符
content = gzip.decompress(page.read()).decode('gb2312','ignore')
再运行代码,发现这个问题已经解决了
- UnicodeDecodeError 39 position multibyt 错误unicodedecodeerror multibyte 39 position unicodedecodeerror 39 position multibyt unicodedecodeerror byte 39 position unicodedecodeerror 39 position ordinal unicodedecodeerror 39 position invalid unicodedecodeerror unexpected 39 position character multibyte position illegal unicodedecodeerror continuation position invalid 39 unicodeencodeerror character multibyte multibyte字符dmpython 39