一、訪問網路的兩種方法 1.get:利用參數給伺服器傳遞信息;參數為dict,然後parse解碼 2.post:一般向伺服器傳遞參數使用;post是把信息自動加密處理;如果想要使用post信息,需要使用到data參數 3.Content-Type:application/x-www.form-url ...
一、訪問網路的兩種方法
1.get:利用參數給伺服器傳遞信息;參數為dict,然後parse解碼
2.post:一般向伺服器傳遞參數使用;post是把信息自動加密處理;如果想要使用post信息,需要使用到data參數
3.Content-Type:application/x-www.form-urlencode
4.Content-Length:數據長度
5.簡而言之,一旦更改請求方法,請註意其他請求頭信息相適應
6.urllib.parse.urlencode可以將字元串自動轉換為上面的信息。
案例:利用parse模塊模擬post請求分析百度翻譯:分析步驟:
(1)打開谷歌瀏覽器,F12
(2)嘗試輸入單詞girl,發想每敲擊一個字母後都會有一個請求
(3)請求地址是:http://fanyi.baidu.com/sug
(4)打開network-XHR-sug
from urllib import request,parse #負責處理json格式的模塊 import json """ 大致流程: (1)利用data構造內容,然後urlopen打開 (2)返回一個json格式的結果 (3)結果就應該是girl的釋義 """ baseurl = "https://fanyi.baidu.com/sug" #存放迎來模擬form的數據一定是dict格式 data = { #girl是翻譯輸入的英文內容,應該是由用戶輸入,此處使用的是硬編碼 "kw":"girl" } #需要使用parse模塊對data進行編碼 data = parse.urlencode(data).encode("utf-8") #我們需要構造一個請求頭,請求頭應該至少包含傳入的數據的長度 #request要求傳入的請求頭是一個dict格式 headers = { #因為使用了post,至少應該包含content-length欄位 "Content-length":len(data) } #有了headers,data,url就可以嘗試發出請求了 rsp = request.urlopen(baseurl,data=data)#,headers=headers json_data = rsp.read().decode() print(json_data) #把json字元串轉化為字典 json_data = json.loads(json_data) print(json_data) for item in json_data["data"]: print(item["k"],"--",item["v"])
二、為了更多的設置請求信息,單純的通過urlopen函數已經不太好用了;需要利用request.Request類
這裡只修改一部分代碼,其他的代碼都不變,依然可以得到相同的結果。
#構造一個Request的實例,就是借用這個類,來把能夠傳入的頭信息進行封裝擴展 req = request.Request(url=baseurl,data=data,headers=headers) #有了headers,data,url就可以嘗試發出請求了 rsp = request.urlopen(req)#,headers=headers
三、源碼
Reptile3_PostAnlysis.py
https://github.com/ruigege66/PythonReptile/blob/master/Reptile3_PostAnlysis.py
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料