前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中文编程打造翻译器

Python中文编程打造翻译器

作者头像
用户6184845
发布2019-11-25 22:33:54
2.1K0
发布2019-11-25 22:33:54
举报

项目目的

目的一:验证Python中文编程的可行性。

目的二:进一步提升个人网络爬虫技术。 目的三:打造一个专属于自己的翻译器。

项目结果

核心思想:爬虫技术获取在线翻译结果。

难点:在线翻译存在反爬虫技术,需进行反爬虫破解。 结果:使用中文(变量名及函数名的应用)编程验证并实现预定目标。 中-英翻译:

英-中翻译:

小日本-中翻译:

棒子-中翻译:

可支持中英互译;日、韩、法、德、俄等支持翻译成中文。

可翻译段落或者文章:

项目代码

该工具不提供下载地址,直接上源代码,感兴趣的小伙伴可自行研究:

代码语言:javascript
复制
import requests,json
import time,random
import hashlib
import wx
import win32con,win32api

#--------------------------------md5加密---------------------------------
def 加密(要加密的数据):
    加密后的值 = hashlib.md5(要加密的数据.encode())
    return 加密后的值.hexdigest()
    
#----------------------------单击事件调用函数----------------------------
def ck(fram):
    if fram.m_textCtrl1.GetValue() == '':
        win32api.MessageBox(0, "请输入要翻译的内容", "没有要翻译的内容",win32con.MB_ICONWARNING)
    else:
        fram.pr.SetValue(在线翻译(fram.m_textCtrl1.GetValue()))
    
#---------------------------------在线翻译-------------------------------
def 在线翻译(要翻译的内容):
    
    翻译链接 = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
    
    时间戳 = str(int(time.time()*1000))
    随机数 = str(random.randint(0,9))
    salt = 时间戳 + 随机数
    sign = 加密('fanyideskweb' + 要翻译的内容 + salt + 'n%A-rKaT5fb[Gy?;N5@Tj')
    
    表单 = {
        "i":要翻译的内容
        ,"from":"AUTO"
        ,"to":"AUTO"
        ,"smartresult":"dict"
        ,"client":"fanyideskweb"
        ,"salt":salt
        ,"sign":sign
        ,"ts":时间戳
        ,"bv":"e2a78ed30c66e16a857c5b6486a1d326"
        ,"doctype":"json"
        ,"version":"2.1"
        ,"keyfrom":"fanyi.web"
        ,"action":"FY_BY_CLICKBUTTION"
        }
    
    请求头 = {
        'Host':'fanyi.youdao.com'
        ,'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'
        ,'Accept': 'application/json, text/javascript, */*; q=0.01'
        ,'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'
        ,'Accept-Encoding':'gzip, deflate'
        ,'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'
        ,'X-Requested-With':'XMLHttpRequest'
        ,'Content-Length':'255'
        ,'Origin':'http://fanyi.youdao.com'
        ,'Connection':'keep-alive'
        ,'Referer':'http://fanyi.youdao.com/'
        ,'Cookie':'YOUDAO_MOBILE_ACCESS_TYPE=1; OUTFOX_SEARCH_USER_ID=558110273@10.108.160.19; JSESSIONID=aaamhmHtcXNGSajBuz95w; ___rl__test__cookies=1574061887541; OUTFOX_SEARCH_USER_ID_NCOO=84762635.26386356'
        }
    
    try:
        响应值 = requests.post(翻译链接,data = 表单,headers = 请求头)
    except:
        win32api.MessageBox(0, "翻译超时,请检查网络连接", "翻译超时",win32con.MB_ICONWARNING)
        
    响应值汇总 = ''
    响应值处理 = json.loads(响应值.text)
    
    try:
        for i in range(1,len(响应值处理['smartResult']['entries'])):
            响应值汇总 = 响应值汇总 + 响应值处理['smartResult']['entries'][i]
    except:
        return 响应值处理['translateResult'][0][0]['tgt']
    
    return 响应值汇总

###########################################################################
##在线翻译图形界面
###########################################################################
class MyFrame1 ( wx.Frame ):
  
  def __init__( self, parent ):
    wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"在线翻译", pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
                    
    #self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
    
    bSizer1 = wx.BoxSizer( wx.VERTICAL )
    
    bSizer2 = wx.BoxSizer( wx.HORIZONTAL )
    
    self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"要翻译的内容:", wx.DefaultPosition, wx.DefaultSize, 0 )
    self.m_staticText1.Wrap( -1 )
    self.m_staticText1.SetFont( wx.Font( 9, 74, 90, 92, False, "微软雅黑" ) )
    self.m_staticText1.SetForegroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BACKGROUND ) )
    
    bSizer2.Add( self.m_staticText1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
    
    self.m_textCtrl1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 260,35 ), 0 )
    bSizer2.Add( self.m_textCtrl1, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
    
    self.m_button1 = wx.Button( self, wx.ID_ANY, u"在线翻译", wx.DefaultPosition, wx.DefaultSize, 0 )
    bSizer2.Add( self.m_button1, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
    
    
    bSizer1.Add( bSizer2, 4, wx.EXPAND, 5 )
    
    bSizer4 = wx.BoxSizer( wx.VERTICAL )
    
    self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"在线翻译结果:", wx.DefaultPosition, wx.DefaultSize, 0 )
    self.m_staticText3.Wrap( -1 )
    self.m_staticText3.SetFont( wx.Font( 9, 74, 90, 92, False, "微软雅黑" ) )
    
    bSizer4.Add( self.m_staticText3, 0, wx.ALL, 5 )
    
    self.pr = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 500,400 ), wx.TE_MULTILINE )
    bSizer4.Add( self.pr, 0, wx.ALL, 5 )
    
    
    bSizer1.Add( bSizer4, 6, wx.EXPAND, 5 )
    
    
    self.SetSizer( bSizer1 )
    self.Layout()
    
    self.Centre( wx.BOTH )
    
    # 按钮绑定事件函数
    self.m_button1.Bind( wx.EVT_BUTTON, self.translation )
  
  def __del__( self ):
    pass
  
  # 单击事件调用函数
  def translation( self, event ):
    event.Skip()
    ck(self)

#-----------------------程序入口------------------------    
if __name__ == '__main__':
    app = wx.App(False) 
    frame = MyFrame1(parent=None) 
    frame.Show()
    app.MainLoop()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网优小兵玩Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档