我正在尝试使用Python3从Knowledge Graph API中提取信息,我尝试了多次调试该代码,但是找不到任何错误,但是却遇到了错误
这是我的代码
#!/usr/bin/env python
"""
Query the Knowledge Graph API https://developers.google.com/knowledge-graph/
"""
import argparse
import datetime
import requests
import json
#import urllib
import urllib.request,urllib.parse,urllib.error
def main(query):
api_key = open('.api_key').read()
service_url = 'https://kgsearch.googleapis.com/v1/entities:search'
params = {
'query': query,
'limit': 5,
'indent': True,
'key': api_key,
}
url = service_url + '?' + urllib.parse.urlencode(params) # TODO: use requests
response = json.loads(urllib.request.urlopen(url).read())
# Parsing the response TODO: log all responses
print('Displaying results...' + ' (limit: ' + str(params['limit']) + ')\n')
for element in response['itemListElement']:
try:
types = str(", ".join([n for n in element['result']['@type']]))
except KeyError:
types = "N/A"
try:
desc = str(element['result']['description'])
except KeyError:
desc = "N/A"
try:
detail_desc = str(element['result']['detailedDescription']['articleBody'])[0:100] + '...'
except KeyError:
detail_desc = "N/A"
try:
mid = str(element['result']['@id'])
except KeyError:
mid = "N/A"
try:
url = str(element['result']['url'])
except KeyError:
url = "N/A"
try:
score = str(element['resultScore'])
except KeyError:
score = "N/A"
print(element['result']['name'] \
+ '\n' + ' - entity_types: ' + types \
+ '\n' + ' - description: ' + desc \
+ '\n' + ' - detailed_description: ' + detail_desc \
+ '\n' + ' - identifier: ' + mid \
+ '\n' + ' - url: ' + url \
+ '\n' + ' - resultScore: ' + score \
+ '\n')
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('query', help='The search term to query')
args = parser.parse_args()
main(args.query)
知识图文档中给出的源代码或示例基于python2,我更改了一些类似urlib包名称
我得到这个错误
Traceback (most recent call last):
File "/usr/lib/python3.6/urllib/request.py", line 1318, in do_open
encode_chunked=req.has_header('Transfer-encoding'))
File "/usr/lib/python3.6/http/client.py", line 1239, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib/python3.6/http/client.py", line 1285, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib/python3.6/http/client.py", line 1234, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.6/http/client.py", line 1026, in _send_output
self.send(msg)
File "/usr/lib/python3.6/http/client.py", line 964, in send
self.connect()
File "/usr/lib/python3.6/http/client.py", line 1392, in connect
super().connect()
File "/usr/lib/python3.6/http/client.py", line 936, in connect
(self.host,self.port), self.timeout, self.source_address)
File "/usr/lib/python3.6/socket.py", line 704, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib/python3.6/socket.py", line 745, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "kg-api.py", line 75, in <module>
main(args.query)
File "kg-api.py", line 26, in main
response = json.loads(urllib.request.urlopen(url).read())
File "/usr/lib/python3.6/urllib/request.py", line 223, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.6/urllib/request.py", line 526, in open
response = self._open(req, data)
File "/usr/lib/python3.6/urllib/request.py", line 544, in _open
'_open', req)
File "/usr/lib/python3.6/urllib/request.py", line 504, in _call_chain
result = func(*args)
File "/usr/lib/python3.6/urllib/request.py", line 1361, in https_open
context=self._context, check_hostname=self._check_hostname)
File "/usr/lib/python3.6/urllib/request.py", line 1320, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno -2] Name or service not known>