首页 > 解决方案 > sparql 查询的重复结果

问题描述

当我尝试从 wikidata 获取所有篮球运动员的名单时遇到的问题,我找不到任何帮助。首先我得到了玩家的数量(大约是 130k)。然后我正在创建具有特定偏移量和限制 2000 的查询。问题是无论偏移量是多少,我每次都会得到相同的 2000 个玩家。

(但是,如果我在https://query.wikidata.org/上,结果总是不同的)

这是我在 python 中创建查询的部分代码。

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 文档中发现:“使用 LIMIT 和 OFFSET 来选择查询解决方案的不同子集将没有用,除非使用 ORDER BY 可以预测顺序。” 但是当我使用 order by 我得到错误“查询超时限制达到”。

标签: pythonsparqlwikidatasparqlwrapper

解决方案


推荐阅读