Python爬蟲教程-07-post介紹(百度翻譯)(上)

肖朋偉發表於2018-09-06

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'])

執行結果

這裡寫圖片描述

更多文章連結:Python 爬蟲隨筆


  • 本筆記不允許任何個人和組織轉載

相關文章