如何使用SPARQLWrapper处理Wikidata上的“太多请求”?

2024-05-19 18:49:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在遍历大约1000个条目的列表,如下所示:

def wikidata_user_lookup(id_str):
    q = f'''
        SELECT ?item ?itemLabel ?kind ?kindLabel
        WHERE 
        {{
            ?item p:P2002 ?twitter .
            ?item wdt:P31 ?kind .
            ?twitter pq:P6552 "{id_str}" .
            SERVICE wikibase:label {{ bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }}
        }}
    '''
    sparql.setQuery(q)
    sparql.setReturnFormat(JSON)
    results = sparql.query().convert()
    results_df = pd.io.json.json_normalize(results['results']['bindings'])
    return results_df

for user in users:
    res = wikidata_user_lookup(user)

因此,我提交了约1000个查询,一个接一个。据我所知,我没有并行运行多个查询,所以这是不允许的?我得到了HTTPError: HTTP Error 429: Too Many Requests。处理这种情况的正确方法是什么


Tags: 目的idjsondf列表twitterlookupitem
1条回答
网友
1楼 · 发布于 2024-05-19 18:49:13

我建议阅读官方文件

它说明您可以运行:

  • 每60秒允许一个客户端(用户代理+IP)处理60秒
  • 每分钟允许一个客户端进行30次错误查询

因此,您的1000个查询必须在一分钟内最多30个,以避免限制,并使用不到60秒的处理时间

由于您得到了429错误,根据上面链接的文档,您应该检查Retry-After头并等待指定的时间,然后再进行更多查询

相关问题 更多 >