Python爬蟲進階之urllib庫使用方法

solution發表於2021-09-11

Python爬蟲進階之urllib庫使用方法

因其效率高開發迅速的優勢受到廣大程式設計師的青睞,python爬蟲的使用依賴於本身各種庫的功能,其中urllib庫是python中的一個http請求庫,含有四個模組,有著不同的功能,使用方法也有很多,本文向大家介紹urllib庫的四個模組和四種使用方法:1、獲取某個網站的方式;2、超時處理;3、簡單解析-響應頭;4、將爬蟲偽裝成伺服器發出請求。

一、urllib庫是什麼?

urllib是python中的一個http請求庫,藉助urllib,我們可以向瀏覽器發出請求,只需向urllib庫中的方法傳入url和一些引數即可。

urllib庫中包含以下模組:

1、urllib.request

http請求模組,用於模擬向瀏覽器發出請求的過程;

2、urllib.error

異常處理模組,當利用urllib.request模擬向瀏覽器發出請求時,如果出現請求錯誤,可以利用此模組捕獲異常資訊,然後進行重試或其他操作,以保證程式不會意外終止;

3、urllib.parse

包含了針對url的許多處理方法,如url拆分、url解析、url合併等;

4、urllib.robotparser

robots.txt解析模組,主要用於識別網站的robots.txt檔案,判斷哪些網站可以爬,那些網站不可爬。此模組不太經常被使用。

二、Python爬蟲中常用的urllib方法

首先需要匯入urllib模組,如下

import urllib.request
import urllib.parse  # 解析器,將鍵值對按utf-8或其他形式解析

1、獲取某個網站的方式

(1)獲取一個get請求

response = urllib.request.urlopen("")
print(response.read().decode("utf-8"))   
# 第二行的輸出是對獲取到的物件response的資訊-網頁原始碼進行utf-8的解碼

(2)獲取pose請求

data = bytes(urllib.parse.urlencode({"hello": "world"}), encoding='utf-8')  
# 一般模擬使用者登入時使用此種方式,在{}內加上cookie內容
response = urllib.request.urlopen("", data=data)
print(response.read().decode("utf-8"))

採用post訪問時需要傳遞表單資訊,透過表單的封裝才能訪問post,程式碼中bytes將資訊轉換為二進位制包。

當需要模擬瀏覽器發出請求時,必須用post形式來封裝資料(用data封裝),否則有405報錯。

2、超時處理

當要訪問的伺服器排斥爬蟲,或連結是死連結、網路不好等情況出現時,頁面在一定的時間內會沒有反應,這時可以設定一個時間限制,避免一直等待。

response = urllib.request.urlopen("", timeout=0.1)
print(response.read().decode("utf-8"))

若訪問超時會出現如下報錯,可以利用異常處理結束迴圈或者停止爬取該網頁,向其他網頁傳送get請求。

try:
    response = urllib.request.urlopen("",timeout=0.1)
    print(response.read().decode("utf-8"))
except urllib.error.URLError as e:
    print("time out!")

3、簡單解析-響應頭

網路爬蟲有時會返回一些錯誤資訊,此時我們可以返回響應狀態碼來大致判斷報錯型別。

response = urllib.request.urlopen("")
print(response.status)   # 返回狀態碼-200、404、418等
print(response.getheaders())  # 返回頭部所有資訊

常見的狀態碼如418報錯是因為訪問的伺服器發現該請求是一個爬蟲,也即爬蟲時常見的反爬機制,此時可改用、新增header資訊等方法解決。

4、將爬蟲偽裝成伺服器發出請求

# 訪問反爬的網址
url = ""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/83.0.4103.61 Safari/537.36"
}
req = urllib.request.Request(url=url, headers=headers, method="POST")  # req是請求物件而非響應物件
response = urllib.request.urlopen(req)
html = response.read().decode("utf-8")
print(html)

程式碼中的headers來自瀏覽器頁面,在chrome中進入想訪問的瀏覽頁面,點選F12或右鍵檢查-Network中,即可查到User-Agent資訊,貼上到程式碼中(需注意大小寫及空格,程式碼中的格式要和瀏覽器資訊一致)。

user-agent的作用是告訴所訪問的伺服器,我們是何種型別的機器(瀏覽器),若只用User-Agent會返回百度驗證介面,可加入Cookie返回所要爬取的結果頁面

三、爬蟲頻率過快導致失敗

現在很多網站對異常使用者訪問網站頻次過高設定了安全訪問機制。在這個時候,如果你想繼續訪問這個網站,HTTP代理ip非常重要。當前ip地址有限,可以更改新的ip地址,保證爬蟲的順利進行。

推薦使用優質的資源,保證爬蟲程式的順利進行。

免費試用ip指路:

以上就是python爬蟲中urllib庫使用方法一部分,還有很多使用方法,大家可以探索一下哦~更多python爬蟲學習推薦:

(推薦作業系統:windows7系統、Python 3.9.1,DELL G3電腦。)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2459/viewspace-2831020/,如需轉載,請註明出處,否則將追究法律責任。

相關文章