最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何實(shí)現(xiàn)轉(zhuǎn)換URL詳解

 更新時(shí)間:2019年07月02日 15:28:28   投稿:yaominghui  
這篇文章主要介紹了Python如何實(shí)現(xiàn)轉(zhuǎn)換URL詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

設(shè)計(jì)一個(gè)算法,將URL轉(zhuǎn)換成5部分,分別是:schema、netloc、path、query_params、fragment。

問題

URL的中文名叫統(tǒng)一資源定位符,就是咱們常說(shuō)的網(wǎng)址,設(shè)計(jì)一個(gè)算法,將URL轉(zhuǎn)換成5部分,分別是:schema、netloc、path、query_params、fragment。

<scheme>://<netloc>/<path>?<query_params>#<fragment>

一圖勝千言:

應(yīng)用場(chǎng)景

在實(shí)際應(yīng)用場(chǎng)景中,有些聚合網(wǎng)站會(huì)把URL里面netloc提取出來(lái)。

分析

這里沒有什么特別復(fù)雜的算法,因?yàn)槊坎糠侄加幸粋€(gè)特別的字符,所以,如果你熟練Python的字符串操作和正則表達(dá)式使用的話那么就很簡(jiǎn)單。

知識(shí)點(diǎn)

字符串的常用方法split、find、join、lower、切片的使用,re模塊下面的常用方法。另外還有關(guān)于如何使用 namedtuple 定義一個(gè)簡(jiǎn)單類的操作

實(shí)現(xiàn)

第一種方式使用字符串提供的方法,就是根據(jù)關(guān)鍵字符進(jìn)行切分。整體思路是利用字符串的切片功能不斷進(jìn)行切分,代碼稍顯復(fù)雜。

URL = namedtuple("URL", ["schema", "netloc", "path", "params", "fragment"])
def url_parse1(url):
assert url.startswith("http")
# 初始化每部分為空
schema = netloc = params = fragment = path = None
# 從 :// 切分 url,前面部分是shema
i = url.find('://')
if i > 0:
schema = url[:i]
url = url[i + 3:]
# 獲取netloc
for c in "/?#": # 三個(gè)分隔符的順利很重要
a = url.find(c)
if a > 0: # 只要有三個(gè)字符中的任意字符,立即切分,前部分就是netloc,剩下的部分進(jìn)行后續(xù)處理
netloc, url = url[0:a], url[a:]
break
else:
netloc, url = url, '' # 如果三個(gè)分隔符都不在url中,那么這是一個(gè)只包含
# 同樣的方式獲取path
for c in "?#":
a = url.find(c)
if a > 0:
path, url = url[0:a], url[a:]
break
else:
path, url = url or None, ''
if "#" in url:
url, fragment = url.split("#", 1)
if '?' in url:
url, params = url.split('?', 1)
return URL(schema=schema, netloc=netloc, path=path, params=_params_parse(params), fragment=fragment)
def _params_parse(params):
if not params:
return None
pairs = [s for s in params.split('&')]
param_dict = dict()
for pair in pairs:
k, v = pair.split('=', 1)
param_dict[k] = v
return param_dict

第二種方式就是用正則表達(dá)式,主要考驗(yàn)?zāi)銓懻齽t的能力

def url_parse2(url):
rex = r'^(http[s]?):\/\/([^\/\s]+)([\/\w\-\.]+[^#?\s]*)?(\?([^#]*))?(#(.*))?$'
schema = netloc = params = fragment = path = ''
pattern = re.compile(rex)
match = pattern.match(url)
if match:
schema = match.group(1)
netloc = match.group(2)
path = match.group(3)
params = match.group(5)
fragment = match.group(7)
return URL(schema=schema, netloc=netloc, path=path, params=_params_parse(params), fragment=fragment)

通過正則表達(dá)式的分組功能提取每部分,關(guān)于正則表達(dá)式推薦兩個(gè)資源

在線調(diào)試正則表達(dá)式

Python中正則表達(dá)式介紹, 這是一篇比較完整介紹Python中正則表達(dá)式的文章,如果你能讀懂里面的每句話,并且實(shí)踐后,你一定能寫出上面這樣的表達(dá)式出來(lái)。

當(dāng)然,你也可以直接使用urlparse模塊中現(xiàn)成的方式來(lái)實(shí)現(xiàn)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的示例

    python 實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的示例

    本篇文章主要分享python學(xué)生管理系統(tǒng)的使用,文章非常詳細(xì)地介紹了通過示例代碼實(shí)現(xiàn)的學(xué)生管理系統(tǒng),該系統(tǒng)對(duì)每個(gè)人的研究或工作都有一定的參考學(xué)習(xí)價(jià)值,希望你能在其中有所收獲。
    2020-11-11
  • Python中values()函數(shù)用法簡(jiǎn)單示例

    Python中values()函數(shù)用法簡(jiǎn)單示例

    這篇文章主要給大家介紹了關(guān)于Python中values()函數(shù)用法的相關(guān)資料,python內(nèi)置的values()函數(shù)返回一個(gè)字典中所有的值,文中給出了代碼示例,需要的朋友可以參考下
    2023-09-09
  • Python和Excel的完美結(jié)合的常用操作案例匯總

    Python和Excel的完美結(jié)合的常用操作案例匯總

    這篇文章主要介紹了Python和Excel的完美結(jié)合的常用操作案例匯總,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 利用Python將list列表寫入文件并讀取的方法匯總

    利用Python將list列表寫入文件并讀取的方法匯總

    因?yàn)閷?shí)驗(yàn)需要,實(shí)現(xiàn)了一下寫入txt文件,下面這篇文章主要給大家介紹了關(guān)于如何利用Python將list列表寫入文件并讀取的幾種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • Python機(jī)器學(xué)習(xí)之手寫KNN算法預(yù)測(cè)城市空氣質(zhì)量

    Python機(jī)器學(xué)習(xí)之手寫KNN算法預(yù)測(cè)城市空氣質(zhì)量

    KNN(K-Nearest Neighbor)最鄰近分類算法是數(shù)據(jù)挖掘分類(classification)技術(shù)中常用算法之一,本文將介紹如何通過KNN算法實(shí)現(xiàn)城市空氣質(zhì)量的預(yù)測(cè),感興趣的同學(xué)可以了解一下
    2021-12-12
  • Python3如何實(shí)現(xiàn)列表模糊匹配列表

    Python3如何實(shí)現(xiàn)列表模糊匹配列表

    這篇文章主要介紹了Python3如何實(shí)現(xiàn)列表模糊匹配列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python密碼學(xué)各種加密模塊教程

    python密碼學(xué)各種加密模塊教程

    這篇文章主要為大家介紹了python密碼學(xué)各種加密模塊教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • pycharm下載包的時(shí)候出現(xiàn) no information available的解決

    pycharm下載包的時(shí)候出現(xiàn) no information available的解決

    這篇文章主要介紹了pycharm下載包的時(shí)候出現(xiàn) no information available的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python基于三階貝塞爾曲線的數(shù)據(jù)平滑算法

    python基于三階貝塞爾曲線的數(shù)據(jù)平滑算法

    這篇文章主要介紹了python基于三階貝塞爾曲線的數(shù)據(jù)平滑算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python類中方法getitem和getattr詳解

    Python類中方法getitem和getattr詳解

    這篇文章主要介紹了Python類中方法getitem和getattr詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論

滦南县| 永寿县| 通河县| 龙泉市| 锡林浩特市| 民勤县| 尼勒克县| 大荔县| 庄浪县| 庐江县| 峡江县| 庐江县| 治县。| 奉新县| 庄浪县| 凤城市| 宁河县| 崇义县| 铜陵市| 澄城县| 阳原县| 蒙山县| 宁晋县| 平顺县| 慈利县| 清涧县| 岳阳县| 尚义县| 阿合奇县| 固原市| 舒兰市| 合川市| 汽车| 连城县| 桐柏县| 全州县| 凤冈县| 巴中市| 丰都县| 阿拉善右旗| 安化县|