Python爬虫百度翻译器,代码没问题,有时运行没问题,有时报下图错误

{'error_code': '54003', 'error_msg': 'Invalid Access Limit'}

img

没有trans_result这个变量

可能因为爬取速度过快,网页没有完全加载导致的,你可以试试time.sleep(2)

使用百度API出现错误,原因是访问频率过快,如果不想花钱,那么需要你降低你的访问频率,可以在翻译模块前面加上一个等待函数,一秒最好。

有时运行没问题,有时报下图错误,可能就是一些细节的问题

img

关键字错误,解释如图:

img

以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!

报错是因为返回的结果没有trans_result这个key,这条记录调用的接口返回结果异常了,可能百度是服务器异常,你需要在代码中判断一下调用接口的返回结果中是trans_result这个key值是否存在,如果不存在也答应接口返回结果,打印日志提示错误,继续运行,这样就不会中断了

你访问的频率过高
这个键你是每次request.urlopen(url)去解析百度的响应后拿到的,这种情况下,你对这个键最好加个判断,如果没有这个键就跳过,如果有就获取出来。
补充:trans_result的索引访问也是,你先判断这个key对应的value否为空,然后再按照索引来访问

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)

vText=translate_Word(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()