Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 使用rdflib.Graph获取关于具有特殊字符的名称的类别,如;弗兰ç;“奥朗德先生”;_Python 2.7_Url Encoding_Rdflib - Fatal编程技术网

Python 2.7 使用rdflib.Graph获取关于具有特殊字符的名称的类别,如;弗兰ç;“奥朗德先生”;

Python 2.7 使用rdflib.Graph获取关于具有特殊字符的名称的类别,如;弗兰ç;“奥朗德先生”;,python-2.7,url-encoding,rdflib,Python 2.7,Url Encoding,Rdflib,我正在尝试从几个人那里获取DBpedia类型。我试过rdflib。这是我的密码: from rdflib import Graph, URIRef, RDFS from rdflib.namespace import RDF import urllib import re name = u'François Hollande' g = Graph() uriref = URIRef("http://dbpedia.org/resource/%s" % urllib.quote(re.sub(

我正在尝试从几个人那里获取DBpedia类型。我试过rdflib。这是我的密码:

from rdflib import Graph, URIRef, RDFS
from rdflib.namespace import RDF
import urllib
import re

name = u'François Hollande'

g = Graph()
uriref = URIRef("http://dbpedia.org/resource/%s" % urllib.quote(re.sub(re.compile('\s', re.U), '_', name).encode('utf-8')))
g.parse(uriref)
for s,p,o in g:
    if (p in [
         URIRef("http://www.w3.org/2002/07/owl#sameAs"),
         RDFS.seeAlso
     ]) and (uriref != o):
        g.parse(location=o)
for s,p,o in g.triples((None, RDFuriref2.type, None)):
    print o
如您所见,我尝试查看数据库中是否存在一些“同义词”。我这样做是因为“弗朗索瓦·奥朗德”的图表将返回这个(状态为303):


尽管如此,我的代码还是发送了一个UnicodeError。我不知道如何调用第二个资源而不提高它。如果我在python shell上手动调用它,我会得到以下结果:

>> g.parse('http://dbpedia.org/resource/François_Hollande')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/rdflib/graph.py", line 1029, in parse
    data=data, format=format)
  File "/usr/local/lib/python2.7/dist-packages/rdflib/parser.py", line 171, in create_input_source
    input_source = URLInputSource(absolute_location, format)
  File "/usr/local/lib/python2.7/dist-packages/rdflib/parser.py", line 100, in __init__
    file = urlopen(req)
  File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 400, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 418, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1207, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1174, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib/python2.7/httplib.py", line 1004, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1038, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 1000, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 851, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 827, in send
    self.sock.sendall(data)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe7' in position 18: ordinal not in range(128)
>g.parse('http://dbpedia.org/resource/François_奥朗德')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/dist packages/rdflib/graph.py”,第1029行,在parse中
数据=数据,格式=格式)
文件“/usr/local/lib/python2.7/dist packages/rdflib/parser.py”,第171行,在create\u input\u source中
input\u source=URLInputSource(绝对位置,格式)
文件“/usr/local/lib/python2.7/dist packages/rdflib/parser.py”,第100行,在__
文件=urlopen(req)
文件“/usr/lib/python2.7/urllib2.py”,第126行,在urlopen中
return\u opener.open(url、数据、超时)
文件“/usr/lib/python2.7/urllib2.py”,第400行,打开
响应=自身打开(请求,数据)
文件“/usr/lib/python2.7/urllib2.py”,第418行,打开
"开放",
文件“/usr/lib/python2.7/urllib2.py”,第378行,在调用链中
结果=func(*args)
文件“/usr/lib/python2.7/urllib2.py”,第1207行,在http\u open中
返回self.do_open(httplib.HTTPConnection,req)
文件“/usr/lib/python2.7/urllib2.py”,第1174行,打开
h、 请求(请求获取方法(),请求获取选择器(),请求数据,标题)
请求中的文件“/usr/lib/python2.7/httplib.py”,第1004行
self.\u发送请求(方法、url、正文、标题)
文件“/usr/lib/python2.7/httplib.py”,第1038行,在发送请求中
self.endheaders(主体)
文件“/usr/lib/python2.7/httplib.py”,第1000行,在endheaders中
自发送输出(消息体)
文件“/usr/lib/python2.7/httplib.py”,第851行,在发送输出中
self.send(msg)
文件“/usr/lib/python2.7/httplib.py”,第827行,在send中
self.sock.sendall(数据)
文件“/usr/lib/python2.7/socket.py”,第224行,meth格式
返回getattr(self.\u sock,name)(*args)
UnicodeEncodeError:“ascii”编解码器无法对位置18中的字符u'\xe7'进行编码:序号不在范围内(128)

谢谢你的建议

顺便说一下,我正在Ubuntu 16.04LTS上使用Python2.7。谢谢它有用吗?顺便说一下,我正在Ubuntu 16.04LTS上使用Python 2.7。谢谢有帮助吗?
>> g.parse('http://dbpedia.org/resource/François_Hollande')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/rdflib/graph.py", line 1029, in parse
    data=data, format=format)
  File "/usr/local/lib/python2.7/dist-packages/rdflib/parser.py", line 171, in create_input_source
    input_source = URLInputSource(absolute_location, format)
  File "/usr/local/lib/python2.7/dist-packages/rdflib/parser.py", line 100, in __init__
    file = urlopen(req)
  File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 400, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 418, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1207, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1174, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib/python2.7/httplib.py", line 1004, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1038, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 1000, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 851, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 827, in send
    self.sock.sendall(data)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe7' in position 18: ordinal not in range(128)