python爬虫 - python爬取得网页的charset是gb2312

查看:490
本文介绍了python爬虫 - python爬取得网页的charset是gb2312的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

IDE默认用得是utf-8编码的
而爬取的网页是gb2312的
然后就出错了

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

html = response.decode('utf-8') # 我是把网页的内容decode成utf-8之后再用正则提取有用的内容

不decode,把网页的源码输出来是这样的:

b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed}\xe9wSW\x96\xefg\xb2V\xfe\x07\x95\xaa\xbb1il\xcd\x9e\x00\xf5\xcaTUy\x9d\xcaH\xba^w*\xcb\xebJ\xba\x96\xae\xad\xc9\xd2\x15\x1e\xe2\xfc\x0f\xef{\x7f\x02\\\x15\x12\x12b\xc0\xc666\x9e\x07y6x"d\xaa\x84\x86\x84\x04\x92\xd0$\x05!U\xb5\xde\xde\xe7\xdc#\xddQ\xba\xd7\x96@\xc9\n!F\xd6\xbd\xfb\x0c\xfb\xfc\xce\xde\xfb\xecs\xce\xde\x07\x7f\xf5\xd4\xf3O\x1e\xfe\xcf\x17\x9e\xb6E\xc4X\xd4\xf6\xc2+O<\xfb\xcc\x936{\xb5\xc3\xf1\x07\xcf\x93\x0e\xc7S\x87\x9f\xb2\xfd\xdf\xdf\x1d\xfe\xfd\xb36W\x8d\xd3v8\xc5\xc5\xd3\x82($\xe2\\\xd4\xe1x\xfa9\xbb\xcd\x1e\x11\xc5d\xa3\xc3\xd1\xde\xde^\xd3\xee\xa9I\xa4\xc2\x8e\xc3/9:\xb0,\x17\x12K\x1f\xabE\x19eMH\x0c\xd9\xfd\x8f>r\x90\xd4\xd8\x11\x8b\xc6\xd3\x87t\xcaq544Pr\xfa2\xcf\x85\...

请问怎么爬gb2312编码的网页才不会报错?或者怎么转换成utf-8?

解决方案

在bing了好久之后终于找到解决方案,怒答一波!

在某个网页看到这么一句话:大多数网站都对支持gzip压缩的浏览器做了gzip的压缩,在python中可以通过gzip包处理gzip压缩过的网页

所以问题就是内容有压缩过,直接decode不行,需要用gzip来解压。然后再decode。

import gzip
...
html = gzip.decompress(response)
        html = html.decode('gbk')

用gb2312不行,用gbk却可以,因为gbk包含gb2312,所以可以知道的是网页源码有超出gb2312编码范围的字符

这篇关于python爬虫 - python爬取得网页的charset是gb2312的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆