如何处理`urllib.parse.parse\u qsl()`?

2024-09-22 16:38:04 发布

您现在位置:Python中文网/ 问答频道 /正文

;不能由parse_qsl()处理。有没有办法让它知道;?谢谢。你知道吗

>>> import urllib.parse
>>> urllib.parse.parse_qsl('http://example.com/?q=abc&p=1;2;3')
[('http://example.com/?q', 'abc'), ('p', '1')]

Tags: importcomhttpparseexampleurllibabc办法
2条回答

实际上,它确实正确地对待它们(作为分隔符)。您只需告诉它保留空白值:

>>> urllib.parse.parse_qsl('q=abc&p=1;2;3', keep_blank_values=True)
[('q', 'abc'), ('p', '1'), ('2', ''), ('3', '')]

注意,您不应该将整个url传递给parse_qsl,只传递querystring部分。你知道吗

最好确保您正在处理的URL具有分号URL编码。e、 g.http://example.com/?q=abc&p=1%3B2%3B3

如果出于某种原因你不能做到以上几点,你可以这样做:

from urllib.parse import urlparse, unquote_plus

url = "http://example.com/?q=abc&p=1;2;3"
parts = urlparse(url)
qs = parts.query
pairs = [p.split("=", 1) for p in qs.split("&")]
decoded = [(unquote_plus(k), unquote_plus(v)) for (k, v) in pairs]
>>> decoded
[('q', 'abc'), ('p', '1;2;3')]

上面的代码假设了有关查询字符串的一些情况。e、 g.所有键都有值。如果你想要的东西,使较少的假设,请参阅^{} source code。你知道吗

相关问题 更多 >