开发者社区> 问答> 正文

用json解析 urllib2.urlopen返回的对象一直出错(已解决)? 400 报错

用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



展开
收起
爱吃鱼的程序员 2020-06-04 13:15:20 704 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    这种问题你只要查阅一下相关的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>> 所以不太明白为什么。
    2020-06-04 14:23:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像