Python 制作自动化翻译工具

作者:月小水长 时间:2022-08-17 05:34:50 

目录
  • 一个可能你似曾相识的场景

  • 提升办公效率的法宝

  • 编码实现

    • 谷歌翻译爬虫

    • Python 操作系统剪贴板

  • 项目地址

    妈妈再也不用担心我的英语了。

    一个可能你似曾相识的场景

    阅读内容包含大量英文的 PPT、Word、Excel 或者记事本时,由于英语不熟悉,为了流利地阅读,需要打开浏览器进入谷歌翻译的主界面,然后把英文复制到谷歌翻译的输入框中,最后又把翻译结果复制回 PPT、Word 和 Excel。

    Python 制作自动化翻译工具

    Python 制作自动化翻译工具

    要是一个两个单词还好,要是发现有 100 个单词不认识,就必须复制粘贴 200 次,如此机械性重复性的工作,应该交给程序来做,这就是我设计下面这个自动化翻译工具的初衷。

    提升办公效率的法宝

    Python 制作自动化翻译工具

    如上图,运行程序并保持后台运行,在电脑上的任何一个软件中选择一段文本,并 Ctrl + C 复制到系统剪贴板中,程序就会自动帮助我们完成翻译,并将翻译结果自动复制到系统剪贴版中,只需 Ctrl + V,就完成了翻译结果对原文的替换。

    编码实现

    程序主要分为两部分,第一部分为谷歌翻译爬虫,第二部分就是实现这个将翻译结果自动替换的业务逻辑。

    谷歌翻译爬虫

    通过浏览器 F12 开发者工具,很容易定位到翻译请求的 URL: http://translate.google.cn/translate_a/single?client=t&sl=en&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss &dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2

    这个请求接受两个参数,一个就是我们要翻译的字符串 q,另一个是用于用户认证的 tk(token),其中 q 很容易构造,tk 的构造就需要花费一番心力了,需要我们调试 js 代码,这里参考 Github 上大神的轮子: https://github.com/cocoa520/Google_TK

    谷歌翻译爬虫的主要代码如下:


    def translate(tk, content):
       if len(content) > 4891:
           print("翻译的长度超过限制!!!")
           return

    param = {'tk': tk, 'q': content}

    result = requests.get("""http://translate.google.cn/translate_a/single?client=t&sl=en
           &tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss
           &dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2""", params=param)

    data = result.json()
       print(data[0][0][0])

    返回结果是 json 形式的,翻译结果保存在结果的第一个元组中。

    Python 操作系统剪贴板

    将读取剪贴板的内容的代码封装成函数如下:


    def getText():#读取剪切板
       # 打开剪贴板
       w.OpenClipboard()
       # 读取剪贴板的内容
       d = w.GetClipboardData(win32con.CF_TEXT)
       # 关闭剪贴板
       w.CloseClipboard()
       try:
           return d.decode('utf-8')
       except:
           return d.decode('gbk')

    返回值 d 是字节类型的,需要解码,中文按 gbk 格式解码,英文按 utf-8 解码。

    类似地,写入剪贴板的代码如下:


    def setText(aString):#写入剪切板
       # 打开剪贴板
       w.OpenClipboard()
       # 清空剪贴板
       w.EmptyClipboard()
       # 写入剪贴板
       w.SetClipboardText(aString)
       # 关闭剪贴板
       w.CloseClipboard()

    实现将翻译结果自动替换原文的逻辑的代码如下:


    while(True):
           # 如果剪贴板正在被占用
           try:
               cs = getText()
           except:
               time.sleep(1)
               cs = getText()
           print('cs',cs)
           if cs and cs != ls:
               print('准备翻译')
               content = getText()
               tk = js.getTk(content)
               res = translate(tk, content)
               setText(res)
               time.sleep(1)
               ls = res

    值得注意的是,系统剪贴板对象是单例模式的,在操作系统范围内只有一个,而且读写剪贴板都是互斥的,在读(写)剪贴板的同时不允许任何对剪贴板的写(读)操作。试想这样一种情景,我们在其他软件中 Ctrl + C 写入剪贴板,而此时我们的程序代码正好执行到读剪贴板那一行,毫无疑问会报错,我的解决办法是使用 try…except 语句延时 1 s再读取,这样可以大大降低读写碰撞的概率,但无疑消耗了程序性能。最好的办法是判断剪贴板对象句柄是否被占用,其实我一直在寻找是否存在判断剪贴板对象句柄是否被占用的 API,但是一直没有找到

    项目地址

    https://github.com/Python3Spiders/GoogleAutoTranslationTool

    来源:https://inspurer.github.io/

    标签:python,翻译
    0
    投稿

    猜你喜欢

  • php7 参数、整形及字符串处理机制修改实例分析

    2023-11-23 19:48:31
  • python3的url编码和解码,自定义gbk、utf-8的例子

    2022-08-02 10:07:39
  • Python 调用API发送邮件

    2021-08-26 04:20:22
  • TensorFlow2.0矩阵与向量的加减乘实例

    2023-12-30 13:21:00
  • CSS样式表中继承关系的空格与不空格

    2007-12-12 13:05:00
  • mysql中group by与having合用注意事项分享

    2024-01-15 02:24:55
  • Python subprocess库的使用详解

    2021-10-25 04:59:32
  • Python设计模式之外观模式实例详解

    2022-01-18 16:39:37
  • javascript 深拷贝

    2024-05-25 15:18:49
  • Mysql中的Btree与Hash索引比较

    2024-01-16 12:56:49
  • python opencv实现任意角度的透视变换实例代码

    2023-11-09 15:14:42
  • 学习ASP.NET八天入门:第二天

    2007-08-07 13:24:00
  • 浅谈Go切片的值修改是否会覆盖数组的值 

    2024-04-26 17:18:19
  • MySQL系列之三 基础篇

    2024-01-25 21:09:28
  • 深入理解typescript中的infer关键字的使用

    2023-10-13 19:19:33
  • Python实现备份MySQL数据库的方法示例

    2024-01-27 18:20:04
  • three.js中文文档学习之创建场景

    2023-08-22 21:02:00
  • MySQL 启动成功但未监听端口的解决方法

    2024-01-29 00:01:55
  • Oracle RMAN快速入门指南

    2010-07-18 12:50:00
  • ASP写的不错的"数字分页"涵数

    2008-10-19 17:21:00
  • asp之家 网络编程 m.aspxhome.com