我正在尝试编写一个python脚本,它将每次接受一组url,并获取该url的响应内容,并将其存储为json文件。
下面是我最初为获得url的响应而写的
def download_json()
params={'id':00163E0BD0C1FA89,
'list':'141',
'queue': 'gen',
'type': 'abc_stat'
}
req_obj= requests.get(link, params=params)
print(req_obj.url)
print(req_obj.status_code)
return req_obj它创建正确的url,就像我在浏览器中直接复制url一样,它以json格式显示输出。下面是我在浏览器上看到的一行json输出:
{
"DATA" : [
{
"SCHEMA" : "abc_4_QAATu2.",
"ID" : "QAATu2",
"IM_ID" : "22faba86_c9e0_4dbc",
"S_NUMBER" : "502379284",
"CONFIG_TYPE" : "las_home_type",
"CONFIG_KEY" : "las_home_key",
"CONFIG_LONG_V" : "1",
"CONFIG_STRING_V" : "https://abc-deg/development",
"MODIFIED_DATE" : "Unknown"
},因此,这确实表明,当我在浏览器中直接输入url时,数据以json格式返回。
但是,我的请求对象对于头文件有如下内容:
Out26
{'content-length': '15457', 'expires': '0', 'content-encoding': 'gzip', 'cache-control': 'no-cache, no-store, private', 'set-cookie': 'login-XSRF_RZA=2018051-axJnifQUpOnrS8WCFI; path=/abc/deo/cpo; secure; HttpOnly, usercontext=client=002; path=/', 'content-type': 'text/html; charset=utf-8', 'pragma': 'no-cache, no-store, private'}现在,当我执行requests.json()来获取json对象中的数据时,我得到了以下错误
JSONDecodeError Traceback (most recent call last)
<ipython-input-28-4cfc1a694fcf> in <module>()
----> 1 req_obj.json()
/Users/anaconda/envs/dl/lib/python3.5/site-packages/requests/models.py in json(self, **kwargs)
890 # used.
891 pass
--> 892 return complexjson.loads(self.text, **kwargs)
893
894 @property
/Users/anaconda/envs/dl/lib/python3.5/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
317 parse_int is None and parse_float is None and
318 parse_constant is None and object_pairs_hook is None and not kw):
--> 319 return _default_decoder.decode(s)
320 if cls is None:
321 cls = JSONDecoder
/Users/anaconda/envs/dl/lib/python3.5/json/decoder.py in decode(self, s, _w)
337
338 """
--> 339 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
340 end = _w(s, end).end()
341 if end != len(s):
/Users/anaconda/envs/dl/lib/python3.5/json/decoder.py in raw_decode(self, s, idx)
355 obj, end = self.scan_once(s, idx)
356 except StopIteration as err:
--> 357 raise JSONDecodeError("Expecting value", s, err.value) from None
358 return obj, end
JSONDecodeError: Expecting value: line 2 column 1 (char 2)编辑:
如果您在上面的标题中看到,content_type将显示为html,即使在浏览器上它也显示json作为输出。
但是当我做的时候
req_obj.json
<bound method Response.json of <Response [200]>>但是req_obj.json()给出了以下错误。
知道当输出实际上是json格式时,为什么不能将数据转换成json格式,如上面所示?谢谢
发布于 2018-05-19 00:08:50
根据文档
如果JSON解码失败,
r.json()将引发异常。例如,如果响应获得204 (无内容),或者响应包含无效的JSON,则尝试r.json()引发ValueError: No JSON object could be decoded.
虽然它没有抛出相同的错误消息,但原因似乎是一样的:您可能没有得到JSON作为回答,这就解释了为什么JSONDecode会抛出异常。
您应该能够通过打印req_obj.text而不是使用req_obj.json()来确认这一点。
至于如何修复它,我怀疑在使用浏览器发出的请求和使用Python发出的请求(例如不同的参数)之间肯定有一些不同。
我建议您阅读这,以进一步调查问题的根源。
发布于 2018-05-19 00:13:39
根据这份文件:http://docs.python-requests.org/en/master/
您可以检查req_obj.status_code和r.headers['content-type']。如果status_code为200,内容类型为'application/json; charset=utf8',则可以尝试检查req_obj.json()。
https://stackoverflow.com/questions/50420451
复制相似问题