我正在访问一个网站,该网站通过URL接收文本数据,并为我提供可以加载的JSON数据。然而,我的文本非常长,所以我当前使用GET URI的代码会给我一个HTTP 414 URI太长的错误。
这是我当前的代码(这可以很好地处理少量的文本数据,但不能处理大量的文本数据(:
def get_json(url):
#get annotations
opener = urllib.request.build_opener()
opener.addheaders = [('Authorization', 'apikey token=' + API_KEY)]
return json.loads(opener.open(url).read())
text = "random text with a lot of words"
annotations = get_json("http://data.bioontology.org/annotator?text=" + urllib.parse.quote(text))
但是,我切换到请求模块,因为我需要使用POST URI来输入大量的文本数据。
这就是我尝试的代码w/requests模块的样子:
def get_annotations(text, url):
headers = {'Authorization': 'apikey token=' + API_KEY}
data = text
response = requests.request("POST",url,headers=headers,data=data)
return json.loads(response.read())
text = "random text with a lot of words"
annotations = get_json("http://data.bioontology.org/annotator?text=" + urllib.parse.quote(text))
问题是我不知道如何将从response = requests....
行得到的Response对象加载到JSON中。当我运行代码时,我得到一个"响应"对象没有属性"读取"错误,我无法找到修复它的方法。
更新更换return json.loads(response.text)
:时出错
File "annotatorConnections.py", line 17, in get_annotations
return json.loads(response.text)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
requests
响应对象具有属性.text
;尝试使用:
return json.loads(response.text)
代替:
return json.loads(response.read())