用requests爬取某音网页版的时候发生了错误,具体代码为:
resp=requests.get(url=start_url,headers=headers,cookies=cookies)
print(resp.content.decode('utf-8'))
结果报错
'utf-8' codec can't decode byte 0x99 in position 10: invalid start byte
打印一下resp.content,返回
b'e\x00\xe8\x84\x00@\xae\xa9\xe2\xb4\xfa\xb4\xf3\x94\x9eR.......'
以为是用的GBK编码,用浏览器查看了网页源代码,没有发现utf-8的字样,甚至charset标签都没有,换了gbk编码也不行,后来查资料发现有可能是网页被压缩了,因为发的request中有
'Accept-Encoding': 'gzip, deflate, br'
删除掉这行就没问题了。
但是我想python有没有可能解压缩呢,毕竟这个压缩比例还挺高的,压缩前有800k的页面,压缩有只有100k不到,然后我就去找压缩格式,具体是gzip还是deflate还是br呢,在response的headers中有一条
Content-Encoding: br
这不妥了吗,就是br的压缩方式,查询资料得在python中可以用brotli库解压,接下来就是愉快的安装导包环节
pip3 install Brotli
import brotli
data=brotli.decompress(resp.content)
print(data.decode('utf-8'))
结果又又又又又报错:
brotli.error: BrotliDecompress failed
直接打印一下resp.content
print(resp.content)
发现已经自动解码了,查询资料发现只要安装了brotli包,都不用import,requests就能自动帮你解压了,那么问题就简单了,直接
print(resp.content.decode('utf-8'))
熟悉的html界面就出现了