文章目录

  • 絮叨一下
  • 分析
  • 开撸
    • 1.查找js
    • 2.分析js
    • 3. 写代码
    • 4.封装请求头
    • 5.提取数据
    • 6.整合
  • 写给看到最后的你

絮叨一下

前个爬了boss直聘,感觉这些大网站的反爬总是有办法安排的,不要望而生畏,又想到即将面临毕业,论文是个大问题,便想到一招进行翻译,然后实现将重的功能,于是今个就安排了有道翻译一波。

分析

有道主页


打开F12进行抓包就会发现

http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

这个才是真正的请求地址

既然是post请求看一下发送了什么数据


然后刷新,输入新的内容对比一下

发现这四个值是变化的,那就需要我们去分析一下js代码,看一下他们是怎么生成的

'salt': ,
'sign': ,
'ts':,
'bv': ,

这样在封装进data中发送过去不就ok了吗

开撸

1.查找js

点击:Initiator可以看见请求的js文件有那些

然后点击@fanyi.min.js:1

进去看一下

格式化一下

添加断点,也就是找到XHR/fetch Breakpoints 你可以针对某一个请求或者请求的关键字设置断点:

点一下‘+’输入url即可

然后去点击翻译


哦可以可以


可以点击这里t.translate 然后发现

'salt': ,
'sign': ,
'ts':,
'bv': ,


看一下8948行的断点处,发现是由generateSaltSign这个函数生成的

把鼠标放在上面提示这个函数在8368行,点击一下

没错就是这里了

2.分析js

var 是js 的变量 t,r,i 分别赋值给了ts,bv,salt 几个值 ,sign 是一个字符串加翻译内容加salt

然后分别来看一下他们是怎么生成的

ts:很明显是一个时间戳

bv:鼠标放在navigator.appVersion上发现 bv是ua 的md5 加密值

salt:是在时间戳的基础上加一位随机数

sign:是一个字符串加翻译内容加salt 在加一个字符串

OK 全部分析完毕就可以撸代码了

3. 写代码

import time
time = str(int(time.time()*1000))
# 时间戳 ts
import random
salt = str(time + str(int(random.random()*10)))
# 获取时间戳+随机数 salt
import hashlib
ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
hashlib_bv = hashlib.md5()
# 获取一个MD5加密的对象
hashlib_bv.update(ua.encode('utf-8'))
# 指定加密的字符串
bv = hashlib_bv.hexdigest()
# 获取加密后的16进制字符串 bv的值
import hashlib
sign_data = 'fanyideskweb'+ translation_data + salt + 'mmbP%A-r6U3Nw(n]BjuEU'
# 进行字符串的拼接hashlib_sign = hashlib.md5()
hashlib_sign.update(sign_data.encode('utf-8'))
sign = hashlib_sign.hexdigest()
# sign

有了这些我们伪装一下ua 然后去访问

import requests
import jsontranslation_data = input("请输入要翻译的内容:")
ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
headers = {'User-Agent':ua
}data = {'i': translation_data,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': str(salt),'sign': str(sign),'ts': str(time),'bv': str(bv),'doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_CLICKBUTTION'
}response = requests.post(url,headers=headers,data=data).content.decode()
translation = json.loads(response)print(translation)

突然看见


额 请求失败了

4.封装请求头

再看看headers 加入 Cookie 以及 Referer

于是

headers = {'User-Agent':ua,'Cookie':'OUTFOX_SEARCH_USER_ID=1120454603@10.108.160.101; JSESSIONID=aaa43DnyRwVqd5dr3eglx; OUTFOX_SEARCH_USER_ID_NCOO=1050084892.1281917; ___rl__test__cookies=1592466058098','Referer': 'http://fanyi.youdao.com/'
}

然后在请求一下:

okok 完全可以

5.提取数据

然后进行提取就可以了

print("翻译后:" + translation['translateResult'][0][0]['tgt'])

然后在运行一下

完全可以

整合一下代码

6.整合

import requests
import time
import hashlib
import random
import jsontranslation_data = input("请输入要翻译的内容:")
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'headers = {'User-Agent':ua,'Cookie':'OUTFOX_SEARCH_USER_ID=1120454603@10.108.160.101; JSESSIONID=aaa43DnyRwVqd5dr3eglx; OUTFOX_SEARCH_USER_ID_NCOO=1050084892.1281917; ___rl__test__cookies=1592466058098','Referer': 'http://fanyi.youdao.com/'}time = str(int(time.time()*1000))
# 获取时间戳salt = str(time + str(int(random.random()*10)))
# 获取时间戳+随机数hashlib_bv = hashlib.md5()
# 获取一个MD5加密的对象
hashlib_bv.update(ua.encode('utf-8'))
# 指定加密的字符串
bv = hashlib_bv.hexdigest()
# 获取加密后的16进制字符串sign_data = 'fanyideskweb'+ translation_data + salt + 'mmbP%A-r6U3Nw(n]BjuEU'
# 进行字符串的拼接hashlib_sign = hashlib.md5()
hashlib_sign.update(sign_data.encode('utf-8'))
sign = hashlib_sign.hexdigest()data = {'i': translation_data,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': str(salt),'sign': str(sign),'ts': str(time),'bv': str(bv),'doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_CLICKBUTTION'
}response = requests.post(url,headers=headers,data=data).content.decode()
"""
{"translateResult":[[{"tgt":"apple","src":"苹果"}]],"errorCode":0,"type":"zh-CHS2en","smartResult":{"entries":["","[园艺] apple\r\n"],"type":1}}
"""translation = json.loads(response)print("翻译后:" + translation['translateResult'][0][0]['tgt'])

写给看到最后的你

朋友,感谢你看到了最后,新手报道,技术不成熟的地方请多多指点,感谢!

公众号:Linux下撸python
期待和你再次相遇
愿你学的愉快

爬虫-反爬二:有道词典js加密相关推荐

  1. Python爬虫:爬取instagram,破解js加密参数

    Python爬虫:爬取instagram,破解js加密参数 instagram 是国外非常流行的一款社交网站,类似的还有像facebook.twitter,这些社交网站对于掌握时事热点.电商数据来源和 ...

  2. 爬虫破解js加密破解(二) 有道词典js加密参数 sign破解

    在爬虫过程中,经常给服务器造成压力(比如耗尽CPU,内存,带宽等),为了减少不必要的访问(比如爬虫),网页开发者就发明了反爬虫技术. 常见的反爬虫技术有封ip,user_agent,字体库,js加密, ...

  3. python有道字典_Linux下自制有道词典 - python 解密有道词典JS加密

    对于爬虫新手来说,JS解密是一道过不去的坎,需要不断地练习. 平时在linux下开发,鉴于没有什么好用翻译软件,打开网易也占用系统资源,所以写了个在控制台的翻译软件接口. 使用python爬虫,查看网 ...

  4. 爬虫:突破有道翻译js加密(最新)

    爬虫:突破有道翻译js加密 代码已上传至个人GitHub,可供下载: 突破有道翻译js加密 思路:(python版本3.6) 1.分析post上传form信息,发现存在加密行为 2.查看网页js文件, ...

  5. python 爬取有道词典的翻译 *渔夫版

    前言 在小甲鱼课程里学习到的python爬取有道词典的翻译,发现一些东西不是很适用于现在,网上给出的答案分为两种 一.去掉 "_o" import urllib.request i ...

  6. python爬取有道词典json报错,求帮助!

    python爬取有道词典json报错,求帮助! import urllib.request import urllib.parse import json import time import ran ...

  7. 爬虫-反爬一:boss直聘cookies反爬怎么治

    文章目录 絮叨一下 分析 开撸 1.新建爬虫 2.分析页面布局 3.步骤 1.设置middlewares以及settings(核心) 2.boss_spider.py 3.item.py 4.运行 5 ...

  8. 手把手教学--Python爬取有道词典

    本篇文章做法参考了https://www.bilibili.com/video/av4050443/?p=55这个视频中的方法,并在此基础上加以修改,最终实现的结果如下: 在爬取有道词典之前,我们应该 ...

  9. 【爬虫逆向案例】某道翻译js逆向—— sign解密

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! [爬虫逆向案例]某道翻译js逆向-- sign解密 1.前言 2.步骤 3.源码 4.号外 1.前言 相信各位小伙 ...

最新文章

  1. JSP实现停车场收费管理系统
  2. 【MM 模块】 Optimized Purchasing 优化采购 3
  3. 【转】Java虚拟机(JVM)以及跨平台原理
  4. Linux命令关机/重启和Windows系统dos命令关机/重启
  5. tf.app.flags和tf.app.run的使用
  6. 《时代周刊》四份NFT杂志封面拍卖结束,总售价为276 ETH
  7. 开始VC6学习之旅2
  8. 在虚拟机中使用物理硬盘的两个用法及注意事项
  9. 设计模式(7) 续原型模式
  10. 李华上大学了吗?(I)
  11. pkpm字体库下载_pkpm字体库转到cad
  12. 基于STM32的小说阅读器
  13. 【pytorch目标检测】FPN网络结构
  14. Android常用逆向工具+单机游戏破解
  15. 2007年牛人牛语录
  16. 概率论与数理统计基础概念与重要定义汇总
  17. 千兆网线水晶头的接法
  18. 一文读懂 Linux 下单机实现百万并发的内核黑科技:连接跟踪(Conntrack)
  19. 【vue js】省市区js数据转为tree结构
  20. 【文本文件与二进制文件的区别;文件打开与关闭的方法、不同读写方式】(学习笔记19--文件上)

热门文章

  1. windows安装cygwin
  2. CAtia_打开提示:许可证过期怎么办
  3. 虚拟机与宿主机网络互通配置
  4. FLStudio水果最新版本V21支持中文语言
  5. 达州中学高考2021成绩查询,2020达州高考成绩揭晓,恭喜恭喜!另附成绩统计表...
  6. Java语言格式化返回日期为北京时间(东八区)
  7. 傅里叶变换的意义和理解(通俗易懂)[转]
  8. oj 2143 图结构练习——最短路径的几种算法
  9. 邮箱每日发送有上限吗?各大邮箱每天限制发信数量多少?
  10. 查询活动开始时间和结束时间