IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 浅析Python谷歌翻译库的核心 -> 正文阅读

[Python知识库]浅析Python谷歌翻译库的核心

随着现在谷歌翻译的准确度越来越高,大部分人们不约而同的选择了谷歌翻译。对于Python而言,现在的googletrans可谓是使用的很顺心。对于googletrans这个库的client文件中的Translator类的translate方法,我在此简单剖析以下:首先对语种进行判断,判断是否在语言库里,然后生成data参数【以前访问谷歌还需要g_tk参数计算,不知道为什么访问起来越来越简单了】,谷歌的请求界面采用POST方法,一些参数暂时不变,唯一变的是data中的f.req参数,他由原文、原语种、目标语种组成,自己实现就是:

json.dumps([[['MkEWBc', json.dumps([[text, src, des, True], [None]]), None, 'generic']]])

然后直接POST得到了结果,比较麻烦的就是对返回结果的处理,但多用几次根据规律还是很好得到具体处理方案的:

for row in res.text.split('\n'):
    try:
        try:
            data = eval(eval(row.replace('null', 'None').replace('true', 'True').replace('false', 'False'))[0][2])
            # 获取原语种
            if src == 'auto':
                try:
                    src = data[2]
                except IndexError:
                    pass
            if src == 'auto':
                try:
                    src = data[0][2]
                except IndexError:
                    pass
            print(f"原语种:{src},原文:\n{text}\n\n翻译语种:{des},翻译文:\n{(' 'if data[1][0][0][3] else '').join([_[0] for _ in data[1][0][0][5]])}")
            break
        except IndexError:
            pass
        except TypeError:
            pass
    except SyntaxError:
        pass
else:
    print('未获取正确的翻译结果!')

连json都不用直接eval获取列表就可以了,通过异常判断获取所需要的有结果的那行,把这些综合在一起,写成一个不考虑语言、不依赖除requests其他第三方库的简单程序就是:

# _*_ coding:utf-8 _*_
# FileName: google_translate.py
# IDE: PyCharm
# 菜菜代码,永无BUG!

import json
import requests

text = '苹果\n香蕉'  # 待翻译文本
src = 'auto'  # 原文本语种
des = 'en'  # 翻译文语种

res = requests.post(
    url="https://translate.google.cn/_/TranslateWebserverUi/data/batchexecute?rpcids=MkEWBc&bl=boq_translate-webserver_20210929.09_p0&hl=zh-CN&soc-app=1&soc-platform=1&soc-device=1&rt=c",
    data={"f.req": json.dumps([[['MkEWBc', json.dumps([[text, src, des, True], [None]]), None, 'generic']]])}
)

for row in res.text.split('\n'):
    try:
        try:
            data = eval(eval(row.replace('null', 'None').replace('true', 'True').replace('false', 'False'))[0][2])
            # 获取原语种
            if src == 'auto':
                try:
                    src = data[2]
                except IndexError:
                    pass
            if src == 'auto':
                try:
                    src = data[0][2]
                except IndexError:
                    pass
            print(f"原语种:{src},原文:\n{text}\n\n翻译语种:{des},翻译文:\n{(' 'if data[1][0][0][3] else '').join([_[0] for _ in data[1][0][0][5]])}")
            break
        except IndexError:
            pass
        except TypeError:
            pass
    except SyntaxError:
        pass
else:
    print('未获取正确的翻译结果!')

简单点写成函数就可以任由自己使用了,这不到40行的代码是不是能让你心动呢~

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:02:17  更:2021-10-03 17:03:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:54:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码