urllib.parse can build and inspect URL query strings without making network requests.

URL encoding Encoding turns query parameters into text that is safe to place after `?` in a URL.

URL Query Builder

page
url_query_builder.py
Replay: real traced execution (multi-file project)
from urllib.parse import urlencode, urlparse, parse_qs

page = 2

params = {
    "q": "python trace",
    "page": str(page),
    "sort": "recent",
}

query = urlencode(params)
url = "https://example.com/search?" + query
parsed = urlparse(url)
values = parse_qs(parsed.query)

print("path=" + parsed.path)
print("query=" + query)
print("page=" + values["page"][0])
from urllib.parse import urlencode, urlparse, parse_qs

page = 1

params = {
    "q": "python trace",
    "page": str(page),
    "sort": "recent",
}

query = urlencode(params)
url = "https://example.com/search?" + query
parsed = urlparse(url)
values = parse_qs(parsed.query)

print("path=" + parsed.path)
print("query=" + query)
print("page=" + values["page"][0])
from urllib.parse import urlencode, urlparse, parse_qs

page = 5

params = {
    "q": "python trace",
    "page": str(page),
    "sort": "recent",
}

query = urlencode(params)
url = "https://example.com/search?" + query
parsed = urlparse(url)
values = parse_qs(parsed.query)

print("path=" + parsed.path)
print("query=" + query)
print("page=" + values["page"][0])
  1. page ← 2, params ← {'q': 'python trace', 'page': '2', 'sort': 'recent'}

    3page→ 2 = 2  #@page=1, 545params→ {'q': 'python trace', 'page': '2', 'sort': 'recent'} = {6    "q": "python trace",7    "page": str(page2),8    "sort": "recent",9}1011query→ q=python+trace&page=2&sort=recent = urlencode(params{'q': 'python trace', 'page': '2', 'sort': 'recent'})12url→ https://example.com/search?q=python+trace&page=2&sort=recent = "https://example.com/search?" + queryq=python+trace&page=2&sort=recent13parsed→ ParseResult(scheme='https', netloc='example.com', path='/search', params='', query='q=python+trace&page=2&sort=recent', fragment='') = urlparse(urlhttps://example.com/search?q=python+trace&page=2&sort=recent)14values→ {'q': ['python trace'], 'page': ['2'], 'sort': ['recent']} = parse_qs(parsed.queryq=python+trace&page=2&sort=recent)1516print("path=" + parsed.path/search)17print("query=" + queryq=python+trace&page=2&sort=recent)18print("page=" + values["page"][0]2)
    outputpath=/search
    query=q=python+trace&page=2&sort=recent
    page=2
  1. page ← 1, params ← {'q': 'python trace', 'page': '1', 'sort': 'recent'}

    3page→ 1 = 145params→ {'q': 'python trace', 'page': '1', 'sort': 'recent'} = {6    "q": "python trace",7    "page": str(page1),8    "sort": "recent",9}1011query→ q=python+trace&page=1&sort=recent = urlencode(params{'q': 'python trace', 'page': '1', 'sort': 'recent'})12url→ https://example.com/search?q=python+trace&page=1&sort=recent = "https://example.com/search?" + queryq=python+trace&page=1&sort=recent13parsed→ ParseResult(scheme='https', netloc='example.com', path='/search', params='', query='q=python+trace&page=1&sort=recent', fragment='') = urlparse(urlhttps://example.com/search?q=python+trace&page=1&sort=recent)14values→ {'q': ['python trace'], 'page': ['1'], 'sort': ['recent']} = parse_qs(parsed.queryq=python+trace&page=1&sort=recent)1516print("path=" + parsed.path/search)17print("query=" + queryq=python+trace&page=1&sort=recent)18print("page=" + values["page"][0]1)
    outputpath=/search
    query=q=python+trace&page=1&sort=recent
    page=1
  1. page ← 5, params ← {'q': 'python trace', 'page': '5', 'sort': 'recent'}

    3page→ 5 = 545params→ {'q': 'python trace', 'page': '5', 'sort': 'recent'} = {6    "q": "python trace",7    "page": str(page5),8    "sort": "recent",9}1011query→ q=python+trace&page=5&sort=recent = urlencode(params{'q': 'python trace', 'page': '5', 'sort': 'recent'})12url→ https://example.com/search?q=python+trace&page=5&sort=recent = "https://example.com/search?" + queryq=python+trace&page=5&sort=recent13parsed→ ParseResult(scheme='https', netloc='example.com', path='/search', params='', query='q=python+trace&page=5&sort=recent', fragment='') = urlparse(urlhttps://example.com/search?q=python+trace&page=5&sort=recent)14values→ {'q': ['python trace'], 'page': ['5'], 'sort': ['recent']} = parse_qs(parsed.queryq=python+trace&page=5&sort=recent)1516print("path=" + parsed.path/search)17print("query=" + queryq=python+trace&page=5&sort=recent)18print("page=" + values["page"][0]5)
    outputpath=/search
    query=q=python+trace&page=5&sort=recent
    page=5