大家好,在諸如網路爬蟲、web
應用開發等場景中,我們需要利用Python
完成大量的url
解析、生成等操作。
而在Python
生態中,無論是使用諸如urllib
之類的標準庫,還是各種第三方庫,可以用來有效處理url
的方法都非常之豐富。而今天我要給大家介紹的url
處理庫,則是我在實際使用中綜合考慮簡單易用性與運算速度後,最為滿意的!
在Python中利用yarl高效處理url
這個可以用來高效便捷處理url
的第三方庫叫做yarl
,使用pip install yarl
完成安裝後,下面我們來快速學習其主要的一些功能方法:
1.1 利用yarl解析url資訊
基於yarl
中的URL()
,我們可以從任意合法的url
中解析出下圖所示的各個構成部分:
先來看一個簡單的例子,其中對我保管每一篇部落格文章附件的github倉庫路徑url進行解析:
from yarl import URL
url = URL('https://github.com/CNFeffery/DataScienceStudyNotes/tree/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8')
原始的網址由於包含了中文等非ASCII
字元,所以貼上到程式碼中後變成了url編碼後的樣子,直接呼叫human_repr()
方法即可進行解碼還原:
而透過獲取對應url
各部分名稱的屬性,即可分別提取出相應資訊:
其中埠資訊是基於scheme
資訊按照常規情況進行推斷的,http
即為80
,https
即為443
,若需要獲取url
中顯式出現的埠資訊,可以使用explicit_port
:
針對url
中的hash
標籤資訊則可以透過fragment
取得:
若要解析的url
中包含query
引數資訊,則可以直接呼叫query
得到MultiDict
型別的返回結果,這是種特殊的字典型別,它允許存在重複的鍵,對於不存在重複的鍵值對,可以像普通字典那樣索引值,「否則」則需要透過getall()
方法來返回所傳入鍵對應的所有值列表:
可以感受到透過yarl
解析url
非常的方便~
1.2 利用yarl構造url
當我們需要基於已有的各部分資訊構造url
時,yarl
就更加方便了,基礎的方式是基於URL.build()
方法,以函式傳參的方式定義url
:
而如果你已經有了具體存在的yarl.URL
物件,想在此基礎上進行其他部分內容的設定,則可以使用一系列名稱格式為with_xxx()
的方法,其中xxx
就對應著各個部分的名稱:
特別地,針對查詢引數部分,還專門有update_query()
方法進行引數追加,它與with_query()
的區別可以從下面的例子中體會到:
1.3 利用/、%運算子快捷合成url
在yarl
中,針對/
、%
運算子進行了重寫,以支援類似下面例子的快捷操作,非常的方便:
除了上面介紹的yarl
常用功能以外,還有譬如利用is_absolute()
方法判斷url
是否為絕對路徑等其他實用功能,感興趣的讀者朋友們可以前往官方文件瞭解更多(https://yarl.aio-libs.org/en/latest/index.html)。
以上就是本文的全部內容~
文章來源於:費弗裡 Python大資料分析
文章連結:https://mp.weixin.qq.com/s/BDgGRpyeN-YtpmIb-Ts6CQ
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~