无法在 Python 上解析非 ASCII URL?
Unable to parse Non ASCII URL on Python?
我想查询 Freebase API 以获取 José Mourinho 效力过的球队列表。
所以,我在浏览器上使用的URL是
https://www.googleapis.com/freebase/v1/mqlread?query=[{"name": "José Mourinho","/sports/pro_athlete/teams": [{"mid": null,"team": null,"to": null,"optional": true}]}]
然而,
import json
import urllib
service_url="https://www.googleapis.com/freebase/v1/mqlread"
query = '[{"name": "' + "José Mourinho" + '","/sports/pro_athlete/teams": [{"mid": null,"team": null,"to": null,"optional": true}]}]'
url = service_url + '?' + 'query='+query
response = json.loads(urllib.urlopen(url).read())
给我一个错误说,
UnicodeError: URL u'https://www.googleapis.com/freebase/v1/mqlread?query=[{"name": "Jos\xe9 Mourinho","/sports/pro_athlete/teams": [{"mid": null,"team": null,"to": null,"optional": true}]}]' contains non-ASCII characters
解决这个问题的方法是什么?
我认为您跳过了一点 the docs。试试这个:
# coding=UTF-8
import json
import urllib
service_url = "https://www.googleapis.com/freebase/v1/mqlread"
query = [{
'/sports/pro_athlete/teams': [
{
'to': None,
'optional': True,
'mid': None,
'team': None
}
],
'name': 'José Mourinho'
}]
url = service_url + '?' + urllib.urlencode({'query': json.dumps(query)})
response = json.loads(urllib.urlopen(url).read())
print response
与其自己构建查询字符串,不如使用 json.dumps
和 urllib.urlencode
为您创建。他们擅长这个。
注意:如果您可以使用 requests
包,那么最后一点可以是:
import requests
response = requests.get(service_url, params={'query': json.dumps(query)})
然后你就可以跳过 URL 构造并完全转义!
我想查询 Freebase API 以获取 José Mourinho 效力过的球队列表。
所以,我在浏览器上使用的URL是
https://www.googleapis.com/freebase/v1/mqlread?query=[{"name": "José Mourinho","/sports/pro_athlete/teams": [{"mid": null,"team": null,"to": null,"optional": true}]}]
然而,
import json
import urllib
service_url="https://www.googleapis.com/freebase/v1/mqlread"
query = '[{"name": "' + "José Mourinho" + '","/sports/pro_athlete/teams": [{"mid": null,"team": null,"to": null,"optional": true}]}]'
url = service_url + '?' + 'query='+query
response = json.loads(urllib.urlopen(url).read())
给我一个错误说,
UnicodeError: URL u'https://www.googleapis.com/freebase/v1/mqlread?query=[{"name": "Jos\xe9 Mourinho","/sports/pro_athlete/teams": [{"mid": null,"team": null,"to": null,"optional": true}]}]' contains non-ASCII characters
解决这个问题的方法是什么?
我认为您跳过了一点 the docs。试试这个:
# coding=UTF-8
import json
import urllib
service_url = "https://www.googleapis.com/freebase/v1/mqlread"
query = [{
'/sports/pro_athlete/teams': [
{
'to': None,
'optional': True,
'mid': None,
'team': None
}
],
'name': 'José Mourinho'
}]
url = service_url + '?' + urllib.urlencode({'query': json.dumps(query)})
response = json.loads(urllib.urlopen(url).read())
print response
与其自己构建查询字符串,不如使用 json.dumps
和 urllib.urlencode
为您创建。他们擅长这个。
注意:如果您可以使用 requests
包,那么最后一点可以是:
import requests
response = requests.get(service_url, params={'query': json.dumps(query)})
然后你就可以跳过 URL 构造并完全转义!