浅谈Python爬虫(八)【有道词典翻译API】

最近用到了有道的翻译接口。但是发现是有加密的。如下是他的请求参数。

i: 你好        // 翻译的文本
from: AUTO      // 定值
to: AUTO        // 定值
smartresult: dict       // 定值
client: fanyideskweb    // 定值
salt: 16194905157194        // time + num
sign: e44b8c53a99e5d54f03e82da13c95aa5
lts: 1619490515719      // time
bv: 62c1eba97402d4ff4eb261254e974c27
doctype: json       // 定值
version: 2.1        // 定值
keyfrom: fanyi.web      // 定值
action: FY_BY_REALTlME      // 定值

分析上面的参数列表,我们发现变化的参数只有 i(文本)、salt(时间戳+随机数)、lts(时间戳)、sign(未知)、bv(未知)。
也就是说,只需要判断出sign和bv就可以了。

我们找一下JS代码。在请求那里。点击Initiator,跳转到调用JS的顺序。发现全是同一个JS代码。

点进去,然后点击左下角的花括号{}可以对代码进行格式化处理。
随后,我们采用最简单粗暴的办法 ---- 直接搜索参数。。。。
这里,我们搜索sign,然后在代码的8386行可以看到返回这个参数的代码。我们发现他是对一个字符串进行md5加密后得到的密文。

“fanyideskweb” + e + i + “…”

往上面看一看,图中的8381行有 i 的定义。即

i = r + 随机数

再往上看,图中的8380有 r 的定义。即

r = 时间戳

也就是说

i = 时间戳 + 随机数

那么还差 e 了。代码中可以看到,e是传进来的参数,不好分析。那么我们直接打断点调试一下。

在这段代码的最后一行打断点(点一下就好),然后重新点击翻译按钮,可以看到如下

搜嘎。原来 e 就是我们输入的文本。这样,sign就解决了

sign = md5( “fanyideskweb” + 文本 + 时间戳 + 随机数 + “…” )

图中还可以看出。bv 就是 t。而 t 是对一个参数(navigator.appVersion)进行md5加密的结果,我们把鼠标放到参数上,可以看到它其实就是UA

这样所有的参数都解决了。接下来就是python代码实现了。全部代码如下

# -*- coding: utf-8 -*-
# Author:   玛卡巴卡
# Date:     2021/4/27 10:29
import requests
import hashlib
import time
import randomclass YDDict(object):"""有道翻译"""@staticmethoddef get_data(keyword):"""获取到其余的加密参数"""md = hashlib.md5()t = str(int(time.time() * 1000))i = t + str(random.randrange(10))md.update('fanyideskweb{}{}Tbh5E8=q6U3EXe+&L[4c@'.format(keyword, i).encode('utf8'))sign = md.hexdigest()return t, i, signdef translate(self, keyword='你好', data_from='AUTO', data_to='AUTO'):"""对keyword进行翻译params: params_from 文本语言params: params_to 翻译成的语言类型"""url = 'https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36','Referer': 'https://fanyi.youdao.com/?keyfrom=fanyi-new.logo','Host': 'fanyi.youdao.com','Origin': 'https://fanyi.youdao.com','Cache-Control': 'no-cache','Connection': 'keep-alive',}t, i, sign = self.get_data(keyword)data = {"i": keyword,"from": data_from,"to": data_to,"smartresult": "dict","client": "fanyideskweb","salt": i,"sign": sign,"lts": t,# 这里bv是对UA加密得到的,所以也写成了定值"bv": "62c1eba97402d4ff4eb261254e974c27","doctype": "json","version": "2.1","keyfrom": "fanyi.web","action": "FY_BY_REALTlME",}response = requests.post(url, headers=headers, data=data)# json中包含结果,自己解析一下OKprint(response.json())if __name__ == '__main__':t = YDDict()t.translate(keyword='中国')

这样可以正常获取到翻译的结果,但是如果请求比较频繁的话,ip会被Ban掉,建议使用代理IP。

浅谈Python爬虫(八)【有道词典翻译API】相关推荐

  1. python 模拟浏览器selenium_浅谈python爬虫使用Selenium模拟浏览器行为

    前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...

  2. 如何用python抓取文献_浅谈Python爬虫技术的网页数据抓取与分析

    浅谈 Python 爬虫技术的网页数据抓取与分析 吴永聪 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2019(000)008 [摘要] 近年来 , 随着互联网的发展 , 如何 ...

  3. 浅谈Python爬虫(五)【网易云热评爬取实例】

    浅谈Python爬虫(五) 目的:爬取网易云歌单所有歌曲的信息及热评 Python环境:3.7 编译器:PyCharm2019.1.3专业版 存储格式:JSON 1.分析网页 进入网易云音乐首页,点击 ...

  4. php调用翻译,PHP调用有道词典翻译API实现翻译功能及代码

    PHP调用有道词典翻译API实现翻译功能及代码,其中英文可以翻译,中文不能翻译是什么问题啊?急 http://fanyi.youdao.com/openapi.do?keyfrom=cxvsdffd3 ...

  5. php有道,PHP调用有道词典翻译API实现通译功能及代码

    PHP调用有道词典翻译API实现通译功能及代码PHP调用有道词典翻译API实现翻译功能及代码 PHP调用有道词典翻译API实现翻译功能及代码,其中英文可以翻译,中文不能翻译是什么问题啊?急 http: ...

  6. [python爬虫]--调用有道词典进行翻译

    最近在学习python爬虫,写出来的一些爬虫记录在csdn博客里,同时备份一个放在了github上. github地址:https://github.com/wjsaya/python_spider_ ...

  7. 浅谈Python爬虫之BeautifulSoup模块

    目录 ​ 前言 安装库 导入库 解析文档示例 提取数据示例 CSS选择器 实例小项目 总结 前言 BeautifulSoup是主要以解析web网页的Python模块,它会提供一些强大的解释器,以解析网 ...

  8. 子沐教你Scrapy——浅谈Python爬虫

    本章工作任务 任务1:为什么学习Python爬虫 任务2:什么是爬虫 任务3:urllib的应用 任务4:cookie实际使用 任务5:正则表达式 本章技能目标及重难点 编号 技能点描述 级别 1 为 ...

  9. 使用python爬取有道词典翻译

    ```python```python```python import requests # 导入requests 模块 import json # 导入json# 有道里面的响应的xhr地址 # 将下 ...

  10. Android开发——手把手写APP(三)调用有道词典翻译API实现的翻译APP(详细备注解读)

    运行效果图 有道翻译的API http://fanyi.youdao.com/openapi.do?keyfrom=lewe518&key=70654389&type=data& ...

最新文章

  1. WindowManager.LayoutParams.type属性
  2. Citrix虚拟化技术之一XenServer6.2安装
  3. java概述、安装、配置环境、运行
  4. 背包问题 tyvj1172
  5. Django(part15)--页面跳转
  6. SAP Spartacus home page的三大section
  7. phpcms上传php,phpcms如何上传视频
  8. 理解计算机网络的拓扑结构,认识计算机网络拓扑结构
  9. plsql的异常提示怎么定位_oracle plsql 异常信息怎样查看
  10. HTML5.1 推荐中 1.5.3. Extensibility 段落翻译
  11. OPC UA 统一架构学习4
  12. JAVA 反编译方法
  13. 同时安装vs2005团队开发版和sql 2005企业版
  14. Ubuntu20.04 搭建repo + gitlab的代码管理系统
  15. 用php做滚动,用PHP+java实现自动新闻滚动窗口
  16. 2019领克车展 Max Co币机诞生记
  17. fatal: The remote end hung up unexpectedly
  18. js页面加载实现loading提示效果
  19. ∫e^(-x^2)dx怎么求 ??用的是什么方法??
  20. nyoj892买牛奶

热门文章

  1. educoder_python:6-1-对象第1关:TOM猫原型 类
  2. 【One Page】概率论复习|Probability Theory Review
  3. IPV6地址数据库导出
  4. 2016年淘宝购买华硕FL5900UQ7500惨痛经历教训总结
  5. 数据库期末大作业:机票预定信息系统数据库设计与实现
  6. 逍遥书生服务器啥时候维护完毕,2020年8月18日定期维护解读
  7. 数据分析模型篇—麦肯锡矩阵(GE矩阵)
  8. 亚马逊 MWS上传数据 API部分的相关内容 amazon api 文档
  9. Python的文献计量分析流程实现--含代码
  10. c语言三重积分程序求法,D9_3三重积分[同济大学高等数学]..docx