urllib.parse

解析鏈接

一、簡介 urllib.parse

它定義了處理 URL 的標準接口,例如實現 URL 各部 分的抽取、合併以及鏈接轉換

二、函數介紹

1 urlparse()6

功能:實現URL的識別和分段

(1)代碼實例:

from urllib import parse
url1='http://www.baidu.com/index.html;user?id=5#comment'
result=parse.urlparse(url1)
print(type(result))
print(result)

運行結果:

<class 'urllib.parse.ParseResult'>
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

(2)定義域值域

url1='http://www.baidu.com/index.html;user?
result=parse.urlparse(url1)

定義域:

URL

參數:
urllib.parse.urlparse(urlstring, scheme=, allow_fragments=True)
urlstring :

待解析的URL

scheme:

默認協議,如果解析URL中有協議時,解析爲原有的協議,URL中沒有協議,則解析爲默認協議。

allow_fragments:

是否忽略fragment,如果被設置爲False,fragment部分就會被忽略,它被解析爲path,parameter,或者query的一部分,而fragment部分爲空。

值域:

(元組)ParseResult對象 一個標準的鏈接格式:

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

;後面是參數

?後面是查詢條件 query, 一般用作 GET 類型的 URL;

#後面是錨點,用於直接定位頁面內部的下拉位置。

(3)ParseResult中各屬性的獲取方法

返回結果 ParseResult 實際上是一個元組,我們可以用索引順序來獲取,也可以用屬性名獲取。

2 urlunparse()

功能:構造URL

(1)代碼實例:

from urllib.parse import urlunparse

data=['https','www.baidu.com','index.html','user','id=5','comment']

print(urlunparse(data))
https://www.baidu.com/index.html;user?id=5#comment

(2)定義域值域

定義域:

它接受的參數是一個可迭代對象, 但是它的長度必須是 6, 否則會拋出參數數量不足或者過多的問題,可使用列表元組等數據類型。

值域:

一個包含六個字段的完整URL

3 urlsplit()5

與urlparse()非常相似,只是parmas部分被分到path,只有五個部分

返回結果是 SplitResult , 它其實也是一個元組類型, 既可以用屬性獲取值,也可以 用索引來獲取

4 urlunsplit()

與 urlunparse()類似,它也是將鏈接各個部分組合成完整鏈接的方法,傳人的參數也是一個可迭 代對象,例如列表、 元組等,唯一的區別是長度必須爲 5

5 urljoin()

功能:

(1)我們可以提供一個 base_url (基礎鏈 接 ) 作爲第一個參數,將新的鏈接作爲第二個參數,該方法會分析 base_url 的 scheme、 netloc 和 path 這 3 個內容並對新鏈接缺失的部分進行補充,最後返回結果。

定義域:

基礎URL,待補充完整的URL

值域:

補充好scheme,netloc,path的新URL

注意:

ba咒一url 提供了三項內容 scheme、 netloc 和 path。 如果這 3 項在新的鏈接裏不存在, 就予以補充;如果新的鏈接存在,就使用新的鏈接的部分。 而 base_url 中的 params 、 query 和 fragment 是不起作用的

6urlencode()字典–字符串

將字典格式轉化爲URL中查詢字符串需要的格式

(1)代碼實例:

from urllib.parse import urlencode

params={'name':'yue',
        'age':'21'}
base_url='https://www.baidu.com?'
url=base_url+urlencode(params)
print(url)

運行結果

https://www.baidu.com?name=yue&age=21

(2)定義域:

字典

(3)值域:

字符形式的字典,用於構造URL中的查詢字符串。

7parse_qs()字符串–字典

功能:

有了序列化,必然就有反序列化。 如果我們有一串 GET 請求參數,利用 parse_qs()方法, 就可 以將它轉回字典

代碼實例:

from urllib.parse import parse_qs
query='name=yue&age=21'
dict=parse_qs(query)
print(dict)

運行結果

{'name': ['yue'], 'age': ['21']}

定義域:

URL中的查詢字符串

值域:

字典

8 parse_qsl()字符串–元組組成的列表

將參數轉化爲元組組成的列表

代碼實例

from urllib.parse import parse_qsl 
query= 'name=germey&age=22' print(parse_qsl(query)) 

運行結果如下:

[('name’,’germey'), ('age ', '22')] 

定義域:

URL中的查詢字符串

值域:

元組組成的列表

summary:

urlencode 將字典序列化爲字符串

parse_qs將字符串轉化爲字典

parse_qsl將字符串轉化爲元組組成的列表

9 quote()中文–編碼

功能:將中文字符轉化爲URL編碼

代碼實例

from urllib.parse import quote
from urllib.request import urlopen
keyword='明月'
base_url='https://www.baidu.com?wd='
url=base_url+quote(keyword)
response=urlopen(url)
print(response.read().decode('utf-8'))

定義域:

中文

值域:

格式化可用於URL的中文編碼

10 unquote()

解碼URL

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章