如果要進行客戶端和服務器端之間的消息傳遞,我們可以使用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),此時會出現對應的查詢結果
對比網址,發現對應的查詢信息是通過URL來傳遞的,但光看網址我們也不知道采用的是什么方法,那么我們打開瀏覽器自帶的開發者工具(F12)或者用 Fiddler 抓包 來查看請求
分析網址,字段 wd 存儲的就是用戶帶檢索的關鍵詞,由此推簡化下網址https://www.baidu.com/s?wd=python,復制到瀏覽器,刷新(F5)
得到這個規律(通過 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)
)
優化后代碼如下:
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)
【思路】
1)設置好 URL 網址
2)構建表單數據,并使用 urllib.request.urlencode 對數據進行編碼處理
3)創建 Request 對象,參數包括 URL 地址和要傳遞的數據
4)使用 add_header() 添加頭信息,模擬瀏覽器進行爬取
5)使用 urllib.request.urlopen() 打開對應的 Request 對象,完成信息的傳遞
6)后續處理,如讀取網頁內容,將內容寫入文件等