使用 Python 从 Wikidata 中提取数据

PeC*_*aDe 5 python json wikidata-api

使用以下代码可以从维基数据中的实体中提取数据:

import requests

API_ENDPOINT = "https://www.wikidata.org/w/api.php"

query = "wikipedia"

params = {
    'action': 'wbsearchentities',
    'format': 'json',
    'language': 'en',
    'search': query
}

r = requests.get(API_ENDPOINT, params = params)

print(r.json()['search'][0])
Run Code Online (Sandbox Code Playgroud)

输出是:

{'repository': '', 'id': 'Q52', 'concepturi': 'http://www.wikidata.org/entity/Q52', 'title': 'Q52', 'pageid': 170, 'url': '//www.wikidata.org/wiki/Q52', 'label': 'Wikipedia', 'description': 'free online encyclopedia that anyone can edit', 'match': {'type': 'label', 'language': 'en', 'text': 'Wikipedia'}}
Run Code Online (Sandbox Code Playgroud)

但是访问concepturi'http ://www.wikidata.org/entity/Q52我看到的信息比json文件中报告的信息更多,特别是我对座右铭文本字段感兴趣。

我如何从维基数据获取更多信息?(这是一个可以显示更多信息的示例,其中查询输出的信息少于维基数据中包含的信息)。

小智 3

你可以使用 wikidata python 模块qwikidata

from qwikidata.sparql  import return_sparql_query_results

query_string = """
        SELECT $WDid
         WHERE {
          ?WDid (wdt:P279)* wd:Q4022
        }"""

res = return_sparql_query_results(query_string)

for row in res["results"]["bindings"]:
   print(row["yourFieldName"]["value"])
Run Code Online (Sandbox Code Playgroud)

  • 似乎有一个更成熟的 python 包,称为 [wikidata](https://github.com/dahlia/wikidata)。 (3认同)