Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用堆栈交换API从堆栈溢出中检索答案时发生JSONDecodeError_Python_Json_Stackexchange Api - Fatal编程技术网

Python 使用堆栈交换API从堆栈溢出中检索答案时发生JSONDecodeError

Python 使用堆栈交换API从堆栈溢出中检索答案时发生JSONDecodeError,python,json,stackexchange-api,Python,Json,Stackexchange Api,我使用StackAPI提取与python相关的问题、答案和评论。我使用以下代码提取与Python相关的问题 from stackapi import StackAPI SITE = StackAPI('stackoverflow') questions = SITE.fetch('questions', tagged='python', fromdate=from_date, todate=today,filter='withbody') 然后,我从检索到的问题中提取question\u id

我使用StackAPI提取与python相关的问题、答案和评论。我使用以下代码提取与Python相关的问题

from stackapi import StackAPI
SITE = StackAPI('stackoverflow')
questions = SITE.fetch('questions', tagged='python', fromdate=from_date, todate=today,filter='withbody')
然后,我从检索到的问题中提取
question\u id
列表,以获得与检索到的问题相关的答案

quest_ids= []
for quest in questions['items']:
    quest_ids.insert(len(quest_ids),quest['question_id'])
所有与问题相关的ID都在
任务ID
中。现在,我使用
quest\u id
list通过以下代码检索这些问题的答案:

answers =SITE.fetch('questions/{ids}/answers',ids=quest_ids,filter='withbody')
但是,当我运行上述代码时,会出现以下错误:

JSONDecodeError                           Traceback (most recent call last) ~/anaconda3/lib/python3.6/site-packages/stackapi/stackapi.py in
fetch(self, endpoint, page, key, filter, **kwargs)
    189                 response.encoding = 'utf-8-sig'
--> 190                 response = response.json()
    191             except ValueError as e:

~/anaconda3/lib/python3.6/site-packages/requests/models.py in
json(self, **kwargs)
    896                     pass
--> 897         return complexjson.loads(self.text, **kwargs)
    898 

~/anaconda3/lib/python3.6/json/__init__.py in loads(s, encoding, cls,
object_hook, parse_float, parse_int, parse_constant,
object_pairs_hook, **kw)
    353             parse_constant is None and object_pairs_hook is None and not kw):
--> 354         return _default_decoder.decode(s)
    355     if cls is None:

~/anaconda3/lib/python3.6/json/decoder.py in decode(self, s, _w)
    338         """
--> 339         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    340         end = _w(s, end).end()

~/anaconda3/lib/python3.6/json/decoder.py in raw_decode(self, 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 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

StackAPIError                             Traceback (most recent call
last) <ipython-input-43-8d66d5fd3e65> in <module>()
----> 1 answers =SITE.fetch('questions/{ids}/answers',ids=temp,filter='withbody')

~/anaconda3/lib/python3.6/site-packages/stackapi/stackapi.py in
fetch(self, endpoint, page, key, filter, **kwargs)
     190                 response = response.json()
     191             except ValueError as e:
--> 192                 raise StackAPIError(self._previous_call, str(e), str(e), str(e))
    193 
    194             try:
JSONDecodeError回溯(最近一次调用上次)~/anaconda3/lib/python3.6/site-packages/stackapi/stackapi.py in
获取(自身、端点、页面、键、过滤器、**kwargs)
189 response.encoding='utf-8-sig'
-->190 response=response.json()
191除e值错误外:
中的~/anaconda3/lib/python3.6/site-packages/requests/models.py
json(自我,**kwargs)
896通行证
-->897返回complexjson.load(self.text,**kwargs)
898
加载中的~/anaconda3/lib/python3.6/json/\uuu init\uuuu.py,
object_hook,parse_float,parse_int,parse_constant,
物体对钩,**千瓦)
353 parse_常量为None且对象_pairs_hook为None且非kw):
-->354返回\u默认\u解码器。解码
355如果cls为无:
解码中的~/anaconda3/lib/python3.6/json/decoder.py(self,s,_w)
338         """
-->339 obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
340 end=_w(s,end).end()
原始解码中的~/anaconda3/lib/python3.6/json/decoder.py(self、s、idx)
356除了停止迭代作为错误:
-->357将JSONDecodeError(“预期值”,s,err.value)从None提升
358返回obj,结束
JSONDecodeError:应为值:第1行第1列(字符0)
在处理上述异常期间,发生了另一个异常:
StackAPIError回溯(最近的调用)
最后)在()
---->1 answers=SITE.fetch('questions/{ids}/answers',ids=temp,filter='withbody')
~/anaconda3/lib/python3.6/site-packages/stackapi/stackapi.py in
获取(自身、端点、页面、键、过滤器、**kwargs)
190 response=response.json()
191除e值错误外:
-->192 raise STACKAPIRROR(自我._上一次呼叫,str(e),str(e),str(e))
193
194尝试:

我也遇到了类似的问题。在我的例子中,json被证明已损坏。 它使用了诸如“\xa0”和“\\n”之类的字符。它们必须被替换

text = text.replace (u '\ xa0', u '') .replace (u '\\\\ n', u '')

我使用该站点发现了错误,该站点显示了错误的位置。

您每次只能使用1id调用
/questions/{ids}/answers

因此,如果您想获取Python问题,比如2020-05-09到2020-05-10,我建议您:

from stackapi import StackAPI
import time

SITE = StackAPI('stackoverflow')
questions = SITE.fetch('questions', tagged='python', fromdate='1588982400', todate='1589068800', filter='withbody')
for quest in questions['items']:
    answers = SITE.fetch('questions/{ids}/answers', ids=[quest['question_id']], filter='withbody')
    print(answers) # do whatever you want with those

由于您发出了大量请求,您可能希望(如果您还没有这样做的话)获得一个API,这将使您可以发出的请求(配额)从300个增加到10000个。

在开始阅读json之前,找到发生错误的字符并替换它。