Python 爬蟲乾貨之urllib庫

2021-10-07 22:14:31 字數 2607 閱讀 4676

小試牛刀

怎樣扒網頁呢?

其實就是根據url來獲取它的網頁資訊,雖然我們在瀏覽器中看到的是一幅幅優美的畫面,但是其實是由瀏覽器解釋才呈現出來的,實質它是一段html**,加 js、css,如果把網頁比作乙個人,那麼html便是他的骨架,js便是他的肌肉,css便是它的衣服。所以最重要的部分是存在於html中的,下面我們就寫個例子來扒乙個網頁下來

from urllib.request import urlopen

response = urlopen(「

print(response.read().decode())

真正的程式就兩行,執行如下命令檢視執行結果,感受一下

看,這個網頁的原始碼已經被我們扒下來了,是不是很酸爽?

response.getcode()

返回 http的響應碼,成功返回200,4伺服器頁面出錯,5伺服器問題

response.geturl()

返回 返回實際資料的實際url,防止重定向問題

返回 伺服器響應的http報頭

3. request物件

其實上面的urlopen引數可以傳入乙個request請求,它其實就是乙個request類的例項,構造時需要傳入url,data等等的內容。比如上面的兩行**,我們可以這麼改寫

from urllib.request import urlopen

from urllib.request import request

request = request(「

response = urlopen(requst)

print response.read().decode()

執行結果是完全一樣的,只不過中間多了乙個request物件,推薦大家這麼寫,因為在構建請求時還需要加入好多內容,通過構建乙個request,伺服器響應請求得到應答,這樣顯得邏輯上清晰明確

get 請求

大部分被傳輸到瀏覽器的html,images,js,css, … 都是通過get方法發出請求的。它是獲取資料的主要方法

例如: 搜尋

get請求的引數都是在url中體現的,如果有中文,需要轉碼,這時我們可使用

urllib.parse.urlencode()

urllib.parse. quote()

5. post 請求

我們說了request請求物件的裡有data引數,它就是用在post裡的,我們要傳送的資料就是這個引數data,data是乙個字典,裡面要匹配鍵值對

傳送請求/響應header頭的含義:

名稱 | 含義 —|--- accept | 告訴伺服器,客戶端支援的資料型別 accept-charset | 告訴伺服器,客戶端採用的編碼 accept-encoding | 告訴伺服器,客戶機支援的資料壓縮格式 accept-language | 告訴伺服器,客戶機的語言環境 host | 客戶機通過這個頭告訴伺服器,想訪問的主機名 if-modified-since | 客戶機通過這個頭告訴伺服器,資源的快取時間 referer | 客戶機通過這個頭告訴伺服器,它是從哪個資源來訪問伺服器的。(一般用於防盜煉) user-agent | 客戶機通過這個頭告訴伺服器,客戶機的軟體環境 cookie | 客戶機通過這個頭告訴伺服器,可以向伺服器帶資料 refresh | 伺服器通過這個頭,告訴瀏覽器隔多長時間重新整理一次 content-type | 伺服器通過這個頭,回送資料的型別 content-language | 伺服器通過這個頭,告訴伺服器的語言環境 server | 伺服器通過這個頭,告訴瀏覽器伺服器的型別 content-encoding | 伺服器通過這個頭,告訴瀏覽器資料採用的壓縮格式 content-length | 伺服器通過這個頭,告訴瀏覽器回送資料的長度

響應的編碼

響應狀態碼

響應狀態**有三位數字組成,第乙個數字定義了響應的類別,且有五種可能取值。 常見狀態碼:

號碼 | 含義 -----|— 100~199 | 表示伺服器成功接收部分請求,要求客戶端繼續提交其餘請求才能完成整個處理過程 200~299 | 表示伺服器成功接收請求並已完成整個處理過程。常用200(ok 請求成功) 300~399 | 為完成請求,客戶需進一步細化請求。例如:請求的資源已經移動乙個新位址、常用302(所請求的頁面已經臨時轉移至新的url)、307和304(使用快取資源) 400~499 | 客戶端的請求有錯誤,常用404(伺服器無法找到被請求的頁面)、403(伺服器拒絕訪問,許可權不夠) 500~599 | 伺服器端出現錯誤,常用500(請求未完成。伺服器遇到不可預知的情況)

ajax的請求獲取資料

有些網頁內容使用ajax載入,而ajax一般返回的是json,直接對ajax位址進行post或get,就返回json資料了

請求 ssl證書驗證

現在隨處可見 https 開頭的**,urllib可以為 https 請求驗證ssl證書,就像web瀏覽器一樣,如果**的ssl證書是經過ca認證的,則能夠正常訪問,如:

如果ssl證書驗證不通過,或者作業系統不信任伺服器的安全證書,比如瀏覽器在訪問12306**如:的時候,會警告使用者證書不受信任。(據說 12306 **證書是自己做的,沒有通過ca認證)

context = ssl._create_unverified_context()

response = urllib.request.urlopen(request, context = context)

Python標準庫之資料抓取模組urllib

urllib是python內建的http請求庫,它包含四個子模組 request模組,它是最基本的 http 請求模組,我們可以用它來模擬傳送一請求,就像在瀏覽器裡輸入 然後敲擊回車一樣,只需要給庫方法傳入 url 還有額外的引數,就可以模擬實現這個過程了。error模組即異常處理模組,如果出現請求...

Python爬蟲之爬蟲概述

知識點 模擬瀏覽器,傳送請求,獲取響應 網路爬蟲 又被稱為網頁蜘蛛,網路機械人 就是模擬客戶端 主要指瀏覽器 傳送網路請求,接收請求響應,一種按照一定的規則,自動地抓取網際網路資訊的程式。知識點 了解 爬蟲的概念 爬蟲在網際網路世界中有很多的作用,比如 資料採集 抓取招聘 的招聘資訊 資料分析 挖掘...

python入門乾貨 python基礎乾貨 01

1.編碼集 ascii 是最早的編碼 ascii值控制字元ascii值控制字元ascii值控制字元ascii值控制字元 nut space soha astxbb etxc ceotdd enqe eackff belggbs hhhti ilfjj vtkkff llcrm msonn siood...