微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何打开包含非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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。