yarl,一個超強的 Python 庫

2024年2月6日 20点热度 0人点赞

在 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 億次。

如何安裝 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 庫和框架兼容。