Small Standard Library Projects
URL Query Builder
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
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])
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
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
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