urllib.parse is a module in the Python standard library used for handling URLs (Uniform Resource Locators). Its main functions include parsing URLs, constructing URLs, encoding/decoding special characters in URLs, and handling query parameters. Below are its core functionalities and usage examples:
1. Importing the Module
First, you need to import the <span>urllib.parse</span> module (or specific functions from it):
from urllib import parse # Import the entire module# Or directly import commonly used functionsfrom urllib.parse import urlparse, urlencode, quote, unquote, parse_qs
2. Core Functions and Examples
1. Parsing URLs:<span>urlparse()</span>
This function splits a complete URL into multiple components (such as scheme, netloc, path, query parameters, etc.) and returns a <span>ParseResult</span> object, which allows access to each part via attributes.
url = "https://www.example.com:8080/path/index.html?name=张三&age=20#fragment"result = parse.urlparse(url)# Accessing each partprint("Scheme:", result.scheme) # httpsprint("Netloc:", result.netloc) # www.example.com:8080print("Path:", result.path) # /path/index.htmlprint("Query:", result.query) # name=张三&age=20print("Fragment:", result.fragment) # fragmentprint("Username:", result.username) # (if the URL contains username and password, e.g., http://user:[email protected])print("Password:", result.password) # same as aboveprint("Port:", result.port) # 8080print("Hostname:", result.hostname) # www.example.com
2. Constructing URLs:<span>urlunparse()</span>
This function does the opposite of <span>urlparse()</span>, reassembling the split URL components into a complete URL.
Example::
# Define the components of the URL (the order of the tuple must match the order of urlparse)parts = ( "https", # scheme "www.example.com",# netloc "/new/path", # path "", # params (path parameters, rarely used) "id=1&page=2", # query "top" # fragment)full_url = parse.urlunparse(parts)print(full_url) # Output: https://www.example.com/new/path?id=1&page=2#top
3. Handling Query Parameters
(1) Dictionary to Query String:<span>urlencode()</span>
This function converts parameters in dictionary form into a query string for the URL (e.g., <span>key1=value1&key2=value2</span>), automatically handling special character encoding.
Example::
params = { "name": "张三", "age": 20, "hobby": ["reading", "coding"] # Lists will be converted to multiple parameters with the same name}query_string = parse.urlencode(params)print(query_string) # Output: name=%E5%BC%A0%E4%B8%89&age=20&hobby=reading&hobby=coding# Note: Chinese "张三" is encoded as %E5%BC%A0%E4%B8%89, spaces and other special characters are also automatically encoded
(2) Query String to Dictionary:<span>parse_qs()</span>
This function parses the query string in the URL into a dictionary (note: the same parameter may have multiple values, so values are stored in a list).
Example::
query_string = "name=%E5%BC%A0%E4%B8%89&age=20&hobby=reading&hobby=coding"params_dict = parse.parse_qs(query_string)print(params_dict)# Output:# {# 'name': ['张三'], # 'age': ['20'], # 'hobby': ['reading', 'coding']# }# Extract a single parameter (note to take the first element of the list)print(params_dict["name"][0]) # Output: 张三
4. URL Encoding / Decoding (Handling Special Characters)
URLs cannot directly contain Chinese characters, spaces, punctuation, and other special characters; they must be converted to the <span>%XX</span> format (e.g., space → <span>%20</span><code><span>, Chinese → </span><code><span>%E5%...</span>).
(1) Encoding:<span>quote()</span>
This function encodes a string into a URL-safe format (mainly used for encoding paths or parameter values).
Example::
# Encoding Chinese characterschinese = "张三的博客"encoded = parse.quote(chinese)print(encoded) # Output: %E5%BC%A0%E4%B8%89%E7%9A%84%E5%8D%9A%E5%AE%A2# Encoding a string with special charactersspecial_str = "hello world!@#"encoded = parse.quote(special_str)print(encoded) # Output: hello%20world!%40%23(space→%20, @→%40)
(2) Decoding:<span>unquote()</span>
This function restores the encoded <span>%XX</span> string back to the original string.
Example::
encoded_str = "%E5%BC%A0%E4%B8%89%E7%9A%84%E5%8D%9A%E5%AE%A2"decoded = parse.unquote(encoded_str)print(decoded) # Output: 张三的博客
5. Joining URLs:<span>urljoin()</span>
This function joins a base URL with a relative URL to form a complete URL, automatically handling path levels (similar to how browsers resolve relative paths).
Example::
base_url = "https://www.example.com/path1/"relative_url = "path2/file.html"full_url = parse.urljoin(base_url, relative_url)print(full_url) # Output: https://www.example.com/path1/path2/file.html# If the relative URL starts with /, it joins from the root pathrelative_url = "/newpath/file.html"full_url = parse.urljoin(base_url, relative_url)print(full_url) # Output: https://www.example.com/newpath/file.html# If the relative URL is a complete URL, it returns it directlyrelative_url = "https://www.other.com/page"full_url = parse.urljoin(base_url, relative_url)print(full_url) # Output: https://www.other.com/page
3. Common Use Cases
- Web Scraping / API Requests: Constructing parameterized URLs (using urlencode()), parsing URLs in responses (using urlparse()).
- URL Redirection Handling: Using urljoin() to concatenate base URLs and relative paths.
- Special Character Handling: Encoding (quote()) and decoding (unquote()) Chinese characters, spaces, etc. in URLs.
- Parsing URL Information: Extracting domain names, paths, query parameters, etc. (urlparse() + parse_qs()).
By using the <span>urllib.parse</span> module, you can systematically handle URL-related operations, avoiding format errors that may occur when manually concatenating URLs (such as request failures due to unencoded special characters).