如何打开包含非asci字符的url要求的json文件?

问题描述

我正在尝试从包含波兰语字母字符的API打开json文件。我曾尝试将url编码为utf-8,但仍然会弹出各种问题。我包括了我编写的代码和出现的错误。

import urllib.request as request
import json
url='https://api.um.warszawa.pl/api/action/dbtimetable_get?id=myapiID&busstopId=wartość&busstopNr=wartość&line=wartość&apikey=wartość'
url=url.encode('utf-8')
with request.urlopen(url) as response:
    source = response.read()
    data = json.loads(source)

然后出现错误:“字节”对象没有属性“超时”。

解决方法

这里有两个问题,可能都是由于要求使用包含非ASCII字符的查询组件访问url所致。

  • 首先,将bytes实例传递给urlopen会导致意外行为,如here
  • 所述
  • 第二,URL的查询参数中不允许使用非ASCII字符,因此必须对查询参数进行数字编码。

因此,鉴于网址无效,您需要执行以下操作:

import json
from urllib import parse
from urllib import request

parts - parse.urlsplit(url)
query_dict = parse.parse_qs(parts.query)
encoded_query = parse.urlencode(query_dict)
fixed_url = parse.urlunsplit((parts.scheme,parts.netloc,parts.path,encoded_query,parts.fragment))
response = request.urlopen(fixed_url)

print(json.load(response))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...