中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

urllib庫常用函數有哪些

發布時間:2022-02-25 10:35:22 來源:億速云 閱讀:189 作者:iii 欄目:開發技術

這篇文章主要介紹了urllib庫常用函數有哪些的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇urllib庫常用函數有哪些文章都會有所收獲,下面我們一起來看看吧。

一、什么是 urllib 庫?

       Python3 中將 Python2 中的 urllib 和 urllib2 兩個庫整合為一個 urllib 庫,所以現在一般說的都是 Python3 中的 urllib 庫,那么 urllib 庫是什么呢?如何使用 urllib 庫?urllib 庫的常用函數有哪些呢?

urllib主要分為以下四個功能模塊:

  • urllib.request(請求模塊) 

  • urllib.parse(解析模塊) 

  • urllib.error(異常處理模塊) 

  • urllib.robotparser(robots.txt 文件解析模塊) 

       urllib 是 Python 內置的 HTTP 請求庫,無需安裝,可直接使用,也是爬蟲開發人員常用的一個庫,今天小編就給大家總結一下 urllib 庫一些常用函數的基本用法。

二、urllib用法講解 

1、urllib.request.urlopen() 函數

創建一個標識遠程 url 的文件對象,然后像本地文件一樣操作這個類文件對象來獲取遠程數據。語法如下:

urllib.request.urlopen(url,data = None,[timeout]*,cafile = None,capath = None,cadefault = False,context = None)

  • url:請求的 url;

  • data:請求的 data,如果設置了這個值,那么將變成 post 請求; 

  • timeout:設置網站的訪問超時時間句柄對象; 

  • cafile和capath:用于 HTTPS 請求中,設置 CA 證書及其路徑。 

示例

from urllib import request 

response = request.urlopen('http://www.baidu.com') #get方式請求 

print(response.read().decode('utf-8') #獲取響應的內容并進行解碼操作 

urlopen() 返回對象提供的方法有:

  1. read()、readline()、readlines()、fileno()、close():對 HTTPR esponse 類型數據進行操作;

  2. info():返回 HTTPMessage 對象,表示遠程服務器 返回的頭信息 ;

  3. getcode():返回 HTTP 狀態碼 geturl():返回請求的 url;

  4. getheaders():響應的頭部信息 ;

  5. getheader('Server'):返回響應頭指定參數 Server 的值;

  6. status:返回狀態碼 ;

  7. reason:返回狀態的詳細信息 。

2、urllib.request.urlretrieve() 函數

這個函數可以方便的將網頁上的一個文件保存到本地。語法如下: 

urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

  • url:遠程數據的地址 ;

  • filename:保存文件的路徑,如果為空,則下載為臨時文件 ;

  • reporthook:鉤子函數 連接服務器成功以及每個數據塊下載完成時各調用一次,包含 3 個參數,依次為已經下載的數據塊,數據塊的大小,總文件的大小,可用于顯示下載進度 ;

  • data:post 到服務器的數據。    

示例

from urllib import request 

request.urlretrieve('http://www.baidu.com/','baidu.html') #將百度的首頁信息下載到本地

3、urllib.parse.urlencode() 函數

urlencode 可以把字典數據轉換為 URL 編碼的數據。語法如下:

urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)

  • query:查詢參數;

  • doseq:序列元素是否單獨轉換;

  • safe:安全默認值;

  • encoding:編碼;

  • errors:錯誤默認值;

  • quote_via:查詢參數的成份是str時,safe, encoding, errors 傳遞給的指定函數,默認為 quote_plus(),加強版 quote()。

示例

from urllib import parse

data = {'姓名':'W3CSchool','問好':'Hello W3CSchool','年齡':100}

qs = parse.urlencode(data)

print(qs)

# %E5%A7%93%E5%90%8D=W3CSchool&%E9%97%AE%E5%A5%BD=Hello+W3CSchool&%E5%B9%B4%E9%BE%84=100

4、urllib.parse.parse_qs() 函數

可以將經過編碼后的 url 參數進行解碼。語法如下: 

urllib.parse.parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')

  • keep_blank_values:當 value 為空時,表示是否需要顯示 key,默認為 False

  • strict_parsing:指示如何處理解析錯誤的標志。如果為 False(默認值),則會自動忽略錯誤。否則錯誤會引發 ValueError 異常。

示例

from urllib import parse 

data = {'姓名':'W3CSchool','問好':'hello W3CSchool','年齡':100}

qs = parse.urlencode(data) 

print(qs) 

#%E5%A7%93%E5%90%8D=W3CSchool&%E9%97%AE%E5%A5%BD=hello+W3CSchool&%E5%B9%B4%E9%BE%84=100 

print(parse.parse_qs(qs)) 

#{'姓名': ['W3CSchool'], '問好': ['hello W3CSchool'], '年齡': ['100']} 

5、urllib.parse.parse_qsl() 函數

基本用法與 parse_qs() 函數一致,只是 urllib.parse.parse_qs() 函數返回字典,urllib.parse.parse_qsl() 函數放回列表。語法如下:

urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')

示例

from urllib import parse 

data = {'姓名':'W3CSchool','問好':'hello W3CSchool','年齡':100} 

qs = parse.urlencode(data) 

print(parse.parse_qs(qs)) 

#[('姓名', 'W3CSchool'), ('問好', 'hello W3CSchool'), ('年齡', '100')] 

6、urllib.parse.urlparse() 和 urllib.parse.urlsplit() 函數

有時候拿到一個 url,想要對這個 url 中的各個組成部分進行分割,那么這時候就可以使用 urlparse 或者是 urlsplit 來進行分割。 各自語法如下: 

urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)

urllib.parse.urlsplit(urlstring, scheme=”, allow_fragments=True)

urlparse 和 urlsplit 基本上是一模一樣的。 

唯一不一樣的地方是: urlparse 里有 params 屬性,而 urlsplit 沒有這個 params 屬性。

示例

from urllib import parse 

url = 'http://www.baidu.com/index.html;user?id=S#comment' 

result = parse.urlparse(url) 

# result = parse.urlsplit(url) 

print(result) 

print(result.scheme) 

print(result.netloc) 

print(result.path) 

print(result.params) # urlparse 里面有 params 屬性,而 urlsplit 沒有這個屬性。 

7、urllib.error 模塊

urllib 的 error 模塊定義了由 urllib.request 請求產生的異常。如果請求失敗,urllib.request 便會拋出 error 模塊的異常。

  • URLError

URLError 類來自 urllib 的 error 模塊,是繼承 OSError 模塊,是異常模塊的基類,具有屬性 reason,即返回錯誤原因。

示例

from urllib import request, error

try:

    resp = request.urlopen('https://w3cschool.c/index.html')

except error.URLError as e:

    print(e.reason)

# [Errno 11001] getaddrinfo failed

  • HTTPError

它是 URLError 的子類,專門用來處理 HTTP 請求錯誤,具備以下三個屬性:

  1. code:返回HTTP狀態碼

  2. reason:異常原因

  3. headers:請求頭

示例

from urllib import request 

response = request.urlopen('http://www.baidu.com') #get方式請求 

print(response.read().decode('utf-8') #獲取響應的內容并進行解碼操作 

#404

當然,大多時候都是將 URLError 和 HTTPError 結合才進行異常處理,首先通過 HTTPError 來捕獲 url 的錯誤狀態碼、異常原因、請求頭等信息,如果不是該類型錯誤,再捕獲 URLError,輸出錯誤原因,最后是 else 來處理正常的邏輯。

示例

from urllib.request import Request, urlopen 

from urllib.error import URLError, HTTPError

resp = Request('http://www.baidu.cnc/') 

try:     

    response = urlopen(resp) 

except HTTPError as e:     

    print('(www.baidu.cnc)服務器無法完成請求。')     

    print('錯誤代碼: ', e.code) 

except URLError as e:    

    print('我們無法連接到服務器。')     

    print('原因: ', e.reason) else:     

    print("鏈接成功!")     

    print(response.read().decode("utf-8")) 

以上就是 urllib 庫中常用的函數,希望屏幕前的你多注重聯系,理論與實際相結合才是最好的學習方式!推薦閱讀:Python 靜態爬蟲、Python Scrapy網絡爬蟲。

最后,我們來總結一下常見的各種狀態碼含義:

  • 200:請求正常,服務器正常的返回數據;

  • 301:永久重定向。比如在訪問 www.jingdong.com 的時候會重定向到 www.jd.com;

  • 302:臨時重定向。比如在訪問一個需要登錄的頁面的時候,而此時沒有登錄,那么就會重定向到登錄頁面;

  • 400:請求的url在服務器上找不到。換句話說就是請求url錯誤;

  • 403:服務器拒絕訪問,權限不夠;

  • 500:服務器內部錯誤。可能是服務器出現 bug 了。 

關于“urllib庫常用函數有哪些”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“urllib庫常用函數有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红河县| 封丘县| 阳高县| 许昌市| 丹阳市| 仪征市| 达孜县| 齐齐哈尔市| 绍兴县| 邻水| 芜湖市| 堆龙德庆县| 博爱县| 彝良县| 昆山市| 商丘市| 望谟县| 水城县| 子洲县| 青神县| 陆川县| 奉贤区| 塘沽区| 磐石市| 乌恰县| 汉川市| 封开县| 林西县| 石河子市| 芒康县| 邵阳县| 新巴尔虎右旗| 临泉县| 巴楚县| 建湖县| 泾源县| 长岛县| 宁明县| 东乌| 榆树市| 上高县|