Python反反爬虫实战,JS解密入门案例,详解调用有道翻译

【Python爬虫】有道翻译2023新版 【Python爬虫】使用requests进行获取请求有道URL的结果,MD5加密sign值,AES解密翻译结果 阅读详情

文章目录

  • 前言
  • 分析
  • 分析url分析参数01分析参数02加密分析
  • 模拟请求
  • 注意点请求代码执行结果
  • 结语

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:623406465

前言

其实在以前就盯上有道翻译了的,但是由于时间问题一直没有研究(我的骚操作还在后面,记得关注),本文主要讲解如何用python调用有道翻译,讲解这个爬虫与有道翻译的js“斗争”的过程!

当然,本文仅供交流学习使用,适合自己做一些小东西娱乐,禁止用于商业用途!转载请注明微信公众号:bigsai。项目github地址:https://github.com/javasmall/python

分析

对于一个网站,首先肯定要的就是分析,分析其中的网页规则

分析url

进入有道翻译你会发现它的url是没有变化的,也就是说它的请求是通过ajax异步交互的。点击F12,很容易在XHR中找到这个交互的请求,点击查看信息,你会发现一串参数,其中有几个还是加密了的,啥salt盐啥的。先有个数。

分析参数01

可以大胆猜测:这个关键参数肯定在一块。我们搜索salt,然后正常的点击,格式化展开,在js中再次搜索salt。想找相关salt附近看看能不能找到断点进行调试!当然,最终你可以找到11个相关内容可以在每个附近进行断点调试。你这样乐意找到相关位置关键加密字段和函数。

 

 

分析参数02

这次,咱们使用浏览器调用堆栈的功能,查看js执行的堆栈进行查找。直接点击到对应模块打断点即可进行观察。最终你会找到这个位置generateSaltSign(n)的这个函数,主要加密函数都在里面执行

 

加密分析

其实有道翻译的加密是比较简单的了,你一看,

  • 不知道navigator.appVersion是啥是吧,我打印一看。就是浏览器头进行md5加密的嘛,可以固定不变的,也就是说这个bv(t)参数它可以是固定不变的。
  • 这个ts不就是13位当前时间戳吗!
  • 这个salt不就是时间戳后面加上100内的随机数吗,随便取一个就行。
  • 这个sign不就是"fanyideskweb" + 翻译的字符串 + salt + "n%A-rKaT5fb[Gy?;N5@Tj"这么一串串数字然后md5加密的嘛!

通过后面的分析发现这些参数并没有变化。所以这次生成的是唯一的,但是有一个前提是5000字以内,如果超出5000字他会截取前5000字,这点需要注意一下。

模拟请求

注意点

既然有了上面的规则,那么咱们就可以通过这部分的规则和抓包的信息整合用python模拟完成js的事件,发送请求。这里面有几点需要注意的。

  • Fristly,你要搞定python中md5加密模块,时间time模块,能够做出一些等价的一些转化。刚好,py的hashlib和time模块 can fullfill 你。这个问题解决。
  • In addition,post请求的主体data字典需要进行url编码才能当成data发送请求发过去。
  • last but not least,解决完加密最重要的就是header,大家一定不要麻批大意。这个content—length,经过我的经验告诉我它如果填错了就会报错,并且不填经过抓包分析系统会自动生成。所以不要计算主体长度的,这个参数一定要省略。不放cookie会报错,放了cookie经过测试你会发现有些可以该甚至可有可无,有些必须遵从其样式。而cookie中必须遵从的就是OUTFOX_SEARCH_USER_ID=-1053218418@117.136.67.240即数字+@+ip形式地址。可能是为了检验而用,这个可以直接进行模拟。

请求代码

返回结果是一串json,直接拿即可!

import requests
import hashlib
import time
import urllib.parse
# 创建md5对象
def nmd5(str):
    m = hashlib.md5()
    # Tips
    # 此处必须encode
    # 若写法为m.update(str)  报错为: Unicode-objects must be encoded before hashing
    # 因为python3里默认的str是unicode
    # 或者 b = bytes(str, encoding='utf-8'),作用相同,都是encode为bytes
    b = str.encode(encoding='utf-8')
    m.update(b)
    str_md5 = m.hexdigest()
    return  str_md5
def formdata(transtr):
    # 待加密信息
    headerstr = '5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    #print(round(time.time()*1000))
    bv=nmd5(headerstr)
    ts=str(round(time.time()*1000))
    salt=ts+'90'
    strexample='fanyideskweb'+transtr+salt+'n%A-rKaT5fb[Gy?;N5@Tj'
    sign=nmd5(strexample)
    #print(sign)
    i=len(transtr)
    #print(i)
    # print('MD5加密前为 :' + headerstr)
    # print('MD5加密后为 :' + bv)
    dict={'i':transtr,'from':'AUTO','TO':'AUTO','smartresult': 'dict',
          'client':'fanyideskweb',
          'salt':salt,
          'sign':sign,
          'ts':ts,
          'bv':bv,
          'doctype':'json',
          'version':'2.1',
          'keyfrom':'fanyi.web',
          'action':'FY_BY_REALTlME'
    }
    return dict


url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
 'Referer':'http://fanyi.youdao.com/',
 'Origin': 'http://fanyi.youdao.com',
 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
 'X-Requested-With':'XMLHttpRequest',
 'Accept':'application/json, text/javascript, */*; q=0.01',
 'Accept-Encoding':'gzip, deflate',
 'Accept-Language':'zh-CN,zh;q=0.9',
 'Connection': 'keep-alive',
 'Host': 'fanyi.youdao.com',
 'cookie':'_ntes_nnid=937f1c788f1e087cf91d616319dc536a,1564395185984; OUTFOX_SEARCH_USER_ID_NCOO=; OUTFOX_SEARCH_USER_ID=-10218418@11.136.67.24; JSESSIONID=; ___rl__test__cookies=1'
 }
input=input("请输入翻译内容:")
dict=formdata(input)
dict=urllib.parse.urlencode(dict)
dict=str(dict)
#dict=urllib.parse.urlencode(dict).encode('utf-8')

req=requests.post(url,data=dict,headers=header)
val=req.json()
print(val['translateResult'][0][0]['tgt'])

执行结果

结语

就这样,我们从0开始优雅的揭开有道翻译的面纱!你可以利用这个做一些有趣的事情(待续------)

 

python爬虫实战之爬取有道翻译 文章目录介绍网页分析代码实战 当我们学习python爬虫时我们需要做大量的练习,往后我会发布更多的python爬虫练习实战代码,进一步剖析爬虫的每一个细节 介绍 本次爬取的是有道翻译,利用python爬虫程序向有道翻译发起请求,获取翻译结果 网页分析 下面我们将走进有道翻译网页分析 开发者模式可以通过f12或者单击鼠标右键找到检查打开 有道翻译 当我们进入网页以后,会出现两个框,1是输入,2是翻译结果,由于有道翻译他是自动识别我们输入的内容,也就是说我们每往输入框输入一个字符他就会发起一次请求,具体分析请 阅读详情

相关推荐

有道翻译接口逆向_python有道翻译api(2)

sign 是 client=fanyideskweb&mysticTime=1711295634744&product=webfanyi&key=fsdsogkndfokasodnaso。# sign 是 client=fanyideskweb&mysticTime=1711295634744&product=webfanyi&key=fsdsogkndfokasodnaso。# 主要是获取key等参数。# 主要是获取key等参数。

2401_84003977的博客 426

利用 Python 实现有道翻译 (纯python、2020.6.1)

在交流群中看见有同学想利用python实现有道翻译的功能,特写一篇自己的研究心得分享给大家。(由于兴趣爱好,本文不采用抠js 的形式进行解析,转换成纯 python 的形式进行解析!) 网站地址:有道翻译 进入目标网站,打开控制台并随意输入一个单词对网页的翻译流程进行分析。 通过多次使用翻译功能发现,以 translate 开头的链接即是我们的目标链接。不难看出,发现只有四个参数是一直在变幻的,分别是 salt、sign、ts、bv,其中不难看出 salt 与 ts 是时间戳,关键点在于 bv..

Rezalt的博客 6241

AMD MI355X与NVIDIA B200在GLM5.2大模型推理性能与成本对比分析

在 AI 推理硬件选型中,成本与性能的平衡一直是技术决策的核心难点。AMD 最新发布的 CDNA 4 架构 MI355X 加速卡与 NVIDIA Blackwell 架构的 B200 在 GLM5.2 这类千亿参数大模型上的表现,直接关系到企业部署私有化模型或提供推理服务的经济性。实际测试数据显示,在 32 tok/s/user 的交互性设定下,单张 MI355X 能够达到 1369 tok/s 的吞吐量,虽然略低于 B200 的 1756 tok/s,但每百万 token 成本仅为 0.30 美元,比 B

weixin_28221501的博客 294

爬虫 | 基于 Python 实现有道翻译工具

Hi,大家好,我是半亩花海。本项目旨在利用 Python 语言实现一个简单的有道翻译工具。有道翻译是一款常用的在线翻译服务,能够实现多种语言的互译,提供高质量的翻译结果。

沉思默想,深度学习,半亩星河半亩月,半亩花海半亩云。 4598

电化学-论文分享-NanoStat: An open source, fully wireless potentiostat

本文主要分享论文NanoStat: An open source, fully wireless potentiostat,并记录学习笔记。如果有条件,建议看原文最好。

分享技术笔记,希望对大家能够有一定的帮助,同时也通过归纳总结提升自己的个人能力。 2873

【大模型学习】第二十四章 生成式人工智能(GAI)简介

‌的AI技术,其核心目标是通过学习数据中的规律,生成与训练数据类似但全新的文本、图像、音频、视频甚至代码。生成式人工智能(GAI)是一类能够‌。

以实战经验介绍行业知识 1637

【Python网络爬虫】2023年新版有道翻译爬虫破解

在去年下半年,网页版有道翻译上新,使得原来的爬虫接口失效,目前最新的接口用的是,接口情况如下图所示:接口的请求看似简单,但里面加密请求和返回值解密却非常复杂,本文将会介绍该新版有道翻译的爬虫破解过程。

moyuweiqing的博客 3734

Q3D提取PCB走线RLCG参数

介绍一种提取PCB走线寄生电容和寄生电感的方法

sinat_15150363的博客 2917

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

在爬虫过程中,经常给服务器造成压力(比如耗尽CPU,内存,带宽等),为了减少不必要的访问(比如爬虫),网页开发者就发明了反爬虫技术。     常见的反爬虫技术有封ip,user_agent,字体库,js加密,验证码(字符验证码,滑动验证码,点触式验证码等)。所谓魔高一尺道高一丈。有反爬虫,就有反反爬虫技术。本文重要讲js加密的破解方法。 js加密一般是在请求头或者请求参数加入加...

aini4568的博客 320

代谢组数据分析(二十一):通过MetaboAnalystR标准化构建sPLSDA预测模型

本文介绍了如何使用R语言中的MetaboAnalystR包和mixOmics包进行代谢组学数据的标准化和sPLSDA分析。MetaboAnalystR包用于数据预处理,包括数据初始化、清洗、补足、过滤和标准化等步骤,以确保数据质量。mixOmics包则用于sPLSDA分析,通过Lasso惩罚进行变量选择,并建立分类模型。文章详细说明了安装和加载相关R包的步骤,并提供了数据导入和预处理的代码示例。最后,强调了数据预处理的重要性,以确保后续分析的准确性和可靠性。

专注生信领域 2426

FPGA信号处理系列文章——分数倍插值抽取滤波器(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA信号处理系列文章——分数倍插值抽取滤波器(一)前言信号流matlab模型频谱示意图分析总结 前言 变采样率滤波器不仅仅存在整数倍插值和整数倍抽取的情况,还会存在分数倍插值抽取的情况。那这种情况下要怎么处理呢 信号流 分数倍插值抽取滤波器的信号流是什么?信号先进行插值,再进行FIR滤波,最后进行抽取 matlab模型 %signal 定点化数据输入 coeff_val_fir = importdata('fir.coe'); si

gzy0506的博客 1万+

利用Python实现有道翻译的功能

这是上学期在Python课堂上老师讲的利用Python实现有道翻译的功能。 流程如下:网址:有道翻译 输入翻译名称,按F12对网页进行分析,通过查询到translate开头的连接中我们找到了翻译的数据参数 首先将参数以urlencode编码的方式传入到url请求信息中,分二次打印:显示 接下来只需传出的请求信息读出来,再load一下就出来结果了 代码如下: #coding=utf-8 impo...

王大阳的博客 3828

RK3588部署YOLO模型 包含模型量化+npu轻量化+ubuntu+RGA图像加速和多线程模型加速 包源码

本专栏为深度学习部署全栈学习体系,包含68篇由浅入深的教程,专为零基础学习者设计。内容涵盖TensorRT与RK3588平台部署技术,包含Jetson系列和RK系列硬件部署实战,采用"理论+源码+实战"三位一体的教学模式。学习路径从基础环境搭建到模型优化、容器化部署、多硬件平台适配,最终掌握工业级AI部署能力。特色包括C++基础教学、Docker容器化、INT8量化、多线程优化等核心技术,并附带YOLOv5、人脸检测、车牌识别等多个实战项目源码。适合算法工程师转部署方向、嵌入式开发者及对

FJN110的博客 3731

使用python语言调用有道翻译接口实现中英互译

【代码】使用python语言调用有道翻译接口实现中英互译。

liyunyang2000的博客 1483

修改 Alist 密码时报错?看看这个坑怎么解决!

启动服务后,再修改密码”。以后再遇到类似问题,先检查服务是否正常运行,说不定就能少踩不少坑。如果还有其他 Alist 的问题,欢迎在评论区留言交流~

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1154

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python之对接有道翻译API接口实现批量翻译

使用有道智云API接口,实现对文档的批量翻译。

我是一个热爱游戏开发的Unity程序员,专注于使用Unity引擎创建创新和高效的游戏项目。在我的博客中,我分享Unity开发中的实用技巧、解决方案和优化方法,涵盖从基础入门到高级技术的各个方面。我喜欢探索新技术,持续学习,并与大家一起成长。希望我的分享能帮 3329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python调用有道翻译API进行翻译

python调用有道翻译API进行翻译

lcrdadas的博客 763

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Python爬虫】有道翻译新旧API接口

有道翻译官网新旧翻译API接口爬虫

user_from_future的博客 2629

【笔记】Python3|(一)用 Python 翻译文本的教程、代码与测试结果(第三方库 translate 和 腾讯 API 篇)

本篇包含 第三方库 translate 以及 腾讯 API 的测评。

shandianchengzi的博客 5265

利用Python实现汉译英的三种方法

【代码】利用Python实现汉译英的三种方法。

采菊东篱下,Python满乾坤! 1万+

python-获取有道翻译接口实现运行翻译 1

想要实现python获取有道翻译,输入内容翻译成你相应的内容 首先先进入有道翻译网页端,输入内容,查看F12 ,查看接口请求内容,提取出需要的内容 如图,我们可以查看到请求的接口地址请求方式,请求格式 入参见Form Data,传入python中转换成json格式 做好准备工作之后,就可以写代码么,需要import requests 和json 包 import requests import json word=input("请输入你要翻译的词语:") # 定义一个变量,传入接口地址 url='h

LXiaYu123456789的博客 336

爬虫——有道云翻译

废话不多说直接上代码。

m0_70812512的博客 835

让你瘦不停的23个小细节 - 生活至上,美容至尚!

 我们现在每天想着办法减肥减肥再减肥。其实细节决定成败。每天有宏图大志的你,是否想到正是这些小细节才能让你瘦不停。好好看看,运用好这23个小窍门,想不瘦都难。   一、基础方案:   吃是万恶之源,能量都是通过食物聚集的,所以甜点和油炸要少吃,尽量用水果代替,或者避开食物上的奶油部分。   1、用苹果切片替代饼干和蛋糕。   2、用普通蛋卷代替油炸蛋卷。   3、用巧克力蛋糕代替巧克力冰激...

lixyvip 111

零基础用Python+Requests搭建多语言翻译工具:以有道词典为例

本文为零基础开发者提供了一份详细的Python爬虫实战指南,教你如何使用Requests库和Tkinter构建一个功能完备的多语言桌面翻译工具。文章以有道词典为例,深入剖析了接口请求、数据加密和GUI开发,并整合了自动语言检测与历史记录等实用功能,帮助你快速掌握Python爬虫与桌面应用开发的核心技能。

weixin_29071809的博客 594

python有道翻译小工具

python+selenium+有道翻译,翻译工具

Clown_34的博客 514

[457]Python实现有道翻译接口加密解密

到这里js加密的破解就结束了,可以看到在流程当中比较重要的地方就是:1.找数据,知道该网站会对哪些数据和请求头进行验证2.找规律,寻找这些数据的加密规则3.调试js,学会浏览器中对js代码进行调试4.模拟数据,将这些数据通过代码模拟生成,然后加入到数据当中来源:https://www.jianshu.com/p/ff3cd93f79b0。

周小董 1600
上一篇: Python爬虫教程:python批量下载整站高清大图
下一篇: Python爬虫之js加密破解,抓取网易云音乐评论生成词云
Python_sn
博客等级 码龄6年 324粉丝 290原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值