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

1、訪問網絡的兩種方法git

1.get:利用參數給服務器傳遞信息;參數爲dict,而後parse解碼github

2.post:通常向服務器傳遞參數使用;post是把信息自動加密處理;若是想要使用post信息,須要使用到data參數json

3.Content-Type:application/x-www.form-urlencode瀏覽器

4.Content-Length:數據長度服務器

5.簡而言之,一旦更改請求方法,請注意其餘請求頭信息相適應微信

6.urllib.parse.urlencode能夠將字符串自動轉換爲上面的信息。網絡

案例:利用parse模塊模擬post請求分析百度翻譯:分析步驟:app

(1)打開谷歌瀏覽器,F12函數

(2)嘗試輸入單詞girl,發想每敲擊一個字母后都會有一個請求post

(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"])

2、爲了更多的設置請求信息,單純的經過urlopen函數已經不太好用了​;須要利用request.Request類

這裏只修改一部分代碼,其餘的代碼都不變,​依然能夠獲得相同的結果。​

 

#構造一個Request的實例,就是借用這個類,來把可以傳入的頭信息進行封裝擴展

req = request.Request(url=baseurl,data=data,headers=headers)

 

#有了headers,data,url就能夠嘗試發出請求了

rsp = request.urlopen(req)#,headers=headers

 

 

3、源碼

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.歡迎關注微信公衆號:傅里葉變換,我的公衆號,僅用於學習交流,後臺回覆」禮包「,獲取大數據學習資料

 

相關文章
相關標籤/搜索