用json解析 urllib2.urlopen返回的对象一直出错(已解决)? 400 报错
环境:windows python2.7.5 django1.8.1
url = "https://www.baidu.com"; data = urllib2.urlopen(url)
json.load(data)
最近接手了一个项目。在本机搭环境时,涉及到上述代码的部分有问题。
用json解析 urllib2.urlopen返回的对象一直出错。
错误信息如图:
urllib2.urlopen返回的对象如图data:
因为系统本身是运行良好的,应该还是我本机环境有问题。。
几个疑问:
1.用urllib2.urlopen获取的类对象确实是可以用json.load解析的么?
urllib2.urlopen获取的对象能否用json.load解析取决于服务器返回的数据是否为正确的json格式,比如可以查看请求返回的content-type是否为application/json
2.网上有篇文章说是因为windows下编号格式为utf8带BOM,而python原生json模块无法解析。
那么urlopen获取的对象如何能进行去BOM操作呢?
或者,urlopen获取时能否直接指定编码为utf8去BOM呢?
BOM是文件存储时的用来识别编码格式的,特别是UTF-16编码时用来表示编码的字节序是big-endian还是little-endia。UTF-8本身是不需要BOM的。请求返回的编码由content-type中的charset指定,比如Content-Type:application/json; charset=utf-8
这种问题你只要查阅一下相关的api文档就能自己解决了。
urllib2.urlopen的作用是打开一个url(python3废弃了urllib2,将urllib与urllib2功能进行合并),返回值其实是http的响应body。因此不一定是json,要看你请求的目标是否会给你返回一个json,还是html?
你只要把这个响应打印出来就一目了然了,还用得着问吗?
######回复 @abingagl : 这不就自己发现问题了?######回复 @abingagl : 响应再调用read()就是html。 代码里直接对这个对象进行解析了。######环境是python27. 返回值是个对象,后续代码是要取返回的code,msg等信息。 直接print输出结果:<addinfourl at 76256840L whose fp = <socket._fileobject object at 0x000000000478DA98>> 所以不太明白为什么。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。