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),此時會出現對應的查詢結果

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

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

瀏覽器F12看請求信息.png
Fiddler 抓包.png

分析網址,字段 wd 存儲的就是用戶帶檢索的關鍵詞,由此推簡化下網址https://www.baidu.com/s?wd=python,復制到瀏覽器,刷新(F5)

簡化網址重新搜索.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)

# 運行結果
<_io.BufferedWriter name='F:/Python Exercise/Part 4/3.html'>

Process finished with exit code 0

當我們搜索中文關鍵詞時,執行上述代碼提示編碼問題,需要優化下(對搜索關鍵字 quote)
(UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-13: ordinal not in range(128)

搜索中文關鍵詞時,執行提示編碼問題.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 請求實例分析

比如我們在進行注冊、登錄等操作時,基本上都會遇到 POST 請求,因登錄需要用到 Cookie 知識,此處將以表單為例(http://www.w3school.com.cn/tiy/t.asp?f=html_form_submit

使用爬蟲自動提交POST請求.png
【思路】

1)設置好 URL 網址
2)構建表單數據,并使用 urllib.request.urlencode 對數據進行編碼處理
3)創建 Request 對象,參數包括 URL 地址和要傳遞的數據
4)使用 add_header() 添加頭信息,模擬瀏覽器進行爬取
5)使用 urllib.request.urlopen() 打開對應的 Request 對象,完成信息的傳遞
6)后續處理,如讀取網頁內容,將內容寫入文件等

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容