天天看點

python http請求_Python---HTTP 請求實戰練習

如果要進行用戶端和伺服器端之間的消息傳遞,我們可以使用HTTP協定請求

HTTP 協定請求主要分6種類型 (GET 和 POST 較常用)

1)GET 請求

通過URL網址傳遞資訊,可以直接在URL中寫上要傳遞的資訊,也可以由表單進行傳遞(表單中的資訊會自動轉化為URL位址中的資料,通過URL位址傳遞)

備注:已經取得資源,并将資源添加到響應中的消息體

2)POST 請求

可以向伺服器送出資料,是一種比較安全的資料傳遞方式,比如在登入時,經常使用 POST 請求發送資料

3)PUT 請求

請求伺服器存儲一個資源,通常需要制定存儲的位置

4)DELETE 請求

請求伺服器删除一個資源

5)HEAD 請求

請求擷取對應的 HTTP 報頭資訊

6)OPTIONS 請求

可以獲得目前URL所支援的請求類型

Response Code

狀态碼:200 OK

表明請求已經成功. 預設情況下成功的請求将會被緩存

不同請求方式對于請求成功的意義如下:

GET:已經取得資源,并将資源添加到響應中的消息體.

HEAD:作為消息體的頭部資訊

POST:在消息體中描述此次請求的結果

請求成功對于PUT 和 DELETE 來說并不是200 ok 而是 204 所代表的沒有資源 (或者 201 所代表的當一個資源首次被建立成功

以下是常見狀态碼及含義

狀态碼

英文

中文含義

200

OK

一切正常

301

Moved Permanently

重定向到新的URL,永久性

302

Found

重定向到臨時URL,非永久性

304

Not Modified

請求的資源未更新

400

Bad Request

非法請求

401

Unauthorized

請求未經授權

403

Forbidden

禁止通路

404

Not Found

沒有找到對應資源

500

Internal Server Error

伺服器内部出現錯誤

501

Not Implemented

伺服器不支援實作請求所需要的功能

1、GET 請求執行個體分析

比如我們打開百度,搜尋 python 關鍵詞,按Enter鍵(Enter),此時會出現對應的查詢結果

python http請求_Python---HTTP 請求實戰練習

百度搜尋python 網址的變化過程.png

對比網址,發現對應的查詢資訊是通過URL來傳遞的,但光看網址我們也不知道采用的是什麼方法,那麼我們打開浏覽器自帶的開發者工具(F12)或者用 Fiddler 抓包 來檢視請求

python http請求_Python---HTTP 請求實戰練習

浏覽器F12看請求資訊.png

python http請求_Python---HTTP 請求實戰練習

Fiddler 抓包.png

分析網址,字段 wd 存儲的就是使用者帶檢索的關鍵詞,由此推簡化下網址

python http請求_Python---HTTP 請求實戰練習

簡化網址重新搜尋.png

得到這個規律(通過 GET 請求,用爬蟲實作在百度上自動查詢某個關鍵詞),用 python 實作如下:

import urllib.request

keywd = "python" # 給變量指派搜尋關鍵詞

url = "https://www.baidu.com/s?wd=" + keywd

req =urllib.request.Request(url)

data = urllib.request.urlopen(req).read() # 将爬取的網頁内容指派給變量 file

fhandle = open("F:/Python Exercise/Part 4/3.html","wb") # 目錄提前建好,“wb” 二進制寫入

fhandle.write(data) # 寫入資料

fhandle.close()

print(fhandle)

# 運作結果

Process finished with exit code 0

當我們搜尋中文關鍵詞時,執行上述代碼提示編碼問題,需要優化下(對搜尋關鍵字 quote)

(UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-13: ordinal not in range(128)

)

python http請求_Python---HTTP 請求實戰練習

搜尋中文關鍵詞時,執行提示編碼問題.png

優化後代碼如下:

key = '網易音樂'

keywd = urllib.request.quote(key)

【GET 請求使用總結】

1)建構對應的URL位址(包含 GET 請求的字段名和字段内容等資訊),格式為 位址 + 參數,即 http(s)://網址?字段名1=字段内容1 & 字段名2=字段内容2

2)将對應的 URL 作為參數,建構 Request 對象

3)通過 urlopen() 打開建構的 Request 對象

4)後續處理操作,如讀取網頁内容,将内容寫入檔案等

2、POST 請求執行個體分析

python http請求_Python---HTTP 請求實戰練習

使用爬蟲自動送出POST請求.png

【思路】

1)設定好 URL 網址

2)建構表單資料,并使用 urllib.request.urlencode 對資料進行編碼處理

3)建立 Request 對象,參數包括 URL 位址和要傳遞的資料

4)使用 add_header() 添加頭資訊,模拟浏覽器進行爬取

5)使用 urllib.request.urlopen() 打開對應的 Request 對象,完成資訊的傳遞

6)後續處理,如讀取網頁内容,将内容寫入檔案等