gpt4 book ai didi

维基数据禁止访问

转载 作者:行者123 更新时间:2023-12-05 02:54:28 26 4
gpt4 key购买 nike

我尝试使用 Python 请求和多处理 (number_workers = 8) 运行一些维基数据查询,现在我收到代码 403(禁止访问)。有什么限制吗?我看过here我应该将自己限制为 5 个并发查询,但即使使用一个查询,我现在也无法通过 Python 获得任何结果。它曾经有效。

此访问禁止是暂时的还是我永远被列入黑名单? :(

我没有在他们的文档中看到任何限制,所以我不知道我正在做一些会被禁止的事情。

有谁知道是什么情况吗?

wikidata_url = 'https://query.wikidata.org/sparql'
headers = {'User-Agent': 'Chrome/77.0.3865.90'}
r = requests.get(wikidata_url, params={'format': 'json', 'query': query, 'headers': headers})

修复后编辑:原来我是暂时被禁服了。我已更改我的用户代理以遵循 recommended template我等待我的坏人被删除。问题是我忽略了错误 429,它告诉我我已经超出了允许的限制,我必须在一段时间(几秒钟)后重试。这导致了我的错误 403。

我试图通过编写以下考虑到这一点的代码来纠正由于缺乏经验而导致的错误。我添加此修改是因为它可能对其他人有用。

def get_delay(date):
try:
date = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S GMT')
timeout = int((date - datetime.datetime.now()).total_seconds())
except ValueError:
timeout = int(date)
return timeout


def make_request(params):
r = requests.get(wikidata_url, params)
print(r.status_code)
if r.status_code == 200:
if r.json()['results']['bindings']:
return r.json()
else:
return None
if r.status_code == 500:
return None
if r.status_code == 403:
return None
if r.status_code == 429:
timeout = get_delay(r.headers['retry-after'])
print('Timeout {} m {} s'.format(timeout // 60, timeout % 60))
time.sleep(timeout)
make_request(params)

最佳答案

访问限制为 tightened up in 2019尝试应对查询服务器的过载。通用的 python 请求用户代理是 blocked作为其中的一部分(我不知道是否/何时恢复)。

根据 the Query Service manual ,目前的规则似乎是:

  • 允许一个客户端(用户代理 + IP)每 60 秒有 60 秒的处理时间
  • 允许一个客户端每分钟 30 次错误查询
  • 不遵守 the User-Agent policy 的客户可能会被完全阻止
  • 对服务的访问仅限于每个 IP 的 5 个并行查询[这可能会改变]

我建议再试一次,使用更详细的用户代理运行单个查询,看看是否可行。

关于维基数据禁止访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61803586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com