英语翻译太难?我一怒之下用爬虫写了两个翻译脚本(2)

    • 📋 个人简介
  • 前言

    • 百度翻译版本(简单)
    • 分析
  • 代码

  • 结果

  • 有道翻译版本(困难)

    • 分析(js逆向)
  • 代码

  • 结果

  • 结语

前言

=================================================================

它来了!它来了!作为一名程序员,英语句子不会翻译,这我不能忍,必须安排脚本!!!

百度翻译版本(简单)


分析

进入百度翻译,F12进入网络中的全部,在你写你要翻译的东西时,在网络中的全部中可以看到sug这个链接,就是我们的接口url,参数是kw。

请添加图片描述

请添加图片描述

代码

import requests

post_url=‘https://fanyi.baidu.com/sug’

headers={

‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36’

}

word = input(‘请输入你要翻译的,可以为各种语言:’)

data = {

‘kw’: word

}

response = requests.post(url=post_url,data=data,headers=headers)

dic_obj = response.json() #将json数据转换为字典

print(dic_obj[‘data’][0][‘v’])

结果

在这里插入图片描述

在这里插入图片描述

有道翻译版本(困难)


分析(js逆向)

F12进入到开发者模式,在网络中的xhr(找ajax请求的地方)中找到下图接口。

在这里插入图片描述

然后我们看参数:

在这里插入图片描述

在这里插入图片描述

两张图比较得出,i 应该就是我们要翻译的句子,画绿线的是不相同表单的参数,需要我们处理,Its一看就是13位的时间戳,salt英文意思是盐,且比时间戳lts多一位,前面十三位都一样,应该是个加盐时间戳(对于某串数字可以进行加一串数字或字符串再进行加密,在加密中我们叫加盐),这两个参数我们完全可以用python单独模拟,为了避免不必要的麻烦或者有些人不会,我们后面直接找到他们的js语句,用python执行js生成就行。

而这里的sign一看有32位,应该是某种加密算法产生的,最常见的就是md5和rsa加密了,下面我们进行全局搜索js逆向:

在这里插入图片描述

在这里插入图片描述

经过搜索,我们发现了老盆友md5加密,也找到了参数的生成方式,图中js里的r就是时间戳,js里的i就是加盐时间戳,sign是用md5加密的括号里的字符串,还要分析e的产生,可以通过打断点调试找出。

在这里插入图片描述

可以看到e就是我们要翻译的东西,现在参数都明显了,我们最简单的其实调用python中的hashlib模块中的md5加密算法就可以得到sign,但这里我们不用,加大难度,练习js逆向。我把直接提取到的md5加密过程的js文件放到网盘里,大家自己提取,代码中要用。

链接:https://pan.baidu.com/s/1aV1tEo35Oyw4TUExhJoXUA

提取码:waan

同时,为了应对反爬,不仅要加User-Agent,还要加Cookie和Referer。

代码

import requests

import execjs #执行js语句的模块

import json

import jsonpath

class Youdao():

def init(self,msg):

url

self.url = ‘https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule’

headers

self.headers = {

‘User-Agent’: ‘Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 91.0.4472.124Safari / 537.’,

‘Cookie’: ‘OUTFOX_SEARCH_USER_ID = -1032338096@10.169.0.102;OUTFOX_SEARCH_USER_ID_NCOO = 39238000.072458096;JSESSIONID = aaak-QLUNaabh_wFWK8Qx;___rl__test__cookies = 1626662199192’,

‘Referer’: ‘https://fanyi.youdao.com/’

}

self.msg = msg

self.Formdata = None

def js_Formdata(self):

#时间戳

r = execjs.eval(‘“” + (new Date).getTime()’)

#时间戳加盐

i = r + str(execjs.eval(‘parseInt(10 * Math.random(), 10)’))

ctx = execjs.compile(open(‘./youdao.js’, ‘r’, encoding=‘utf-8’).read())

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值