Python利用yarl實(shí)現(xiàn)輕松操作url
1.簡(jiǎn)介
大家好我是費(fèi)老師,在諸如網(wǎng)絡(luò)爬蟲(chóng)、web
應(yīng)用開(kāi)發(fā)等場(chǎng)景中,我們需要利用Python
完成大量的url
解析、生成等操作。
而在Python
生態(tài)中,無(wú)論是使用諸如urllib
之類(lèi)的標(biāo)準(zhǔn)庫(kù),還是各種第三方庫(kù),可以用來(lái)有效處理url
的方法都非常之豐富。而今天費(fèi)老師我要給大家介紹的url
處理庫(kù),則是我在實(shí)際使用中綜合考慮簡(jiǎn)單易用性與運(yùn)算速度后,最為滿(mǎn)意的。
2.在Python中利用yarl高效處理url
這個(gè)可以用來(lái)高效便捷處理url
的第三方庫(kù)叫做yarl
,使用pip install yarl
完成安裝后,下面我們來(lái)快速學(xué)習(xí)其主要的一些功能方法:
2.1 利用yarl解析url信息
基于yarl
中的URL()
,我們可以從任意合法的url
中解析出下圖所示的各個(gè)構(gòu)成部分:
先來(lái)看一個(gè)簡(jiǎn)單的例子,其中對(duì)我保管每一篇博客文章附件的github
倉(cāng)庫(kù)路徑url
進(jìn)行解析:
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')
原始的網(wǎng)址由于包含了中文等非ASCII
字符,所以粘貼到代碼中后變成了url編碼后的樣子,直接調(diào)用human_repr()
方法即可進(jìn)行解碼還原:
而通過(guò)獲取對(duì)應(yīng)url
各部分名稱(chēng)的屬性,即可分別提取出相應(yīng)信息:
其中端口信息是基于scheme
信息按照常規(guī)情況進(jìn)行推斷的,http
即為80
,https
即為443
,若需要獲取url
中顯式出現(xiàn)的端口信息,可以使用explicit_port
:
針對(duì)url
中的hash
標(biāo)簽信息則可以通過(guò)fragment
取得:
若要解析的url
中包含query
參數(shù)信息,則可以直接調(diào)用query
得到MultiDict
類(lèi)型的返回結(jié)果,這是種特殊的字典類(lèi)型,它允許存在重復(fù)的鍵,對(duì)于不存在重復(fù)的鍵值對(duì),可以像普通字典那樣索引值,否則則需要通過(guò)getall()
方法來(lái)返回所傳入鍵對(duì)應(yīng)的所有值列表:
可以感受到通過(guò)yarl
解析url
非常的方便~
2.2 利用yarl構(gòu)造url
當(dāng)我們需要基于已有的各部分信息構(gòu)造url
時(shí),yarl
就更加方便了,基礎(chǔ)的方式是基于URL.build()
方法,以函數(shù)傳參的方式定義url
:
而如果你已經(jīng)有了具體存在的yarl.URL
對(duì)象,想在此基礎(chǔ)上進(jìn)行其他部分內(nèi)容的設(shè)置,則可以使用一系列名稱(chēng)格式為with_xxx()
的方法,其中xxx
就對(duì)應(yīng)著各個(gè)部分的名稱(chēng):
特別地,針對(duì)查詢(xún)參數(shù)部分,還專(zhuān)門(mén)有update_query()
方法進(jìn)行參數(shù)追加,它與with_query()
的區(qū)別可以從下面的例子中體會(huì)到:
2.3 利用/、%運(yùn)算符快捷合成url
在yarl
中,針對(duì)/
、%
運(yùn)算符進(jìn)行了重寫(xiě),以支持類(lèi)似下面例子的快捷操作,非常的方便:
除了上面介紹的yarl
常用功能以外,還有譬如利用is_absolute()
方法判斷url
是否為絕對(duì)路徑等其他實(shí)用功能,感興趣的讀者朋友們可以前往官方文檔了解更多(https://yarl.aio-libs.org/en/latest/index.html)。
到此這篇關(guān)于Python利用yarl實(shí)現(xiàn)輕松操作url的文章就介紹到這了,更多相關(guān)Python yarl操作url內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
tensorflow從ckpt和從.pb文件讀取變量的值方式
這篇文章主要介紹了tensorflow從ckpt和從.pb文件讀取變量的值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Python中三種時(shí)間格式轉(zhuǎn)換的方法
本文主要介紹了Python中三種時(shí)間格式轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)
在本篇內(nèi)容里小編給大家總結(jié)的是一篇關(guān)于python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-07-07django創(chuàng)建超級(jí)用戶(hù)過(guò)程解析
這篇文章主要介紹了django創(chuàng)建超級(jí)用戶(hù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09python3獲取控制臺(tái)輸入的數(shù)據(jù)的具體實(shí)例
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python3獲取控制臺(tái)輸入的數(shù)據(jù)的具體實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-08-08使用Python Pandas處理億級(jí)數(shù)據(jù)的方法
這篇文章主要介紹了使用Python Pandas處理億級(jí)數(shù)據(jù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06