从dbpedia检索数据时出错

时间:2012-09-02 16:29:03

标签: python sparql dbpedia

我尝试从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!

1 个答案:

答案 0 :(得分:3)

第一个问题是 SPARQLWrapper 似乎期望它的查询是unicode,但是你传递了一个utf-8编码的字符串 - 这就是为什么你得到一个{{ 1}}。相反,你应该通过解码你的utf-8字符串

来传递一个unicode对象
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='/:')