首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URLError SPARQLWrapper at sparql.query().convert()

URLError SPARQLWrapper at sparql.query().convert()
EN

Stack Overflow用户
提问于 2015-06-10 11:56:30
回答 3查看 2.4K关注 0票数 2

我尝试使用一个小python脚本来测试我的SPARQL请求。然而,只是下一个简单的代码不起作用。

代码语言:javascript
复制
from SPARQLWrapper import SPARQLWrapper, JSON
import rdflib
#connect to the sparql point
sparql = SPARQLWrapper("http://localhost:3030/sparql")
#SPARQL request
sparql.setQuery("""
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rme: <http://www.semanticweb.org/reminer/>

SELECT ?o
WHERE { ?s ?p ?o }
LIMIT 1
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

for result in results["results"]["bindings"]:
     print(result["o"]["value"])

在转换步骤中,我的代码会冻结很长时间,然后给我一个URLError。当我停止脚本时,看到下一条消息:

代码语言:javascript
复制
HTTPError                                 Traceback (most recent call last)
<ipython-input-6-2ab63307a418> in <module>()
     18 """)
     19 sparql.setReturnFormat(JSON)
---> 20 results = sparql.query().convert()
     21 
     22 for result in results["results"]["bindings"]:

/Users/francocy/anaconda/lib/python3.4/site-packages/SPARQLWrapper/Wrapper.py in query(self)
    533             @rtype: L{QueryResult} instance
    534         """
--> 535         return QueryResult(self._query())
    536 
    537     def queryAndConvert(self):

/Users/francocy/anaconda/lib/python3.4/site-packages/SPARQLWrapper/Wrapper.py in _query(self)
    513                 raise EndPointInternalError(e.read())
    514             else:
--> 515                 raise e
    516 
    517     def query(self):

/Users/francocy/anaconda/lib/python3.4/site-packages/SPARQLWrapper/Wrapper.py in _query(self)
    503 
    504         try:
--> 505             response = urlopener(request)
    506             return response, self.returnFormat
    507         except urllib.error.HTTPError as e:

/Users/francocy/anaconda/lib/python3.4/urllib/request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    159     else:
    160         opener = _opener
--> 161     return opener.open(url, data, timeout)
    162 
    163 def install_opener(opener):

/Users/francocy/anaconda/lib/python3.4/urllib/request.py in open(self, fullurl, data, timeout)
    467         for processor in self.process_response.get(protocol, []):
    468             meth = getattr(processor, meth_name)
--> 469             response = meth(req, response)
    470 
    471         return response

/Users/francocy/anaconda/lib/python3.4/urllib/request.py in http_response(self, request, response)
    577         if not (200 <= code < 300):
    578             response = self.parent.error(
--> 579                 'http', request, response, code, msg, hdrs)
    580 
    581         return response

/Users/francocy/anaconda/lib/python3.4/urllib/request.py in error(self, proto, *args)
    505         if http_err:
    506             args = (dict, 'default', 'http_error_default') + orig_args
--> 507             return self._call_chain(*args)
    508 
    509 # XXX probably also want an abstract factory that knows when it makes

/Users/francocy/anaconda/lib/python3.4/urllib/request.py in _call_chain(self, chain, kind, meth_name, *args)
    439         for handler in handlers:
    440             func = getattr(handler, meth_name)
--> 441             result = func(*args)
    442             if result is not None:
    443                 return result

/Users/francocy/anaconda/lib/python3.4/urllib/request.py in http_error_default(self, req, fp, code, msg, hdrs)
    585 class HTTPDefaultErrorHandler(BaseHandler):
    586     def http_error_default(self, req, fp, code, msg, hdrs):
--> 587         raise HTTPError(req.full_url, code, msg, hdrs, fp)
    588 
    589 class HTTPRedirectHandler(BaseHandler):

HTTPError: HTTP Error 403: Forbidden

我的情况和2.7和3.4都一样。编辑:我将连接从Wifi更改为intranet。我的脚本在DBpedia Sparql端点上运行良好,但是当我在本地服务器上请求时有一个Http错误。这似乎是代理或访问本地服务器的问题。

提前谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-10 15:09:20

如果您试图通过python脚本在本地fuseki服务器上执行一些SPARQL请求,则可能会受到某些代理问题的干扰。要解决这个问题,可以使用urllib的自动检测属性。

代码语言:javascript
复制
from SPARQLWrapper import SPARQLWrapper, JSON, XML
#import urllib.request module. Don't forget for Python 3.4 the urllib has been split into several different modules.
import urllib.request

#if the arg is empty in ProxyHandler, urllib will find itself your proxy config.
proxy_support = urllib.request.ProxyHandler({})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)

#connect to the sparql point
sparql = SPARQLWrapper("http://localhost:3030/yourOwnDb/sparql")
#SPARQL request
sparql.setQuery("""
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX owl: <http://www.w3.org/2002/07/owl#>
    PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

    SELECT ?o ?p
    WHERE { ?s ?p ?o }
    LIMIT 1
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

for result in results["results"]["bindings"]:
    print(result["o"]["value"])
票数 1
EN

Stack Overflow用户

发布于 2019-07-04 13:02:36

对于2019年来到这里的用户,对于访问Wikidata sparql端点的错误,Wikidata强制执行严格的用户代理策略,请参阅这个存档的维基数据项目聊天 (谢Pere),其中表示发送信息头的应用程序表明非bot脚本行为良好,也请参见维基媒体的用户代理策略

根据文档,我们可以使用agent实例变量来设置用户代理.用户代理HTTP报头在MDN网络文档中描述.最后,可以将类对象初始化为

代码语言:javascript
复制
sparql = SPARQLWrapper("https://query.wikidata.org/sparql", agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11")

希望这能有所帮助!

票数 3
EN

Stack Overflow用户

发布于 2015-06-10 13:38:08

正如错误告诉您的那样:

作业超时

似乎当您运行代码时,无法从连接中找到dbpedia.org。

现在运行您的代码,它将立即为我返回以下内容:

代码语言:javascript
复制
http://www.openlinksw.com/schemas/virtrdf#QuadMapFormat

因此,在生产过程中,您可能希望抓住那个URLError并以某种方式处理它。

更新一个又一个问题编辑:

目前,SPARQLWrapper依赖于urllib2来执行它的请求,所以如果您在代理后面,您应该能够使用urllib2ProxyHandler (如这里 )。

代码语言:javascript
复制
proxy = urllib2.ProxyHandler({'http': '192.168.x.x'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
# and then:
results = sparql.query().convert()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30755625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档