Python中urlopen().read()获取的bytes串有问题吗?求大佬帮忙看看
之前偶然发现了这样一个页面,
http://www.angio.net/pi/
可以用来查找任意一串数字在圆周率小数点后两亿位中的具体位置,感觉还挺好玩的
然后我找到了它的请求接口
http://www.angio.net/newpi/piquery?q=666666666
如果在浏览器里直接输入上面的 url ,可以得到下面的 json
{"et":66874,"r":[{"k":"666666666","st":0,"status":"found","p":45681781,"db":"86731050497515079094","da":"71734856294979983444","c":1}],"status":"OK"}
这是正常的
但是如果使用下面代码获取:
url = 'http://www.angio.net/newpi/piquery?q=666666666'
#这里 headers 是完全复制了浏览器里的
req = urllib.request.Request(url, None, headers)
response = urllib.request.urlopen(req).read()
最终 response 的值为:
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03L\x8c1\x0e\xc20\x10\xc0\xfe\xe29C\x8e\r\xb9\xfb\x02\x03\x0f@\x0c\x85\xc2\x82\x04\x88\xb6S\xc5\xdfQ\x07$\xbcx\xb0\xe4\x95\xebL45)\x897q\\xb9\x13\xb4\x1f$\xa6\x99\xc8\x9b\x86y\x99\x08n\xcf\xe51\x92x\x11Z[\x17\xeb\x92\x18\xcf\x04\xbdY\x91\\xb3\xbaU\xa9\xd9<\xbb\x92\x18\x07\x02\x13+\xdak\xdb\xb9\xba\xb9\xf7\xa2\xba\xb5\x0b!\x9f\xd3\xdf\xfd\xb0\xe7\x0b\x00\x00\xff\xff\xaa\x05\x00\x00\x00\xff\xff\x03\x00B\xb8\x0e\x84\x95\x00\x00\x00'
此时如果对 response 执行 decode('utf-8')会报错。
仔细一看,这个 bytes 串好像不对劲,里面还有特殊符号,正常的 bytes 串不应该这样吧
请教一下各位,这种情况应该怎么处理,怎么样才能获取到正常的结果
Python中urlopen().read()获取的bytes串有问题吗?求大佬帮忙看看
回的 gzip 压缩过的没解压?
我无法理解你的问题
还真是这个原因,非常感谢!
又加了一句解压缩之后就正常了
gzip.decompress(response).decode(“utf-8”)
其实你没必要自己解压,可以先试试去掉 header 里 Accept-Encoding 的压缩选项,只保留 identity ,服务器应该就会回明文了。

