我写了下面的代码来像这样从url中提取Get参数:
from urllib.parse import urlparse
from urllib.parse import parse_qs
url = 'https://www.example.com/some_path?some_key=some_value&tt=new_value'
parsed_url = urlparse(url)
for val in parse_qs(parsed_url.query):
print(val)
它与上面的 url 一起工作很好但是一旦我做了 url-encoding(这仍然是一个有效的 url 方案,因为浏览器接受它)像这样:
https://www.example.com/some_path?some_key%3Dsome_value%26tt%3Dnew_value
我的代码没有输出任何东西,这是为什么以及如何解决?
注意:我知道你们中的一些人可能建议对输入进行 url 解码,但我认为这不会解决所有情况,如果有另一种有效的 url 编码,应该正确解析怎么办?
parse_qs
解码名称和值中的 % 编码,但它需要查询名称和值之间的文字 =
和(默认情况下)文字 &
作为分隔符。您可以在源here中查看它 - parse_qsl
完成工作,例如它在 = 上执行字符串拆分以分隔查询名称和值。
从你的最后一句话来看,我认为这不是你想要的,但是
parse_qs(urllib.parse.unquote(parsed_url.query))
会起作用。