gpt4 book ai didi

python - 想要在使用 python 3 解析后构建 URL

转载 作者:行者123 更新时间:2023-12-05 02:15:02 25 4
gpt4 key购买 nike

我想使用以下代码替换 URL 中的参数值。替换参数值后,我在变量 query_dict

中得到以下数据
{
'part': ['snippet,replies'],
'allThreadsRelatedToChannelId': ['UCBqUbOUyAsTB7Xc7xQAHWZA'],
'maxResults': ['100'],
'pageToken': 'QURTSl9pMGhfWTZoU3dPX2dNendrSUZqRU1IVk5mTmVvVkpxT2c3dkJBbzdNME80SldsWnY0dHFYck9raUpxT0dqRm9pZ2k4Smo1Q2ZKSE5NWmZLWEVkcm5acC1paU9HUFpUaTlKdVljYjFqOUx5YzVVQzA4bmlSYkVxOGNISDVWY0E2ZmVuMVN5TFB6bWx2MGc=',
'key': my_key
}

当我尝试使用 unparse 方法构建 url 时,出现以下错误

not enough values to unpack (expected 7, got 6).

怎么了?以下是当前代码

r = urllib.request.urlopen(url)
a=r.read().decode('utf-8')
data =json.loads(a)
parts = urlparse(url)
query_dict = parse_qs(parts.query)
query_dict['pageToken'] = data['nextPageToken']
build_url=urllib.parse.urlunparse(query_dict)

最佳答案

urlunparse()urllib.parse.urlparse() function 的倒数并处理完全不同的信息。它不是用于从字典创建新查询字符串的函数。

正确的逆是 urllib.parse.urlencode() function ,而是使用它,并将 doseq 参数设置为 True 来处理 urlparse() 返回的列表。查看urlparse() function documentation :

Use the urllib.parse.urlencode() function (with the doseq parameter set to True) to convert such dictionaries into query strings.

然后您可以将结果字符串传回 urlunparse(与其他 部分 一起减去查询字符串),或使用 namedtuple _replace() method创建一个更新的 URL parse result object ,它有一个 .geturl() method :

from urllib.parse import urlparse, parse_qs, urlencode

parts = urlparse(url)
query_dict = parse_qs(parts.query)
query_dict['pageToken'] = data['nextPageToken']
build_url = parts._replace(query=urlencode(query_dict, doseq=True)).geturl()

演示:

>>> from urllib.parse import urlparse, parse_qs, urlencode
>>> url = "http://example.com/foo/bar?part=snippet%2Creplies&allThreadsRelatedToChannelId=UCBqUbOUyAsTB7Xc7xQAHWZA&maxResults=100&pageToken=QURTSl9pMGhfWTZoU3dPX2dNendrSUZqRU1IVk5mTmVvVkpxT2c3dkJBbzdNME80SldsWnY0dHFYck9raUpxT0dqRm9pZ2k4Smo1Q2ZKSE5NWmZLWEVkcm5acC1paU9HUFpUaTlKdVljYjFqOUx5YzVVQzA4bmlSYkVxOGNISDVWY0E2ZmVuMVN5TFB6bWx2MGc%3D&key=%3Cexample+key+value%3E"
>>> data = {"nextPageToken": "<example next page token>"}
>>> parts = urlparse(url)
>>> query_dict = parse_qs(parts.query)
>>> query_dict['pageToken'] = data['nextPageToken']
>>> print(parts._replace(query=urlencode(query_dict, doseq=True)).geturl())
http://example.com/foo/bar?part=snippet%2Creplies&allThreadsRelatedToChannelId=UCBqUbOUyAsTB7Xc7xQAHWZA&maxResults=100&pageToken=%3Cexample+next+page+token%3E&key=%3Cexample+key+value%3E

关于python - 想要在使用 python 3 解析后构建 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52578043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com