我尝试从dbpedia检索数据,但每次运行代码时都会出错。
Python中的代码是:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?subject
WHERE { <http://dbpedia.org/resource/Musée_du_Louvre> dcterms:subject ?subject }
""")
# JSON example
print '\n\n*** JSON Example'
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
print result["subject"]["value"]
我相信我必须在“Musée_du_Louvre”中为“é”使用不同的字符,但我无法确定哪一个。 THX!
答案 0 :(得分:3)
第一个问题是 SPARQLWrapper
似乎期望它的查询是unicode,但是你传递了一个utf-8编码的字符串 - 这就是为什么你得到一个{{ 1}}。相反,你应该通过解码你的utf-8字符串
UnicodeDecoreError
或使用unicode文字:
unicode_obj = some_utf8_string.decode('utf-8')
传递一个unicode对象可以避免unicode_obj = u'Hello World'
,但不会产生任何结果。因此,它看起来 dbpedia API期望包含非ASCII字符的URL被百分比编码。因此,您需要使用UnicodeDecodeError
预先对URL进行编码:
urllib.quote_plus
通过这两项更改,您的代码可能如下所示:
from urllib import quote_plus
encoded_url = quote_plus(url, safe='/:')