问题描述
当我尝试从 wikidata 获取所有篮球运动员的列表时,我遇到的问题找不到任何帮助。首先我得到玩家的数量(大约 130k)。然后我创建具有特定偏移量和限制 2000 的查询。问题是,无论偏移量是多少,我每次都会得到相同的 2000 名玩家。
(但是,如果我在 https://query.wikidata.org/ 上,结果总是不同的)
while(numberOfPlayers > 0):
numberOfPlayers-=2000
offset = 0
queryPlayersBlock = """SELECT ?item ?itemLabel
WHERE
{
?item wdt:P106 wd:Q3665646.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
offset """+str(offset)+"""
limit 2000
"""
players = get_results(endpoint_url,queryPlayersBlock)["results"]["bindings"]
for i in range (0,len(players)):
dataFile.write(str(players[i]["itemLabel"]["value"]+" : "+players[i]["item"]["value"].removeprefix("http://www.wikidata.org/entity/")+"\n"))
offset+=2000
我在 sparql 文档中发现:“除非使用 ORDER BY 使订单可预测,否则使用 LIMIT 和 OFFSET 选择查询解决方案的不同子集将没有用。” 但是当我使用 order by 时出现错误“达到查询超时限制”。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)