给定一个人的名字,如何查询关于这个人的维基数据属性?
given a name of a person, how to query wikidata properties about this person?
我正在 python 做一个购物中心项目。
我有一个 table 列:"author"、"title"、"text".
我需要的是:
对于给定的作者姓名,我想以某种方式获得包含以下列的 table:"property"、"value"、
包含有关属性 "occupation" 和 "sex or gender" 来自维基数据的信息(行)。
*编辑:table 的类型并不重要。一个数据框会很棒,但所有其他可用的类型都很好!
示例:
对于作者姓名 - David David,我想获得以下内容 table:
- 第 1 行:属性 = "occupation" ; value = David 的职业。
- 第 2 行:属性 = "gender or sex" ;值 = 大卫的性别。
谢谢 :-)
好的,这是一种(我见过的)方法:
使用请求和 json。例如:
如果我想获得唐纳德特朗普的生日、职业和性别,我应该首先导入请求包,并定义我的 SPARQL 查询。 (可以使用SPARQL查询语言查询WikiData数据库)
import requests
sparql_query = """
prefix schema: <http://schema.org/>
SELECT ?item ?occupation ?genderLabel ?bdayLabel
WHERE {
<https://en.wikipedia.org/wiki/Eric_P._Schmitt> schema:about ?item .
?item wdt:P106 ?occupation .
?item wdt:P21 ?gender .
?item wdt:P569 ?bday .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
"""
(Eric P. Schmitt 到底是谁并不重要..)
然后,我需要使用 request.get 方法提出请求并申请和查询:
url = 'https://query.wikidata.org/sparql'
# sleep(2)
r = requests.get(url, params={'format': 'json', 'query': sparql_query})
最后一步,将结果作为 json 并从其结构中访问所需信息:
url = 'https://query.wikidata.org/sparql'
r = requests.get(url, params={'format': 'json', 'query': sparql_query})
data = r.json()
print(data['results']['bindings'])
>>>> [{'item': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q5387230'}, 'genderLabel': {'xml:lang': 'en', 'type': 'literal', 'value': 'male'}, 'bdayLabel': {'type': 'literal', 'value': '1959-11-02T00:00:00Z'}, 'occupation': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q1930187'}}]
我正在 python 做一个购物中心项目。 我有一个 table 列:"author"、"title"、"text".
我需要的是: 对于给定的作者姓名,我想以某种方式获得包含以下列的 table:"property"、"value"、 包含有关属性 "occupation" 和 "sex or gender" 来自维基数据的信息(行)。
*编辑:table 的类型并不重要。一个数据框会很棒,但所有其他可用的类型都很好!
示例: 对于作者姓名 - David David,我想获得以下内容 table:
- 第 1 行:属性 = "occupation" ; value = David 的职业。
- 第 2 行:属性 = "gender or sex" ;值 = 大卫的性别。
谢谢 :-)
好的,这是一种(我见过的)方法:
使用请求和 json。例如: 如果我想获得唐纳德特朗普的生日、职业和性别,我应该首先导入请求包,并定义我的 SPARQL 查询。 (可以使用SPARQL查询语言查询WikiData数据库)
import requests
sparql_query = """
prefix schema: <http://schema.org/>
SELECT ?item ?occupation ?genderLabel ?bdayLabel
WHERE {
<https://en.wikipedia.org/wiki/Eric_P._Schmitt> schema:about ?item .
?item wdt:P106 ?occupation .
?item wdt:P21 ?gender .
?item wdt:P569 ?bday .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
"""
(Eric P. Schmitt 到底是谁并不重要..) 然后,我需要使用 request.get 方法提出请求并申请和查询:
url = 'https://query.wikidata.org/sparql'
# sleep(2)
r = requests.get(url, params={'format': 'json', 'query': sparql_query})
最后一步,将结果作为 json 并从其结构中访问所需信息:
url = 'https://query.wikidata.org/sparql'
r = requests.get(url, params={'format': 'json', 'query': sparql_query})
data = r.json()
print(data['results']['bindings'])
>>>> [{'item': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q5387230'}, 'genderLabel': {'xml:lang': 'en', 'type': 'literal', 'value': 'male'}, 'bdayLabel': {'type': 'literal', 'value': '1959-11-02T00:00:00Z'}, 'occupation': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q1930187'}}]