Python爬蟲連載3-Post解析、Request類


一、訪問網絡的兩種方法

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.歡迎關注微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,后台回復”禮包“,獲取大數據學習資料

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM