Search code examples
pythonspliturlliburlparseurlsplit

Split list returned from urlparse in python


I am able to parse url using urlsplit and get parameters using query argument.

url is '/api/v1/test?par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar'

After using urlsplit and query I get

'par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar'

And after running parse_qs on above I get

{'par2': ['val2a=1&val2b=foo&val2c=bar'], 'par1': ['val1']}

Here is output which is exactly what I need

'par1': ['val1']

I get return as list for one of parameter which has decoded data as below

'par2': ['val2a=1&val2b=foo&val2c=bar]

I can split par2 using split method at & and = and get val2a...

But is there any better way for this?


Solution

  • You can again use parse_qs on the value of par2

    >>> url = '/api/v1/test?par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar'
    >>> q = parse_qs(urlparse(url).query)
    >>> q
    {'par2': ['val2a=1&val2b=foo&val2c=bar'], 'par1': ['val1']}
    >>> parse_qs(q['par2'][0])
    {'val2b': ['foo'], 'val2c': ['bar'], 'val2a': ['1']}
    

    After the last result you can get the value of val2a etc.