使用StackExchange API从Stack Overflow检索答案时发生JSONDecodeError

时间:2019-12-18 10:01:52

标签: python json python-3.x 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_id列表,以获得与检索问题有关的答案

quest_ids= []
for quest in questions['items']:
    quest_ids.insert(len(quest_ids),quest['question_id'])

所有与问题相关的ID都在quest_id中。现在,我使用quest_ids列表通过以下代码检索那些问题的答案:

answers =SITE.fetch('questions/{ids}/answers',ids=quest_ids,filter='withbody')

但是,当我运行上面的代码时,出现以下错误:

  

JSONDecodeError跟踪(最近的调用)   最后)〜/ anaconda3 / lib / python3.6 / site-packages / stackapi / stackapi.py在   提取(自身,端点,页面,键,过滤器,** kwargs)       189 response.encoding ='utf-8-sig'   -> 190响应= response.json()       191,除了ValueError为e:

     

〜/ anaconda3 / lib / python3.6 / site-packages / requests / models.py在   json(self,** kwargs)       896通过   -> 897 return complexjson.loads(self.text,** kwargs)       898

     

〜/ anaconda3 / lib / python3.6 / json / init .py加载(s,编码,cls,   object_hook,parse_float,parse_int,parse_constant,   object_pairs_hook,** kw)       353 parse_constant为None且object_pairs_hook为None而不是kw):   -> 354返回_default_decoder.decode(s)       355,如果cls为None:

     

〜/ anaconda3 / lib / python3.6 / json / decoder.py解码(self,s,_w)       338“”“   -> 339个obj,end = self.raw_decode(s,idx = _w(s,0).end())       340结尾= _w(s,end).end()

     

〜/ anaconda3 / lib / python3.6 / json / decoder.py在raw_decode(self,s,idx)中       356,除了StopIteration作为err:   -> 357从None提高JSONDecodeError(“期望值”,s,err.value)       358返回obj,结束

     

JSONDecodeError:预期值:第1行第1列(字符0)

     

在处理上述异常期间,发生了另一个异常:

     

StackAPIError回溯(最近一次调用   最后)在()   ----> 1个答案= SITE.fetch('questions / {ids} / answers,ids = temp,filter ='withbody')

     

〜/ anaconda3 / lib / python3.6 / site-packages / stackapi / stackapi.py在   提取(自身,端点,页面,键,过滤器,** kwargs)       第190章       191除了ValueError为e:   -> 192引发StackAPIError(self._previous_call,str(e),str(e),str(e))       193       194尝试:

不确定我在哪里犯错。有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

您每次只能使用ID为 1 <profileitem ca="<tizen>/tools/certificate-generator/certificates/developer/tizen-developer-ca.cer" distributor="0" key="<tizen-data>/keystore/author/<cert>.p12" password="<strong_password>" rootca=""/> <profileitem ca="<tizen>/tools/certificate-generator/certificates/distributor/tizen-distributor-ca.cer" distributor="1" key="<tizen>/tools/certificate-generator/certificates/distributor/tizen-distributor-signer.p12" password="tizenpkcs12passfordsigner" rootca=""/> 进行呼叫。

因此,如果您想获取2020年5月9日至2020年5月10日的Python问题,以下是我的建议:

/questions/{ids}/answers

由于您要进行大量请求,因此您可能想要(如果尚未这样做)register your application来获取API,该API可以将您的请求数量(配额)从300增加到10,000。

答案 1 :(得分:-2)

我有类似的问题。就我而言,json原来已损坏。 它使用了像'\ xa0'和'\\ n'这样的字符。必须更换它们。

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

我在https://jsonformatter.org/json-editor网站上发现了错误,该网站向我显示了错误的位置。