前期準備
運行庫
requests庫,用於進行百度api交互
tkinter庫,python自帶庫不需要另外下載
urlib庫,python自帶庫不需要另外下載
random庫, pyhthon自帶庫不需要另外下載
前期準備
請自行前往百度官網申請開發者API權限,這裏不再敘述。
通過查詢官方文檔我們可以知道,通過一個加密的 get 請求就可以向百度發出翻譯請求,具體構造如下:
url:百度請求網址http://api.fanyi.baidu.com/api/trans/vip/translate
appid:開發者 API 的 ID
q:經過處理的待翻譯內容
from:參數分爲 zh 與 en 表示翻譯前的語言類型
to:參數分爲 zh 與 en 表示翻譯後的語言類型
salt:隨機數
sign:數字簽名,裏面包含 appid 、待翻譯內容、隨機數、API密碼等字符串按順序拼接後的 md5 值
現在我們來一步一步用代碼構建這個看起來很複雜的請求鏈接
import hashlib
appid=你的開發者 ID
key=你的開發者密鑰
translateword=待翻譯的內容
url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'#基礎 API 接口地址
sign = appid + tranlateWord + salt + key#簽名值等於id+待翻譯內容+salt+key值
m = hashlib.md5()#初始化一個 hashlib 庫的 md5 類
m.update(sign.encode('utf-8'))#將之前的簽名進行 utf-8 編碼化
sign = m.hexdigest()#將 m 進行哈希化得到簽名值
myurl = url+'?appid='+self.appid+'&q='+urllib.parse.quote(tranlateWord,encoding = 'utf-8')+ '&from=' + self.fromLang + '&to=' + self.toLang + '&salt=' + str(self.salt) + '&sign=' + sign#生成請求網址
之後利用 requests 庫發出 get 請求,如果前面各項數據正確處理會返回一個 json 數據,通過自帶的 json 庫進行解析
import requests, json
response = requests.get(myurl)#發出請求
s = json.loads(response.text)#解析 json 數據
result = s['trans_result'][0]#輸出結果
這個就是百度翻譯 API 交互的核心內容,下面附上完整的爬蟲代碼
#coding=utf-8
import requests
import urllib
import json
import hashlib
import random
import re
class baiduapi: #定義一個百度翻譯的類
def __init__(self): #初始化函數,對常用變量初始化
self.enable = True
self.sortLangue = ''
self.fromLang = ''
self.toLang = ''
self.salt = str(random.randint(52330, 723831))
self.appid = ''#百度api賬號
self.key = ''#百度api密碼
self.sign = ''#百度簽名
def check(self, words): #定義檢查函數,檢測是否爲中文
pattern = re.compile(r'[a-z]')#判斷是否含有字母,如果沒有則是純中文字符串
match = pattern.search(words)
if match:
return True
else:
return False
def getResult(self,tranlateWord):#輸入單詞進行翻譯,獲取結果
url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
sign = self.appid + tranlateWord + self.salt + self.key#簽名值等於id+待翻譯內容+salt+key值
print(tranlateWord)
m = hashlib.md5()
m.update(sign.encode('utf-8'))
sign = m.hexdigest()
myurl = url+'?appid='+self.appid+'&q='+urllib.parse.quote(tranlateWord,encoding = 'utf-8')+ '&from=' + self.fromLang + '&to=' + self.toLang + '&salt=' + str(self.salt) + '&sign=' + sign#生成指定鏈接,返回值爲翻譯結果
response = requests.get(myurl)
s = json.loads(response.text)
result = s['trans_result'][0]
return(result['dst'])
def translate(self, data=None):#入口函數,傳遞參數自動翻譯
if(data):
tranlateWord = data
else:
tranlateWord = str(input('輸入翻譯內容\n'))
#print(data)#顯示輸入的數據內容
self.sortLangue = self.check(tranlateWord)#通過返回值判斷是中譯英還是英譯中
if (self.sortLangue):
self.toLang = 'zh'
self.fromLang = 'en'
else:
self.toLang = 'en'
self.fromLang = 'zh'
result = self.getResult(tranlateWord)
print(result)
return result
def main(self):
while self.enable:
self.translate()
if __name__=='__main__':
baidu = baiduapi()
baidu.main()