python自制翻译软件的详细过程。(requests+tkinter+pyinstaller)

瘦欲@ 提交于 2019-12-05 17:17:59

  这里直接爬取的是有道翻译。

第一步:利用requests库爬取有道翻译

  有两种解决网站反爬的措施:

  1、直接暴力破解有道翻译的salt,sign,ts,bv值。

  2、修改url绕过反爬。

  在有道页面按下F12并刷新,随便输入一句话进行翻译,可以在network项里面发现一个名为translate…什么的,打开其response项,可以发现我输入的话和翻译。在这里插入图片描述
看headers里面的data:
在这里插入图片描述
可以看到 i 后面的就是你输入的东西,至于红圈里面的东西,就是网站反爬所用的。我这里只讲绕过反爬的url,如果想暴力破解的,可以参考这篇博客

然后就可以利用headers=header来模拟浏览器了。将这里面的request headers里面的内容全部复制一遍,并加上引号。
在这里插入图片描述
坑了我好久的一个坑(☍﹏⁰。) :将request headers里面的Content-Type属性也复制进去,导致只能输入英文,输入其他语言文字结果返回的是’???’。

我也不知道为什么这里返回会有问题。当时我也是想了很久,试了下日文也是’???’,搞不懂为什么返回的是问号,我拿别人的代码可以用,但我的就不行,我对比了一下,代码没有什么错误,大致是一样的。但我发现他的headers以及data里面和我不一样,于是我就试试把headers里面的代码一行行删掉进行尝试,最终发现是Content-Type属性搞的鬼(╯‵□′)╯︵┴─┴,去掉这行后结果就正常了。(我猜应该是这个属性限制了输入的文本,也就是只能识别英文,输入其他语言的文字不识别乱码则输入进去的时候就输入的是’???’,所以返回的就是’???’)。

爬取什么的还是和一般爬虫的思路一样,不过这里要注意了,url不能简单的使用有道翻译的原网站:http://fanyi.youdao.com/ 。原网站使用了反爬,我这里找到了两个可以绕过爬虫的url:
1、http://fanyi.youdao.com/translate 。这个网站点进去还是会跳到有道翻译的网站去,但按F12发现该网站是一个301重定向的状态,也就是进入该网站还是会自动跳到有道翻译的网站,但这样却能直接跳过网站的反爬,真神奇。(我也不知道怎么解释(¯﹃¯),不过得出一个结论,(大概吧)如果网站反爬的话,可以通过能定向到该网站的url进行爬虫可以绕过反爬措施。)
2、也是在该translate…下可以找到翻译的url,直接复制后,去掉translate后面的’_o’字符也可以绕过反爬。
在这里插入图片描述
这里的部分代码如下,返回的是翻译的结果:

trans = input()
data={
	'i':trans,
	......
}
header={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
        ......
}
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
response = requests.post(url,headers=header,data=data)
a = response.json()
translation = a['translateResult'][0][0]['tgt']
print(translation)

第二步:利用tkinter做界面。

这里都是些基本操作,tkinter的基础就能做出来。不过要知道以下知识:
①text文本框有一个state,有disabled(只读)和normal(可读可写)两种属性,要翻译的文本框可以不用设置state,翻译的结果就设置disabled。顺便还可以给它加一个背景颜色。’#ccc’更加生动(吃了文化的亏,不知道怎么形容了)。
②在定义完后要把东西放进去,有3种方法:pack(),grid(),place()。推荐使用grid()方法,关于区别,可以看这篇博客

第三步:利用pyinstaller打包成exe文件。

这里安装坑也多。
详见这篇我之前写的博客

安装完成后。在cmd中输入cd 你的.py文件所在的目录
然后输入pyinstaller -F -w xxx.py(-w是为了不显示dos窗口)等待一段时间,就打包完成啦。exe就在目标目录下的dist文件夹下。
也许你会觉得图标有点丑,我这里有一个教程,详见这篇博客
对了,如果你应用图标后发现图标并没有变,你就可以把他移动一下(比如把它复制到桌面或者其他路径都可以),图标就变了。

这里贴上我的源代码吧_(:3 」∠ )_(…里面就是data和header里面的参数,这里略过了)

import requests
import tkinter
def en2zh():
    trans = textbef.get('0.0','end')
    data = {
        'i':trans,
        '......
    }
    header = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
        ......
    }
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    response = requests.post(url,headers=header,data=data)
    a = response.json()
    translation = a['translateResult'][0][0]['tgt']
    textaft['state']='normal'
    textaft.delete(1.0,'end')
    textaft.insert('end',translation)
    textaft['state'] = 'disabled'

windows = tkinter.Tk()
windows.title("jizhihaoSAMA's Translation?not really!")
windows.geometry('710x300')
welc = tkinter.Label(windows,text="Let's start!",font=('Georgia',28))
welc.grid(row=0,columnspan=3)
textbef = tkinter.Text(width=40,height=10)
textbef.grid(row=2,column=0)
en2zhbutton = tkinter.Button(activebackground='#ccc',text='Auto translate',command=en2zh,font=('Georgia',12))
en2zhbutton.grid(row=2,column=1,padx=15)
textaft = tkinter.Text(bg='#ccc',width=40,height=10,state='disabled')
textaft.grid(row=2,column=2)
bef = tkinter.Label(windows,fg='brown',text="input the text you want to translate:",font=('Georgia',12))
bef.grid(row=1,column=0,sticky='W')
aft = tkinter.Label(windows,fg='brown',text="translation:",font=('Georgia',12))
aft.grid(row=1,column=2,sticky='W')
windows.mainloop()

界面如下:
(看看这个翻译软件说的都是大实话~◝(^▿^)◜)
在这里插入图片描述
在这里插入图片描述

大功告成!(๑ • ‿ • ๑ )

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!