最近有个需求要批量调用Google翻译进行翻译,由于数据量过大,使用selenium模拟显然是不现实的。。。。

要是能调用他的接口就好了,但接口是收费的。。。没办法,哎,只能自己搞,看看能不能破解。看了下Google翻译的接口,

对浏览器右键检查,可用发现翻译是有接口的:

https://translate.google.com/translate_a/single?client=webapp&sl=auto&tl=en&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ssel=5&tsel=5&kc=1&tk={}&q={}

其中tk是一个ticket ,用作反爬机制,q为你要翻译的数据,所以我们最重要的是需要知道tk怎么来的。关于tk的生成,有兴趣的可用查看翻译页面的js,tk的生成是在前端通过js生成的,由需要翻译的数据进行一系列的加密操作,已经有大佬破解了,下面贴上生成tk的代码,直接调用get_tk()方法就可以获得,传入你需要翻译的数据。

#!/usr/bin/env python2
# -*- coding: UTF-8 -*-"""This module creates the TK GET parameter for Google translate.This is just a code port to python. All credits should go to the original
creators of the code @tehmaestro and @helen5106.For more info see: https://github.com/Stichoza/google-translate-php/issues/32Usage:Call this python script from the command line.$ python tk_generator.py <word>Use this module from another python script.>>> import .tk_generator>>> tk_generator.get_tk('dog')Attributes:_ENCODING (string): Default encoding to be used during the stringencode-decode process."""__all__ = ["get_tk"]import sys
from datetime import datetime_ENCODING = "UTF-8"# Helper functions
def _mb_strlen(string):"""Get the length of the encoded string."""return len(string.decode(_ENCODING))def _mb_substr(string, start, length):"""Get substring from the encoded string."""return string.decode(_ENCODING)[start: start + length]##################################################def _shr32(x, bits):if bits <= 0:return xif bits >= 32:return 0x_bin = bin(x)[2:]x_bin_length = len(x_bin)if x_bin_length > 32:x_bin = x_bin[x_bin_length - 32: x_bin_length]if x_bin_length < 32:x_bin = x_bin.zfill(32)return int(x_bin[:32 - bits].zfill(32), 2)def _char_code_at(string, index):return ord(_mb_substr(string, index, 1))#OLD Function
def _generateB():start = datetime(1970, 1, 1)now = datetime.now()diff = now - startreturn int(diff.total_seconds() / 3600)def _TKK():"""Replacement for _generateB function."""return [406604, 1836941114]def _RL(a, b):for c in range(0, len(b) - 2, 3):d = b[c + 2]if d >= 'a':d = _char_code_at(d, 0) - 87else:d = int(d)if b[c + 1] == '+':d = _shr32(a, d)else:d = a << dif b[c] == '+':a = a + d & (pow(2, 32) - 1)else:a = a ^ dreturn adef _TL(a):#b = _generateB()tkk = _TKK()b = tkk[0]d = []for f in range(0, _mb_strlen(a)):g = _char_code_at(a, f)if g < 128:d.append(g)else:if g < 2048:d.append(g >> 6 | 192)else:if ((g & 0xfc00) == 0xd800 andf + 1 < _mb_strlen(a) and(_char_code_at(a, f + 1) & 0xfc00) == 0xdc00):f += 1g = 0x10000 + ((g & 0x3ff) << 10) + (_char_code_at(a, f) & 0x3ff)d.append(g >> 18 | 240)d.append(g >> 12 & 63 | 128)else:d.append(g >> 12 | 224)d.append(g >> 6 & 63 | 128)d.append(g & 63 | 128)a = bfor e in range(0, len(d)):a += d[e]a = _RL(a, "+-a^+6")a = _RL(a, "+-3^+b+-f")a = a ^ tkk[1]if a < 0:a = (a & (pow(2, 31) - 1)) + pow(2, 31)a %= pow(10, 6)return "%d.%d" % (a, a ^ b)def get_tk(word):"""Returns the tk parameter for the given word."""if isinstance(word, unicode):word = word.encode(_ENCODING)return _TL(word)if __name__ == '__main__':# if len(sys.argv) != 2:#     print "Usage: %s <word>" % sys.argv[0]#     sys.exit(1)## print "%s=%s" % (sys.argv[1], get_tk(sys.argv[1]))print get_tk("你 好")

调用谷歌翻译的大致流程如下:

# 生成tk
tk = get_tk(content)
url = "https://translate.google.com/translate_a/single?client=webapp&sl=auto&tl=en&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ssel=5&tsel=5&kc=1&tk={}&q={}".format(tk, content)header = {"Referer": "https://translate.google.com/","User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36","sec-fetch-site": "same-origin","sec-fetch-mode": "cors","x-client-data": "CJG2yQEIorbJAQjBtskBCKmdygEIqKPKAQjiqMoBCJetygEIza3KAQjyrcoBCMuuygEIyq/KAQ==","cookie": "ANID=AHWqTUmEUOyWZxeXZaHhE0-5lGBTHOVeMH3NP6elG0Zi4kx3VkGky6oE7hNyEZk_; _ga=GA1.3.123605499.1565587980; _gid=GA1.3.1811799555.1565587980; NID=188=nikTUMCm2LqPiIFv2Qr6mAjrzE6jONn4_LBFYRYhdDPrXaNU5KA6336tSkKY67wWHbbLAYwL86RuyqqJE1bWp6ltY-RS27-hjNxx0F2GN5pF2NKJ9mDT25hPU5XBEMjllYomR9TvdBR7u0Lig-Mra7to_bFGWWW2nq3wog9TAdA; 1P_JAR=2019-08-12-09"}
resp = self._session.get(url, headers=header, timeout=30)
resp.raise_for_status()
if resp.status_code == 200:data = self._xpather.parse(url, resp.content)print data

最好带上请求头去请求,还有一个问题,当要翻译的content数据量过长时,请求方式使用post,不要使用get,content作为请求体。

实测可用翻译,但如果想做批量短时间翻译,使用上面方法还是不行,上面的方式翻译时会出现短时间内两虚翻译了20次左右时,ip被封的情况,封禁时间大概5分钟左右,之后自动解封。如果想短时间内批量调用,可用尝试使用代理池,我也用代理池试过,可能是代理的问题,使用代理访问不了这个接口,有兴趣的朋友可用试试有没有更好的办法

Google翻译接口调用相关推荐

  1. Google翻译接口应用

    Google翻译接口应用 最近做一翻译公司网站,要求加一在线翻译.之前他们要的是一个外链接,我在想要是有现成的翻译网站接口可以调用的话,这个链接也就没必要了.在网上查了下,google的在线翻译可以用 ...

  2. js利用google翻译接口把网页翻译成各国语言

    js利用google翻译接口把网页翻译成各国语言 网页翻译为德语(Translate Page To German) <a href="javascript: void(window. ...

  3. Google翻译接口(PHP API)

    /* Google翻译PHP接口 * 官成文 2009-03-28 * http://blog.csdn.net/aprin/ * 注意:如果翻译文本为UTF-8编码,则要删去mb_convert_e ...

  4. Google翻译接口

    原文地址链接:http://blog.163.com/lixiangqiu_9202/blog/static/53575037201421044721318/ google翻译API接口地址: htt ...

  5. python调用google翻译_python调用百度翻译、谷歌翻译

    谷歌翻译不提供接口,想要使用谷歌的翻译结果,需要借用爬虫技术,将待翻译的文本传入,抓取页面,解析出翻译结果,经测试,这种方法的翻译效果较差,不建议使用. 百度翻译提供接口,可在百度翻译注册开发者后获取 ...

  6. 破解google翻译接口

    一.网页分析 打开谷歌翻译链接:https://translate.google.com/ 按F12,点击network.在左侧输入"who are you" 可以看到,请求的链接 ...

  7. Python 调用百度通用翻译接口

    缘起 以为该类型的代码在CSDN上比比皆是,最后还是自己按照百度开发文档自己写了一个 库导入 import httpx from random import randint import hashli ...

  8. Python实现google翻译,免费多线程使用谷歌翻译接口

    文章说明 本文实现的方式大部分源码是从借鉴别人的博客,再他们的基础上修复了不能翻译的问题和其他的一些bug.但是原文找不到了,没法粘贴原文地址了,非常抱歉. 本文章解决的问题有: 翻译不来,在之前基础 ...

  9. python 调用Google翻译

    一.问题 在写调用谷歌翻译接口的脚本时,老是报错,我使用的的是googletrans这个模块中Translator的translate方法,程序运行以后会报访问超时错误 二.解决办法 经过多方资料查找 ...

  10. python有道自动翻译_Python 调用有道翻译接口实现翻译

    最近为了熟悉一下 js 用有道翻译练了一下手,写一篇博客记录一下,也希望能对大家有所启迪,不过这些网站更新太快,可能大家尝试的时候会有所不同. 首先来看一下网页 post 过去的数据 大家不难发现,我 ...

最新文章

  1. OSPF被隔离的区域
  2. 对items函数的理解
  3. 【Matlab 图像】边缘检测算法及效果演示
  4. 如何配置eclipse的安卓SDK下载目录
  5. 自己写js库,怎么支持AMD
  6. python templates_python templates在哪
  7. 服务器不安装Excel,实现导出Excel功能
  8. linux java -xms_为什么JVM比指定的-Xms消耗更少的内存?
  9. HDOJ-1050-Moving Tables(nyoj220)
  10. FP Growth算法
  11. android 分辨率 720 1184 适配,墨迹天气 Android版最新!趋势界面可以横向滑动切换城市!...
  12. JAVA怎么打开pkg_PKG文件在电脑上怎么打开!(普通PC)
  13. 金融投资大数据(1)-马科维茨资产组合基于excel
  14. 【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)
  15. 82.【LibraryManger】
  16. 2013移动开发工具盘点:最火原型设计工具
  17. 关于QQ一些功能的实现(二)
  18. 了解传输设备必备知识
  19. SVN服务器详解之用户权限配置——authz文件
  20. Dell XPS15 4K GTX1050 ubuntu16.04系统安装+分辨率设置

热门文章

  1. 马士兵的经典名言!!!
  2. kettle spoon 连接mysql数据库
  3. Mac+virtualbox安装win7
  4. 计算机网络怎样连手机软件,手机怎么共享网络给电脑_手机如何共享电脑网络-win7之家...
  5. python查文章字数
  6. 跟着团子学SAP PS—项目结算规则的自动生成 CJB2/CJB1 (ETO模式下正确结算规则设定案例)
  7. 如何实现Spark SQL 字段血缘?
  8. cc.Layout代码设置裁剪
  9. runtime error python 3.5_Python 3.5 RuntimeError: can't start new thread
  10. echarts 3D 柱状图