之前偶然发现了这样一个页面,
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 串不应该这样吧
请教一下各位,这种情况应该怎么处理,怎么样才能获取到正常的结果
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.