在 Python 中,我們經常需要處理 URL,例如解析 URL 的各個部分,修改 URL 的參數,構建 URL 的字符串,操作 URL 的對象等。
但是,Python 自帶的 URL 庫,例如 urllib, urlparse, urljoin 等,雖然功能強大,但是使用起來並不方便,有時候還會出現一些問題,例如 URL 的編碼和解碼,URL 的拼接和更新,URL 的兼容性和可讀性等。
幸運的是,有一個第三方庫可以幫助我們解決這個問題,那就是 yarl。
yarl 是什麼?
yarl 是一個用於處理 URL 的 Python 庫,它可以讓你方便地解析,修改,構建,和操作 URL。它有以下的特點和優勢:
- 它可以自動對 URL 進行編碼和解碼,保證 URL 的規范和可讀性。
- 它可以訪問和修改 URL 的各個部分,例如 scheme, host, path, query, fragment 等,提供了豐富的屬性和方法。
- 它可以使用簡潔的運算符來拼接和更新 URL,例如 /, %, , - 等,提供了靈活的語法。
目前,yarl 在 Github 的星標數超過 1000,每天在 PyPI 上的下載次數為 2-3 百萬之間,最近 30 天的下載量接近 1 億次。
![](https://news.xinpengboligang.com/upload/keji/3a7370d0b213fb1f05590f82f6f5e2e4.jpeg)
如何安裝 yarl?
安裝 yarl 非常簡單,隻需要使用 pip 命令即可:
pip install yarl
yarl 隻支持 Python 3,不支持 Python 2。如果你想要在 Python 2 中使用類似的功能,你可以嘗試使用 furl 這個庫,但是它的性能和兼容性可能不如 yarl。
如何使用 yarl?
使用 yarl 也非常簡單,隻需要導入 yarl 庫中的 URL 類,然後使用它的構造函數,屬性,方法,和運算符即可。下面我們來看一些具體的例子:
解析 URL
我們可以使用 URL 類的構造函數來創建一個 URL 對象,然後使用它的屬性來訪問和修改 URL 的各個部分,例如 scheme, host, path, query, fragment 等。例如:
from yarl import URL
url = URL("https://www.python.org/~guido?arg=1#frag")
print(url)
# https://www.python.org/~guido?arg=1#frag
print(url.scheme)
# https
print(url.host)
# www.python.org
print(url.path)
# /~guido
print(url.query_string)
# arg=1
print(url.query)
# <MultiDictProxy ('arg': '1')>
print(url.fragment)
# frag
print(url.parts)
# ('/', '~guido')
我們可以看到,URL 對象會自動對 URL 進行規范化,保證 URL 的正確性和一致性。如果我們傳入一個不合法的 URL,例如缺少 scheme 或 host,或者包含非法的字符,URL 對象會拋出一個 ValueError 異常。例如:
from yarl import URL
url = URL("www.python.org")
# ValueError: No schema suffix '://' found in 'www.python.org'
url = URL("https://www.python.org/你好")
# URL ('https://www.python.org/你好')
我們可以看到,URL 對象會自動對 URL 中的中文進行編碼,使用百分號編碼(percent-encoding)的方式,將中文轉換為 ASCII 字符。
構建 URL
我們可以使用 URL 類的構造函數來創建一個空的 URL 對象,然後使用它的方法和運算符來構建 URL 的各個部分,例如 with_scheme, with_host, with_path, with_query, with_fragment 等。例如:
from yarl import URL
url = URL('http://example.com')
print(url) # http://example.com
url = url.with_scheme("https")
print(url) # https://example.com
url = url.with_host("www.python.org")
print(url) # URL ('https://www.python.org')
url = url / "foo" / "bar"
print(url) # URL ('https://www.python.org/foo/bar')
url = url % {"arg": "1"}
print(url) # URL ('https://www.python.org/foo/bar?arg=1')
url = url.with_fragment("frag")
print(url) # URL ('https://www.python.org/foo/bar?arg=1#frag')
總結
本文介紹了 yarl 這個用於處理 URL 的 Python 庫,它可以讓你方便地解析,修改,構建,和操作 URL。你可以自動對 URL 進行編碼和解碼,訪問和修改 URL 的各個部分,使用簡潔的運算符來拼接和更新 URL,支持不同的 URL 類型,與其他的 Python 庫和框架兼容。