import requests
if __name__ =="__main__":
post_url='https://fanyi.baidu.com/v2transapi?from=en&to=zh'
translation=input('请问您的要翻译的英文为:')
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
data={
'from': 'en',
'to': 'zh',
'query':translation,
'simple_means_flag': '3',
'sign': '871501.634748',
'token': 'a96496fe5d184896b689d4f248a711cb',
'domain':'common'
}
params={
'from': 'en',
'to': 'zh'
}
response=requests.post(url=post_url,data=data,headers=headers,params=params)
dic_obj=response.json()
print(dic_obj)
报错内容为:
{'errno': 997, 'errmsg': '未知错误', 'query': 'dog', 'from': 'en', 'to': 'zh', 'error': 997}
请问是有什么反爬吗?
百度翻译有对应的免费API
https://fanyi.baidu.com/home
在下面链接注册申请即可使用
import json
import random
import hashlib
from urllib import parse
import http.client
class BaiduTranslate:
def __init__(self,fromLang,toLang):
self.url = "/api/trans/vip/translate"
self.appid="***" #申请的账号
self.secretKey = '***'#账号密码
self.fromLang = fromLang
self.toLang = toLang
self.salt = random.randint(32768, 65536)
def BdTrans(self,text):
sign = self.appid + text + str(self.salt) + self.secretKey
md = hashlib.md5()
md.update(sign.encode(encoding='utf-8'))
sign = md.hexdigest()
myurl = self.url + \
'?appid=' + self.appid + \
'&q=' + parse.quote(text) + \
'&from=' + self.fromLang + \
'&to=' + self.toLang + \
'&salt=' + str(self.salt) + \
'&sign=' + sign
try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
response = httpClient.getresponse()
html = response.read().decode('utf-8')
html = json.loads(html)
dst = html["trans_result"][0]["dst"]
return True , dst
except Exception as e:
return False , e
if __name__=='__main__':
BaiduTranslate_test = BaiduTranslate('zh','en')
Results = BaiduTranslate_test.BdTrans("你好,世界!")#要翻译的词组
print(Results)
有帮助请点一下右上角的采纳,谢谢
from tkinter import *
from urllib import request
from urllib import parse
import json
import hashlib
import random
import time
def translate_Word(en_str):
global result
# time.sleep(3)
URL = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
#en_str=input("请输入要翻译的内容:")
#创建Form_Data字典,存储向服务器发送的Data
#Form_Data={'from':'en','to':'zh','query':en_str,'transtype':'hash'}
Form_Data = {}
Form_Data['from'] = 'en'
Form_Data['to'] = 'zh'
Form_Data['q'] = en_str #要翻译数据
Form_Data['transtype'] = 'hash'
Form_Data['appid'] = '20151113000005349' #申请的APP ID
Form_Data['salt'] = str(random.randint(32768, 65536)) #随机数
Key="osubCEzlGjzvw8qdQc41" #平台分配的密钥
m=Form_Data['appid']+en_str+Form_Data['salt']+Key
m_MD5 = hashlib.md5(m.encode('utf8'))
Form_Data['sign'] = m_MD5.hexdigest()
time.sleep(1)
data = parse.urlencode(Form_Data).encode('utf-8')
# time.sleep(3)#使用urlencode方法转换标准格式
response = request.urlopen(URL,data)
#传递Request对象和转换完格式的数据
html = response.read().decode('utf-8') #读取信息并解码
translate_results = json.loads(html) #使用JSON
print(translate_results) #打印出JSON数据
try:
translate_results = translate_results['trans_result'][0]['dst'] #找到翻译结果
print("翻译的结果是:%s" % translate_results) # 打印翻译信息
result=translate_results
except:
translate_Word(en_str)
# finally:
# return translate_results
def leftClick(event):
global result
#翻译按钮事件函数
#print( "x轴坐标:", event.x)
#print( "y轴坐标:", event.y)
en_str=Entry1.get() #获取要翻译的内容
print(en_str)
translate_Word(en_str)
#Entry2.config(Entry2,text=vText) #修改提示标签文字
s.set("")
Entry2.insert(0,result)
def leftClick2(event): #清空按钮事件函数
s.set("")
#Entry2.config(Entry2,text=vText) #修改提示标签文字
Entry2.insert(0,"")
if name == "main":
result=""
root = Tk()
root.title("单词翻译器")
root['width']=250;root['height']=130
Label(root,text = '输入要翻译的内容:',width=15).place(x=1,y=1) #绝对坐标(1,1)
Entry1=Entry(root,width=20)
Entry1.place(x=110,y=1) #绝对坐标(110,1)
Label(root,text = '翻译的结果:',width=18).place(x=1,y=20) #绝对坐标(1,20)
s=StringVar() #一个StringVar()对象
s.set("")
Entry2=Entry(root,width=20,textvariable=s)
Entry2.place(x=110,y=20) #绝对坐标(110,20)
Button1=Button(root,text = '翻译',width=8)
Button1.place(x=40,y=80) #绝对坐标(40,80)
Button2=Button(root,text = '清空',width=8)
Button2.place(x=110,y=80) #绝对坐标(110,80)
#给Label绑定鼠标监听事件
Button1.bind("<Button-1>",leftClick) #翻译按钮
Button2.bind("<Button-1>",leftClick2) #清空按钮
root.mainloop()
百度有加密.https://mp.weixin.qq.com/s/li_UBzEUvLmaL207eFhyvw 看这个文字.详细介绍了