每日分享:

做好自己

世界上没有一份工作不辛苦,也没有一处人事不复杂,无论你当下正在经历什么,都要调整好心态,继续前行,继续努力!

总有人嫌你不够好,也总有人觉得你哪里都好,爱你的人自然会爱你,不爱你的人做再多也是错。

在长大、在失去、在努力、在接受、在好好生活。

不会js也可以解出来!!!

  • 分析构建data数据
  • 编写代码

一、分析js构建data数据(主要讲解)

1. 在隐身窗口或无痕模式登录有道在线翻译:在线翻译_有道

2. 抓包 -> 输入要翻译的句子

3. 再新建一个隐身窗口执行步骤2,找到translate包,观察两次的Form Data有什么不同:

可以看到,表单中的 salt、sign、lts 这三个数据是变化的

4. 找到对应的js文件:

可以看到,js文件是同一个文件(后面的数字代表位置是在多少行) ,随意打开一个就行

5. 找一个Form Data中比较特殊的词,例如:smartresult(不要找像第一个数据 i ,因为 i 很可能会在js代码中出现很多次),之后直接在js代码中查找(Ctrl+f),找到如下代码:

很明显可以看出,它就是js中构建Form Data的部分代码,我们可以根据它来分析 salt、sign、lts 这三个数据是如何得到的

6. 观察这三个数据,可以发现,它们都与 r 有关:

7. 之后就找 r 是什么,往上滑可以看到如下代码:

所以,r 肯定与generateSaltSign这个函数有关

8. 通过查找(Ctrl+f)generateSaltSign这个关键词,可以找到generateSaltSign函数是怎么来的(其他的地方都是调用这个函数):

9. 我们可以发现,这行代码是把 r 的值给了generateSaltSign函数,那么说明,在这个大括号里(这一块代码)肯定有 r 的值,因此就在大括号中找 r 即可:

可以看出,划线代码就是 r 的定义

10.  可以在 r 的定义中找到 salt、sign、lts 这三个变化参数的来源:

lts:其实lts就是代码中的ts:

看lts的值:1638699280543,看到这一串数字要想到“时间戳”(也就是时间)

ts的值是 r 的值,而 r = "" + (new Date).getTime(),没学过js看不懂也没关系,我们可以复制这个语句:(new Date).getTime(),在如下图输入js代码:

如上就是得到的结果,可以推断出,这行代码的作用就是获得时间戳;ts就是把时间戳变成了字符串类型,ts与lts数字的个数也一致,可以推断它们是一样的。

salt:细心的小伙伴可以发现,salt比lts就多了一位数字

salt的值就是 i 而 i = r + parseInt(10 * Math.random(), 10);其中r是时间戳,后面代码又看不懂了,继续在Console中多次输入parseInt(10 * Math.random(), 10):

多次输入后你会发现,它是产生一个0-9的int型数据(没有10),也就是说salt的值就是lts的值后面加上了一个随机数

sign:首先可以看出它是十六进制

sign = n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT")

先说一下该表达式中的e:

我们可以想一下,什么东西这么重要,使js代码中特别多的参数都是e,当然就是要翻译的词/句子了。

解析sign就需要我们知道python了,python中的hashlib模块中有md5方法

这两个是最常见的方法

下面通过代码,来了解md5:

import hashlib
# 进行hash运算的数据
data = 'python'
# 创建hash对象
md5 = hashlib.md5()
# 向hash对象中添加需要做hash运算的字符串
md5.update(data.encode())
# 获取字符串的hash值(十六进制输出)
result = md5.hexdigest()
print(result)

结果:

在数据不是特别特别特别......大的时候,一个data对应一个md5后的值,一般不会出现重复

到此为止,Form Data 里面的值就都解决了,接下来写代码即可

二、源码

import requests
import hashlib
import time
import random
import json
from jsonpath import jsonpath
# 编写代码步骤:
# url
# headers
# form_data
# 发送请求,获取响应
# 解析数据(Response为json数据)class You_dao(object):def __init__(self, word):self.url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'self.headers = {'User-Agent': '改为你的U-A','Referer': '改为你的Referer','Cookie': '改为你的Cookie'}self.form_data = Noneself.word = word# 获取数据def generate_form_data(self):"""ts: "" + (new Date).getTime()salt: ts + parseInt(10 * Math.random(), 10);sign: n.md5("fanyideskweb" + word + salt + "Y2FYu%TNSbMCxc3t2u^XT")"""lts = str(int(time.time()*1000))salt = lts + str(random.randint(0, 9))data = "fanyideskweb" + self.word + salt + "Y2FYu%TNSbMCxc3t2u^XT"md5 = hashlib.md5()md5.update(data.encode())sign = md5.hexdigest()# 构建表单数据self.form_data = {'i': self.word,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt,'sign': sign,'lts': lts,'bv': '318dde5ec635786619012045ee59bf8a','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'}def get_data(self):response = requests.post(url=self.url, headers=self.headers, data=self.form_data)return response.contentdef run(self):self.generate_form_data()# 得到的数据为json类型data = self.get_data()# 将json转化为字典data = json.loads(data)data = jsonpath(data, '$..tgt')[0]print(data)if __name__ == '__main__':Word = input('输入要翻译的单词或句子:')you_dao = You_dao(Word)you_dao.run()

爬虫模拟对“有道在线翻译”发送请求(请求中的数据含需分析js来解出变化数据)相关推荐

  1. Python3网络爬虫教程8——有道在线翻译项目(JS加密)

    上接: Python3网络爬虫教程7--SSL数字证书 https://blog.csdn.net/u011318077/article/details/86538116 6. js加密(有道在线翻译 ...

  2. Python爬虫教程-16-破解js加密实例(有道在线翻译)

    python爬虫教程-16-破解js加密实例(有道在线翻译) 在爬虫爬取网站的时候,经常遇到一些反爬虫技术,比如: 加cookie,身份验证UserAgent 图形验证,还有很难破解的滑动验证 js签 ...

  3. python在线翻译代码_Python 20行简单实现有道在线翻译的详解

    简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是相关部分的代码: import urllib.re ...

  4. python读音有道-Python 20行简单实现有道在线翻译的详解

    简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是相关部分的代码: import urllib.re ...

  5. urllib库用POST请求模仿有道在线翻译

    思路 分析有道在线翻译的请求.响应信息 使用Google Chrome浏览器进行分析,如图: 1.获取到Request URL 2.获取到请求头信息 3.获取到要传递给服务器的表单信息 4.响应体,可 ...

  6. 爬有道在线翻译(已完善)

    今天写了个爬有道在线翻译的python爬虫,可以获得有道翻译的结果,先把代码放这(按q退出) import urllib.request import urllib.parse import json ...

  7. python读音有道-python爬虫之有道在线翻译

    今天初学了python这门课 老师简单的讲解了一下 python的安装环境,配置环境变量,当前主流Python使用的是3.x版本, 下午简单的讲解了python的起源,发展以及在各个方面的应用 然后晚 ...

  8. 爬虫入门-爬取有道在线翻译结果(2)

    由于服务器会识别访问的对象是否为代码并加以限制,所以需要加上一定的措施隐藏代码身份.以上节有道为例: 1.添加headers信息: 在生成request对象时添加headers信息中的User-Age ...

  9. Python 20行简单实现有道在线翻译

    转载请注明出处 目录 目录 简介 代码 重要函数 简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是 ...

最新文章

  1. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件
  2. Python3 Scrapy爬取猫眼TOP100代码示例
  3. 科技人员在计算机前的肖像,首个全国科技工作者日来了 西南大学学子为科技工作者画像...
  4. 计算机辅助设计源程序,计算机辅助设计(插值法程序).doc
  5. RDLC报表开发分组笔记
  6. 大数据与云计算课后习题
  7. css 六角形_创建数字六角形瓷砖图(第1部分)
  8. 2016年四川省TI杯电子设计竞赛B题
  9. Transformer解析与tensorflow代码解读
  10. 微信网页游戏刷分BUG利用——抓包分析记录
  11. 使用 Google Guava Striped 实现基于 Key 的并发锁
  12. 基于MSP430F5529的后驱四轮小车
  13. Android中的IPC方式
  14. 图像分割评价指标模型总结
  15. 物理学生物学计算机科学,生物物理学
  16. Windows系统安装之 BIOS篇(AMI BIOS)
  17. 可以用python自定义一个正多边形函数
  18. 雷军:5年100亿,All in AIoT,手机+AIoT成小米双引擎...
  19. [附源码]Java计算机毕业设计SSM房屋租赁管理系统
  20. 调用precedure时call和exec的区别

热门文章

  1. 计算机安全之网络安全议论文,网络安全800字议论文
  2. pytorch深度学习笔记(一)
  3. 声音传感器模块的改进
  4. win11安装后黑屏怎么解决
  5. 基于Tiny-51操作系统的51单片机温度测控系统设计
  6. 数据结构与算法学习——基础知识(一)
  7. Problem E: 类模板Sample
  8. Python小虫收集箱
  9. Django框架实现在线考试系统
  10. 兴趣推荐阅读体验同质化严重 智能算法需兼顾个性和深度