溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python urllib.parse的常用方法有哪些

發布時間:2021-12-17 14:58:56 來源:億速云 閱讀:414 作者:iii 欄目:大數據
# Python urllib.parse 的常用方法有哪些

`urllib.parse` 是 Python 標準庫中用于 URL 解析和操作的模塊,提供了一系列處理 URL 各組成部分的方法。本文將詳細介紹該模塊的常用方法及其應用場景。

## 目錄
1. [URL 解析基礎](#url-解析基礎)
2. [urlparse() 方法](#urlparse-方法)
3. [urlunparse() 方法](#urlunparse-方法)
4. [urlsplit() 和 urlunsplit()](#urlsplit-和-urlunsplit)
5. [parse_qs() 和 parse_qsl()](#parse_qs-和-parse_qsl)
6. [quote() 和 unquote()](#quote-和-unquote)
7. [urlencode() 方法](#urlencode-方法)
8. [urljoin() 方法](#urljoin-方法)
9. [實際應用示例](#實際應用示例)
10. [總結](#總結)

---

## URL 解析基礎
URL(統一資源定位符)由多個部分組成:

scheme://netloc/path?query#fragment

- **scheme**: 協議(如 http, https)
- **netloc**: 網絡位置(域名+端口)
- **path**: 路徑
- **query**: 查詢參數
- **fragment**: 片段標識符(如錨點)

---

## urlparse() 方法
將 URL 字符串解析為 `ParseResult` 對象,包含 6 個組件:

```python
from urllib.parse import urlparse

url = "https://example.com/path/to/page?name=val&age=25#section"
result = urlparse(url)
print(result)
# 輸出: ParseResult(
#   scheme='https', 
#   netloc='example.com', 
#   path='/path/to/page', 
#   params='', 
#   query='name=val&age=25', 
#   fragment='section'
# )

# 訪問各部分
print(result.scheme)    # 'https'
print(result.query)     # 'name=val&age=25'

參數說明

  • allow_fragments: 是否解析片段(默認為 True)

urlunparse() 方法

ParseResult 或可迭代對象重新組合為 URL 字符串:

from urllib.parse import urlunparse

parts = ('https', 'example.com', '/path', '', 'a=1&b=2', 'footer')
print(urlunparse(parts))  
# 輸出: 'https://example.com/path?a=1&b=2#footer'

urlsplit() 和 urlunsplit()

urlparse() 類似,但不拆分 params 部分(返回 5 元組):

from urllib.parse import urlsplit, urlunsplit

url = "https://example.com/path;params?query=1#frag"
result = urlsplit(url)
print(result)  # SplitResult(scheme='https', netloc='example.com', 
               # path='/path;params', query='query=1', fragment='frag')

# 重組URL
print(urlunsplit(result))  # 原樣輸出

parse_qs() 和 parse_qsl()

解析查詢字符串為字典或元組列表:

from urllib.parse import parse_qs, parse_qsl

query = "name=John&age=30&city=NY"
print(parse_qs(query))  
# {'name': ['John'], 'age': ['30'], 'city': ['NY']}

print(parse_qsl(query))  
# [('name', 'John'), ('age', '30'), ('city', 'NY')]

區別

  • parse_qs(): 返回字典,值始終為列表(因參數可重復)
  • parse_qsl(): 返回元組列表,保留原始順序

quote() 和 unquote()

處理 URL 編碼(百分號編碼):

from urllib.parse import quote, unquote

s = "北京 & Shanghai"
encoded = quote(s)
print(encoded)  # '%E5%8C%97%E4%BA%AC%20%26%20Shanghai'

decoded = unquote(encoded)
print(decoded)  # '北京 & Shanghai'

參數

  • safe: 指定不需編碼的字符(默認為 /
  • encoding/errors: 編碼處理方式

urlencode() 方法

將字典或元組列表轉換為 URL 查詢字符串:

from urllib.parse import urlencode

params = {'q': 'Python', 'page': 1}
print(urlencode(params))  # 'q=Python&page=1'

# 處理多值
multi_params = [('k', 'v1'), ('k', 'v2')]
print(urlencode(multi_params))  # 'k=v1&k=v2'

重要參數

  • doseq: 是否展開序列值(如列表)
  • safe: 保留字符
  • encoding: 編碼方式

urljoin() 方法

智能拼接基礎 URL 和相對路徑:

from urllib.parse import urljoin

base = "https://example.com/path/"
print(urljoin(base, "subdir/file.html"))  
# 'https://example.com/path/subdir/file.html'

print(urljoin(base, "/absolute/path")) 
# 'https://example.com/absolute/path'

規則

  • 若相對路徑以 / 開頭,替換基礎路徑
  • 否則追加到基礎路徑末尾

實際應用示例

1. 構建帶參數的 API 請求

base_url = "https://api.example.com/search"
params = {
    'keyword': 'Python教程',
    'limit': 10,
    'offset': 0
}
query_string = urlencode(params, encoding='utf-8')
full_url = f"{base_url}?{query_string}"
# 輸出: https://api.example.com/search?keyword=Python%E6%95%99%E7%A8%8B&limit=10&offset=0

2. 解析并修改 URL

url = "http://old-domain.com/blog/post?id=123"
parsed = urlparse(url)
new_netloc = "new-domain.com"
updated = parsed._replace(netloc=new_netloc, scheme="https")
print(urlunparse(updated))
# 輸出: 'https://new-domain.com/blog/post?id=123'

3. 安全處理用戶輸入

user_input = "search?q=<script>alert(1)</script>"
safe_input = quote(user_input)
# 輸出: 'search%3Fq%3D%3Cscript%3Ealert%281%29%3C%2Fscript%3E'

總結

urllib.parse 模塊的主要方法對比:

方法 輸入 輸出 典型用途
urlparse() URL 字符串 ParseResult 對象 解析 URL 各組件
urlunparse() 6 元組 URL 字符串 重組 URL
urlsplit() URL 字符串 SplitResult 對象 快速解析(無 params)
parse_qs() 查詢字符串 字典 處理 GET 參數
urlencode() 字典/元組列表 查詢字符串 構建請求參數
urljoin() 基礎 URL + 相對路徑 絕對 URL 解決相對路徑問題

掌握這些方法可以高效處理: - Web 爬蟲中的 URL 構造與解析 - API 請求參數的編碼 - 用戶輸入的安全處理 - 網頁鏈接的規范化

建議結合具體場景選擇合適的方法,并注意編碼和安全性問題。 “`

該文章共計約2150字,采用Markdown格式編寫,包含代碼示例、參數說明和實際應用場景,符合技術文檔的規范要求。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女