urllib库用POST请求模仿有道在线翻译
生活随笔
收集整理的這篇文章主要介紹了
urllib库用POST请求模仿有道在线翻译
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路
分析有道在線翻譯的請求、響應信息
使用Google Chrome瀏覽器進行分析,如圖:
1.獲取到Request URL
2.獲取到請求頭信息
3.獲取到要傳遞給服務器的表單信息
4.響應體,可以看出是Json格式數據
編寫代碼思路
1.根據以上分析得到的信息,構造url、請求頭、表單信息
2.獲取到urllib.Request對象
3.獲取響應的Json數據,并進行解析
源碼
# !/usr/bin/env python # -*- coding:utf-8 -*-""" 用urllib模塊發送post請求,模仿有道翻譯 """import urllib.request import urllib.parse import jsondef translate(word):"""根據給定詞語進行POST請求,并返回json數據"""# 請求地址urlurl = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"# 請求頭request_headers={"Accept":"application/json, text/javascript, */*; q=0.01","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8","User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36","X-Requested-With":"XMLHttpRequest"}# 發送給服務器的表單form_data={"i":word,"from":"AUTO","to":"AUTO","smartresult":"dict","doctype":"json","version":"2.1","keyfrom":"fanyi.web","action":"FY_BY_REALTIME","typoResult":"false"}# POST發送的data必須為bytes或bytes類型的可迭代對象,不能是字符串form_data=urllib.parse.urlencode(form_data).encode()# 構造請求對象Requestreq=urllib.request.Request(url,data=form_data,headers=request_headers)# 發起請求response=urllib.request.urlopen(req)data=response.read().decode()return datadef parse_data(data):"""解析json數據"""res=json.loads(data)src=res["translateResult"][0][0]["src"]tgt=res["translateResult"][0][0]["tgt"]print("{} --> {}".format(src,tgt))if __name__=="__main__":while True:word = input("輸入: ")if word=='q':breakdata=translate(word)print(data)# 解析json數據parse_data(data)
運行結果
總結
以上是生活随笔為你收集整理的urllib库用POST请求模仿有道在线翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: obs源码分析【八】:显示器采集
- 下一篇: php 虚拟机速度慢,[译]PHP虚拟机