最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【python】urllib.parse url解析

2022-01-28 13:54 作者:阿提艾斯  | 我要投稿

1、模塊功能

該模塊用于將URL字符串拆分為不同部分:協(xié)議、網(wǎng)絡(luò)位置、路徑、參數(shù)、查詢組件、片段標(biāo)識符。

首先了解一下url的結(jié)構(gòu),每個URL的主要結(jié)構(gòu)如下:

scheme://netloc/path;parameters?query#fragment

舉個例子:


url結(jié)構(gòu)

每個字段含義:

scheme: url協(xié)議說明符,比如http、https

netloc: 網(wǎng)絡(luò)位置,比如域名、ip

path: 資源路徑,網(wǎng)絡(luò)位置上的具體路徑,相當(dāng)于你電腦上某個文件的路徑

query: 查詢組件,是一些鍵值組合

fragment: 片段標(biāo)識符,用來定位在頁面的哪個位置


除了例子中的字段,還有一些其他字段:

params: 參數(shù),不過已經(jīng)不再使用這個字段了

username: 用戶名

password: 密碼

hostname: 小寫主機(jī)名

port: 端口號


2、模塊安裝

安裝好python之后就有這個庫。


3、模塊使用

urllib.parse中方法一句話總結(jié),標(biāo)紅函數(shù)經(jīng)常使用:

urllib.parse.urlparse(): 將url解析為六個部分(scheme、netloc、path、params、query、fragment)

urllib.parse.parse_qs(): 返回字典,配合urllib.parse.urlparse()的query字段可摘取查詢信息。

urllib.parse.parse_qsl(): 返回列表,元素是元組,配合urllib.parse.urlparse()的query字段可摘取查詢信息。

urllib.parse.urlunparse(): 返回url,把urlparse()的結(jié)果構(gòu)造成URL。

urllib.parse.urlsplit(): 類似urlparse(),但是少了params字段。

urllib.parse.urlunsplit(): 將urlsplit()結(jié)果再構(gòu)造回URL。

urllib.parse.urljoin(base, url):? 拼接URL,會把baseurl和url合并。通常會保留baseurl的scheme和netloc

urllib.parse.urldefrag(url): 可以將url中的fragment和前面的內(nèi)容分開,可以通過索引或明明屬性獲取到分割之后的url和fragment。

urllib.parse.unwrap(): 本地測試沒有找到該方法。。。

urllib.parse.quote(): 將一些特殊字符轉(zhuǎn)換為轉(zhuǎn)義符,比如:":"轉(zhuǎn)義為"%3A";“?”轉(zhuǎn)義為“%3F”;"="轉(zhuǎn)義為“%3D”;空格“ ”轉(zhuǎn)義為"%20".

urllib.parse.quote_plus(str): 和quote類似,但是空格會被轉(zhuǎn)義為"+"。

urllib.parse.quote_from_bytes(bytes): 和quote類似,但是參數(shù)為bytes對象。

urllib.parse.unquote(): 和quote()相反,將轉(zhuǎn)義符替換為原本的字符,比如會把"%3A"轉(zhuǎn)義為":"。

urllib.parse.unquote_plus(): 和unquote()類似,但是遇到“+”,還是會被轉(zhuǎn)義為空格。

urllib.parse.unquote_to_bytes(str): 將轉(zhuǎn)義符替換為bytes類型的字符,比如會將“%3A”替換為"b':'"

urllib.parse.urlencode(): 將一個包含有str或bytes對象的映射對象或二元組序列轉(zhuǎn)換為以百分號編碼的ASCII文本字符串。


可以結(jié)合代碼觀察觀察運行結(jié)果:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from urllib import parse


if __name__ == "__main__":
 ? ?url = "https://docs.python.org/zh-cn/3/library/urllib.parse.html?highlight=urllib#module-urllib.parse"
 ? ?qs = parse.urlparse(url)
 ? ?print("=" * 50)
 ? ?print(f"urlparse: {qs}")
 ? ?print(f"scheme: {qs.scheme}")
 ? ?print(f"netloc: {qs.netloc}")
 ? ?print(f"path: {qs.path}")
 ? ?print(f"query: {qs.query}")
 ? ?print(f"fragment: {qs.fragment}")
 ? ?print("=" * 50)

 ? ?parse_qs = parse.parse_qs(qs.query)
 ? ?print(f"parse_qs: {parse_qs}")
 ? ?print("=" * 50)

 ? ?parse_qsl = parse.parse_qsl(qs.query)
 ? ?print(f"parse_qsl: {parse_qsl}")
 ? ?print("=" * 50)

 ? ?urlunparse = parse.urlunparse(qs)
 ? ?print(f"urlunparse: {urlunparse}")
 ? ?print("=" * 50)

 ? ?urlsplit = parse.urlsplit(url)
 ? ?print(f"urlsplit: {urlsplit}")
 ? ?print("=" * 50)

 ? ?urlunsplit = parse.urlunsplit(urlsplit)
 ? ?print(f"urlunsplit: {urlunsplit}")
 ? ?print("=" * 50)

 ? ?urljoin = parse.urljoin("https://docs.python.org/zh-cn/3/library/urllib.parse.html", "/xxx/test.html")
 ? ?print(f"urljoin: {urljoin}")
 ? ?print("=" * 50)

 ? ?urldefrag = parse.urldefrag(url)
 ? ?print(f"urldefrag: {urldefrag}")
 ? ?print(f"url: {urldefrag.url}")
 ? ?print(f"fragment: {urldefrag.fragment}")
 ? ?print("=" * 50)

 ? ?quote = parse.quote(" ")
 ? ?print(f"quote; {quote}")
 ? ?print("=" * 50)

 ? ?quote_plus = parse.quote_plus(" ")
 ? ?print(f"quote_plus; {quote_plus}")
 ? ?print("=" * 50)

 ? ?quote_from_bytes = parse.quote_from_bytes(b" ")
 ? ?print(f"quote_from_bytes; {quote_from_bytes}")
 ? ?print("=" * 50)

 ? ?unquote = parse.unquote("%3A")
 ? ?print(f"unquote; {unquote}")
 ? ?print("=" * 50)

 ? ?unquote_plus = parse.unquote_plus("+")
 ? ?print(f"unquote_plus; {unquote_plus}")
 ? ?print("=" * 50)

 ? ?unquote_to_bytes = parse.unquote_to_bytes("%3A")
 ? ?print(f"unquote_to_bytes; {unquote_to_bytes}")
 ? ?print("=" * 50)

 ? ?urlencode = parse.urlencode(parse_qs)
 ? ?print(f"urlencode; {urlencode}")
 ? ?print("=" * 50)

運行結(jié)果:

運行結(jié)果

4、遇到的問題

4.1 怎么url中query字段之前的內(nèi)容,不包括“?”

比如url是“https://www.xxx.com?a=123”只獲取“https://www.xxx.com”,沒發(fā)現(xiàn)好辦法,字符串截取或拼接吧。


5、參考資料

5.1?https://docs.python.org/zh-cn/3.9/library/urllib.parse.html?highlight=urllib#module-urllib.parse

【python】urllib.parse url解析的評論 (共 條)

分享到微博請遵守國家法律
铜川市| 卢龙县| 琼结县| 舟山市| 哈尔滨市| 上犹县| 大姚县| 凤翔县| 康马县| 余庆县| 罗田县| 罗平县| 汉川市| 旌德县| 鄄城县| 东港市| 永登县| 淮阳县| 平原县| 青河县| 河池市| 来安县| 凤山县| 绍兴市| 五常市| 怀仁县| 成都市| 二连浩特市| 江达县| 舟曲县| 长兴县| 阿城市| 罗山县| 增城市| 曲周县| 渑池县| 日照市| 张掖市| 彰武县| 桦川县| 拉萨市|