【问题标题】:Unable to parse Non ASCII URL on Python?无法在 Python 上解析非 ASCII URL?
【发布时间】:2016-02-10 12:00:05
【问题描述】:

我想查询 Freebase API 以获取何塞·穆里尼奥效力过的球队名单。

所以,我在浏览器上使用的网址是

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

解决办法是什么?

【问题讨论】:

标签: python-2.7 urllib


【解决方案1】:

我想你跳过了一点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.dumpsurllib.urlencode 为您创建它。他们很擅长这个。

注意:如果你可以使用requests 包,最后一点可能是:

import requests
response = requests.get(service_url, params={'query': json.dumps(query)})

然后你就可以完全跳过 URL 的构建和转义了!

【讨论】:

  • 很棒的解决方案。太棒了
猜你喜欢
  • 2016-05-22
  • 2018-09-26
  • 2020-04-18
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
相关资源
最近更新 更多