【python爬虫笔记】‘utf-8‘ codec can‘t decode byte 0x99 in position 10: invalid start byte

用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界面就出现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值