Python爬蟲教程-07-post介紹(百度翻譯)(上)
- 訪問網路兩種方法
- get:
- 利用引數給伺服器傳遞資訊
- 引數為dict,使用parse編碼
- post :(今天給大家介紹的post)
- 一般向伺服器傳遞引數使用
- post是把資訊自動加密處理
- 使用post傳遞資訊,需要用到data引數
- 使用post意味著http的請求頭資訊可能需要更改:
- Content-Type:application/x-www.form-urlencode
- Content-Length:資料長度
- 簡而言之,一旦更改請求的方法,注意其他請求頭部資訊相適應
- urllib.parse.urlencode可以將字串自動轉換成上面的格式
案例v7
- post經典案例,就是百度翻譯
- 利用parse模組模擬post請求
- 分析步驟
- 1.開啟開發者工具F12>【Network】>【XHR】>【Headers】
- 2.嘗試簡單的單詞,檢視發出的請求
- 3.找到請求地址URL,請求的方式Method
- 4.找到引數的傳遞格式Content-Type, 引數樣式Form Data
- 編寫程式碼
# 案例v7百度翻譯
from urllib import request,parse
# 匯入json包,負責處理json格式的模組
import json
'''
大致流程:
1.利用data構造內容,然後urlopen開啟
2.返回一個json格式的結果
3.結果就應該是伺服器返回的釋義
'''
baseurl = 'http://fanyi.baidu.com/sug'
# 存放用來模擬form的資料,一定是dict格式
keyword = input("請輸入需要翻譯的內容:")
data = {
'kw': keyword
}
# print(data)
# 需要使用parse模組對data進行編碼
data = parse.urlencode(data)
data = data.encode('utf-8')
# print("編碼後的data:",data)
# print("編碼後的data型別:",type(data))
# 當需要型別為bytes時:在資料的後面加上: data = data.encode('utf-8')
# 構造請求頭,請求頭部至少包含:
# 1.傳入資料的長度
# 2.request要求傳入的請求是一個dict格式
# 有了headers,data,url就可以嘗試發出請求
rsp = request.urlopen(baseurl,data=data)
json_data = rsp.read().decode()
# 把json字串轉換為字典
json_data = json.loads(json_data)
# print(json_data)
for item in json_data['data']:
if item['k'] == keyword:
print(item['k'], ": ", item['v'])
執行結果