您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python爬蟲進階之如何使用urllib庫,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
python的數據類型:1. 數字類型,包括int(整型)、long(長整型)和float(浮點型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運算,有兩個值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數據類型,集合中可以放任何數據類型。5. 元組,元組用”()”標識,內部元素用逗號隔開。6. 字典,字典是一種鍵值對的集合。7. 集合,集合是一個無序的、不重復的數據組合。
python爬蟲因其效率高開發迅速的優勢受到廣大程序員的青睞,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("http://www.baidu.com") 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("https://baidu.com", data=data) print(response.read().decode("utf-8"))
采用post訪問時需要傳遞表單信息,通過表單的封裝才能訪問post,代碼中bytes將信息轉換為二進制包。
當需要模擬瀏覽器發出請求時,必須用post形式來封裝數據(用data封裝),否則有405報錯。
2、超時處理
當要訪問的服務器排斥爬蟲,或鏈接是死鏈接、網絡不好等情況出現時,頁面在一定的時間內會沒有反應,這時可以設置一個時間限制,避免一直等待。
response = urllib.request.urlopen("https://baidu.com", timeout=0.1) print(response.read().decode("utf-8"))
若訪問超時會出現如下報錯,可以利用異常處理結束循環或者停止爬取該網頁,向其他網頁發送get請求。
try: response = urllib.request.urlopen("http://www.baidu.com",timeout=0.1) print(response.read().decode("utf-8")) except urllib.error.URLError as e: print("time out!")
3、簡單解析-響應頭
網絡爬蟲有時會返回一些錯誤信息,此時我們可以返回響應狀態碼來大致判斷報錯類型。
response = urllib.request.urlopen("http://www.baidu.com") print(response.status) # 返回狀態碼-200、404、418等 print(response.getheaders()) # 返回頭部所有信息
常見的狀態碼如418報錯是因為訪問的服務器發現該請求是一個爬蟲,也即爬蟲時常見的反爬機制,此時可改用requests庫、添加header信息等方法解決。
4、將爬蟲偽裝成服務器發出請求
# 訪問反爬的網址 url = "http://www.douban.com" 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庫”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。