Python 爬虫原理实现自动google翻译

首先用chrome打开谷歌搜翻译,看看它是怎么请求数据的
按F12键 进入开发者工具
选择network,如图

自动草稿

先点击一下这个clear,把原来的请求都clear,免得看不清

自动草稿

 

输入测试翻译内容

自动草稿

通过请求头信息,可以发现是get请求,请求翻译的内容是通过q这个参数传递的,其它参数暂时不知道什么意思。

 

自动草稿

q这个参数不清楚谷歌的方法,但有大神破解出来,我们直接用

class Py4Js():
def __init__(self):
self.ctx = execjs.compile(""" 
xo=function(a,b){
for(var c=0;c<b.length-2;c+=3)
{var d=b.charAt(c+2);d="a"<=d?d.charCodeAt(0)-87:Number(d);d="+"==b.charAt(c+1)?a>>>d:a<<d;a="+"==b.charAt(c)?a+d&4294967295:a^d}return a}

function TL(a){
var wo=function(a){return function(){return a}}
b=wo(String.fromCharCode(84));
var c=wo(String.fromCharCode(75));
b=[b(),b()];b[1]=c();
b="750.0";
var d=wo(String.fromCharCode(116));
c=wo(String.fromCharCode(107));
d=[d(),d()];
c="&"+d.join("")+ "=";
d=b.split(".");
b=6;
for(var e=[],f=0,g=0;g<a.length;g++)
{var k=a.charCodeAt(g);128>k?e[f++]=k:(2048>k?e[f++]=k>>6|192:(55296==(k&64512)&&g+1<a.length&&56320==(a.charCodeAt(g+1)&64512)?(k=65536+((k&1023)<<10)+(a.charCodeAt(++g)&1023),e[f++]=k>>18|240,e[f++]=k>>12&63|128):e[f++]=k>>12|224,e[f++]=k>>6&63|128),e[f++]=k&63|128)}a=b;for(f=0;f<e.length;f++)a+=e[f],a=xo(a,"+-a^+6");a=xo(a,"+-3^+b+-f");a^=Number(d[1])||0;0>a&&(a=(a&2147483647)+2147483648);a%=1E6;
return c+(a.toString()+"."+ (a^b))}
""")
def getTk(self, text):
return self.ctx.call("TL", text)

根据上面得到的q参数拼接url,得到

def buildUrl(text, tk):
baseUrl = "https://translate.google.cn/translate_a/single?client=webapp&sl=zh-CN&tl=fr&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&swap=1&otf=2&ssel=5&tsel=5&kc=1&"
baseUrl += 'tk=' + str(tk) + '&'
baseUrl += 'q=' + urllib.parse.quote(text)
# print(baseUrl)
return baseUrl

自动草稿

baseurl里面的tl控制翻译语言,例如中翻译英语,tl=en,我这儿是法语,所以tl=fr。

通过requests函数进行请求,得到翻译的返回结果

我这个数据全是在excel,所以数据从excel里面读取,最后再写回到excel,代码如下

运行后结果如图

自动草稿

自动草稿

 

 

​​​​​​​