Skip to content

Instantly share code, notes, and snippets.

@rokcarl
Last active January 29, 2024 12:25
Show Gist options
  • Star 16 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rokcarl/20b5bf8dd9b1998880b7 to your computer and use it in GitHub Desktop.
Save rokcarl/20b5bf8dd9b1998880b7 to your computer and use it in GitHub Desktop.
Update URL parameters in Python 3.
import urllib.parse
url = "http://stackoverflow.com/search?q=question"
params = {'lang':'en','tag':'python'}
url_parts = list(urllib.parse.urlparse(url))
query = dict(urllib.parse.parse_qsl(url_parts[4]))
query.update(params)
url_parts[4] = urllib.parse.urlencode(query)
print(urllib.parse.urlunparse(url_parts))
@yinhedot
Copy link

yinhedot commented Nov 5, 2021

furl is better

@Batuto
Copy link

Batuto commented Nov 22, 2021

I think is more explicit to use url_parts.query instead of url_parts[4]

@morningdip
Copy link

import urllib.parse

url = "http://stackoverflow.com/search?q=question"
params = {'lang':'en','tag':'python'}

url_parts = urllib.parse.urlparse(url)
query = dict(urllib.parse.parse_qsl(url_parts.query))
query.update(params)

new_url = url_parts._replace(query=urllib.parse.urlencode(query)).geturl()

@lgg42
Copy link

lgg42 commented Jun 24, 2022

Thanks man! you the goat! 🚀

@radiskis
Copy link

Fixed version:

import urllib.parse

url = "http://stackoverflow.com/search?q=question"
params = {'lang':'en','tag':'python'}

url_parts = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(url_parts.query, keep_blank_values=True)
query.update(params)

new_url = url_parts._replace(query=urllib.parse.urlencode(query, doseq=True)).geturl()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment