我正在尝试从 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)
然后出现错误: 'bytes' object has no attribute 'timeout' 。
这里有两个问题,可能都源于使用包含非 ASCII 字符的查询组件访问 url 的要求。
bytes
实例传递给 urlopen
将导致意外行为,如此处因此,鉴于无效的网址,您需要执行以下操作:
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))