如何通过SPARQL查询指定Wiki-ID的作者属性信息并结合Python脚本批量处理表格数据
针对特定Wiki-ID的SPARQL查询方案
嘿,我来帮你搞定这个问题!针对指定Wiki-ID(比如Almudena Grandes的Q274348)获取性别、出生地和出生日期的SPARQL查询其实很直观,核心是绑定目标实体,然后匹配对应的维基数据属性。
首先,先给你针对Q274348的具体查询语句:
SELECT ?item ?itemLabel ?gender ?genderLabel ?birthDate ?birthPlace ?birthPlaceLabel WHERE { BIND(wd:Q274348 AS ?item) # 匹配性别(属性ID:P21) OPTIONAL { ?item wdt:P21 ?gender } # 匹配出生日期(属性ID:P569) OPTIONAL { ?item wdt:P569 ?birthDate } # 匹配出生地(属性ID:P19) OPTIONAL { ?item wdt:P19 ?birthPlace } # 获取多语言标签(这里指定西班牙语和英语,可按需调整) SERVICE wikibase:label { bd:serviceParam wikibase:language "es,en". } }
代码解释:
BIND(wd:Q274348 AS ?item):明确指定要查询的实体是Q274348,替换成其他Wiki-ID就能查询对应作者。OPTIONAL:用这个关键字包裹每个属性查询,避免因为某属性缺失(比如有些作者没标注出生地)导致整个查询返回空结果。SERVICE wikibase:label:自动获取实体的可读标签(比如把wd:Q6581072(女性)转换成“female”或“mujer”),不用手动处理Q值对应的名称。
批量/脚本集成建议:
如果要在Python脚本里遍历表格逐个查询,你可以把查询语句中的wd:Q274348替换成变量,比如用字符串格式化实现:
import requests import pandas as pd # 假设你的表格是pandas DataFrame,列名为'wiki_id' df = pd.read_csv('your_authors_table.csv') # 维基数据SPARQL端点 sparql_endpoint = "https://query.wikidata.org/sparql" # 基础查询模板 query_template = """ SELECT ?genderLabel ?birthDate ?birthPlaceLabel WHERE {{ BIND(wd:{wiki_id} AS ?item) OPTIONAL {{ ?item wdt:P21 ?gender }} OPTIONAL {{ ?item wdt:P569 ?birthDate }} OPTIONAL {{ ?item wdt:P19 ?birthPlace }} SERVICE wikibase:label {{ bd:serviceParam wikibase:language "es,en". }} }} """ # 遍历每行查询并补充数据 for index, row in df.iterrows(): wiki_id = row['wiki_id'] query = query_template.format(wiki_id=wiki_id) response = requests.get(sparql_endpoint, params={'query': query, 'format': 'json'}) data = response.json() # 提取结果并更新表格 if data['results']['bindings']: bindings = data['results']['bindings'][0] df.at[index, 'gender'] = bindings.get('genderLabel', {}).get('value') df.at[index, 'birth_date'] = bindings.get('birthDate', {}).get('value') df.at[index, 'birth_place'] = bindings.get('birthPlaceLabel', {}).get('value') # 保存更新后的表格 df.to_csv('updated_authors_table.csv', index=False)
这个脚本会自动遍历你的作者表格,为每个Wiki-ID执行查询,把获取到的性别、出生日期、出生地信息补充到对应的列里。
内容的提问来源于stack exchange,提问作者José
相关产品推荐
相关产品推荐

