爬虫—有道翻译案例分析

(此内容仅供参考学习)
最近也是刚开始学爬虫,就做这个比较简单的案例,把学习和分析的思路记录一下~
关键词:request、post、抓包、js分析、MD5加密等

一、分析思路、抓包

  • 有道翻译url:https://fanyi.youdao.com/

  • 这里使用的是谷歌浏览器(无痕)

  • 右键检查,输入需要翻译的单词或句子

  • 抓包

  • 请求头的话这里就不重点说了,User-Agent、cookies、Referer三个字段最好都能加上

  • 我们可以看到请求方式为post,那么就要重点分析提交的表单数据;

  • 表单参数一般为固定写死的和动态变化的,固定的可以直接写上去,变化的则需要分析变化情况并找出一定的规律

  • 我们可以通过多次发多次请求来观察哪些是变的,哪些是不变的;

  • 下面对 “ 你好 ”发起两次请求

  • 通过对比FormData里面的参数可以发现:
    salt 、sign、lts
    这三个字段的参数是动态变化的(如果感觉不保险,可以多发几次请求观察)

二、动态参数分析、处理

  • salt 、sign、lts三个参数分析:

  • 先观察参数并找规律,发现ltssalt这个两个参数形式跟时间戳类似,不熟练或不了解的小伙伴可以找个时间戳的网站验证一下,发现它就是时间戳形式,并且发现salt多出一位,这里直接看的话并不清楚why

  • sign是一个32位的16进制数,一般考虑是不是MD5加密

  • 这里介绍一下,常见的加密算法:
    1、md5加密算法
    2、AES、DES对称加密
    3、RSA非对称秘钥加密
    4、Base64伪加密
    5、https对称秘钥加密
    6、非对称加密&证书

  • 参数大概分析之后,我们就找出对应的js文件,来分析一下js怎么处理的参数
    1、可以根据参数字段或值进行全局搜索(点击右上角三个点)
    这里以参数sign为例分析




  • 经过观察此文件中15处sign,发现红框内的js代码最像生成参数的代码(这里需要经常观察学习并总结经验)

  • 我们可以打断点来验证一下

  • 打完断点分析证明这些确实使我们想要的参数;

var t = n.md5(navigator.appVersion)1、获取时间戳并转化为字符串形式, r = "" + (new Date).getTime()2、时间戳 + 一个10以内的随机数(不包含10), i = r + parseInt(10 * Math.random(), 10);return {ts: r,bv: t,salt: i,3、对指定的字符串进行MD5加密sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT")
  • 我们可以把生成参数的js代码粘贴到js文件中,使用python的js2py、execjs等第三方库加载js代码得到结果参数
  • 也可以直接用python代码去完成js代码的功能(下面我们用这种方法)
  • python中的加密可以用hashlib这个库,详细使用方法可以百度一下

Formdata里面的参数分析过后,可以直接用python代码实现动态参数

     #js生成参数的过程用python实现# 获取字符串形式的时间戳lts = str(time.time()*1000)# 时间戳+随机数salt = lts + str(random.randint(1,9))# md5字符串加密32位tempstr = "fanyideskweb" + self.word + salt + "Y2FYu%TNSbMCxc3t2u^XT"md5 = hashlib.md5()md5.update(tempstr.encode())sign = md5.hexdigest()# 构造formdata字典formdata = {'salt': salt,'sign': sign,'lts': lts}

加上其他参数后,对url发送post请求即可。

完整代码如下:

#coding:utf-8
import requests
import hashlib
import time
import randomclass Youdao(object):def __init__(self,word):self.url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'self.headers = {'Cookie': 'OUTFOX_SEARCH_USER_ID=-676104602@10.108.160.100; JSESSIONID=aaac40qHRBaDr_iGhSLUx; OUTFOX_SEARCH_USER_ID_NCOO=696608045.4734024; fanyi-ad-id=115021; fanyi-ad-closed=1; ___rl__test__cookies=1630572993167','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36','Referer': 'https: // fanyi.youdao.com /'}self.formdata = Noneself.word = word# 生成formdatadef generate_formdata(self):word = self.word"""1.分析表单中动态变化的参数(多次抓包对比)2.全局搜索动态参数的字段或者值3.找出对应实现的js代码,打断点分析ts: "" + (new Date).getTime(),salt: r + parseInt(10 * Math.random(), 10);sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT") MD5 加密算法"""# 4.将js代码转化为python代码实现# 获取字符串形式的时间戳lts = str(time.time()*1000)# 时间戳+随机数salt = lts + str(random.randint(1,9))# md5字符串加密32位tempstr = "fanyideskweb" + self.word + salt + "Y2FYu%TNSbMCxc3t2u^XT"md5 = hashlib.md5()md5.update(tempstr.encode())sign = md5.hexdigest()# 构造表单字典self.formdata = {'i': word,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt,'sign': sign,'lts': lts,'bv': '89e18957825871c419be045180c67d3b','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_CLICKBUTTION'}def get_data(self):response = requests.post(url=self.url,headers=self.headers,data=self.formdata)return response.json()def run(self):# url# headers# formdataself.generate_formdata()# 发送请求,获取相应data = self.get_data()# 解析数据result = data['translateResult'][0][0]['tgt']print(result)
if __name__ == '__main__':word = input('请输入需要翻译的汉语:')Youdao = Youdao(word)Youdao.run()

爬虫—有道翻译案例(史上最详细分析教程)相关推荐

  1. Matlab重复测量的方差分析,两因素重复测量方差分析,史上最详细SPSS教程!

    原标题:两因素重复测量方差分析,史上最详细SPSS教程! 一.问题与数据 研究者想知道短期(2周)高强度锻炼是否会减少C反应蛋白(C-Reactive Protein, CRP)的浓度. 研究者招募了 ...

  2. python人脸识别教程_50行Python代码+OpenCV实现人脸识别!史上最详细的教程!

    环境拓扑: 操作系统:windows7 python版本:2.7.14 opencv版本:3.x 环境配置: 1.安装python(额...这个当我没说) 2.安装Opencv 这个从官网下载就OK啦 ...

  3. 两因素重复测量方差分析,史上最详细SPSS教程!

    原文地址 http://www.sohu.com/a/202657022_489312 2017-11-06 18:34 一.问题与数据 研究者想知道短期(2周)高强度锻炼是否会减少C反应蛋白(C-R ...

  4. Zookeeper客户端ZkClient、Curator的使用,史上最详细的教程来啦~

    1 前言 本文主要介绍了操作Zookeeper的几种客户端的基础使用,希望对老铁们会有所帮助. 可以去操作zookeeper创建.删除.查询.修改znode节点 2 Zookeeper服务器客户端分类 ...

  5. Crawler:基于urllib库+实现爬虫有道翻译

    Crawler:基于urllib库+实现爬虫有道翻译 目录 输出结果 设计思路 实现步骤 输出结果 后期更新-- 设计思路 第一步:首先要知道,data里面的内容是都需要在代码中发送给服务器的. 第二 ...

  6. python实战爬虫有道翻译与解决{“errorCode”:50}反爬虫问题

    title: python实战爬虫有道翻译与解决有道翻译反爬虫问题 date: 2020-03-22 20:21:12 description: 最近在学Python,一直没有尝试过实战.于是昨天试了 ...

  7. 史上最详细唇语识别数据集综述

    更新:VIPL官网网页格式更改,导致旧的LRW1000链接无法访问,现已更新LRW1000数据集链接,内部包含申请需要的文件 推荐一个大佬的综述,关于实现唇语识别的多种途径. 说明:本文包括经常用语唇 ...

  8. 史上最详细唇语识别最新研究进展记录

    本文是唇语识别近2年来最新的方法的记录,主要集中在中英文词级数据集如LRW,LRW-1000,英文句子级数据集如LRS2,英文短语级数据集如OuluVS2,以及其他一些数据集. 记录方法为1.简要翻译 ...

  9. 史上最详细全中文 Cisco 3560交换机使用手册

    史上最详细全中文 Cisco 3560交换机使用手册 (末尾送交换机安全技术) 目 录 CISCO Catalyst 3560-E系列交换机的功能应用及安全解决方案 3 一.Cisco? Cataly ...

最新文章

  1. leetcode 438. Find All Anagrams in a String 滑动窗口法
  2. DailyTick 开发实录 —— UI 设计
  3. Anconda PyCharm TensorFlow
  4. Loj 【CQOI 2006】简单题,mmp
  5. matplotlib 柱状图_Matplotlib数据可视化:柱状图与直方图
  6. 使用 Windows Sysinternals 工具进行故障排除
  7. “我的一次微软面试经历”
  8. mysql1558错误,mysql删除用户错误ERROR 1558解决办法
  9. [Err] 1093 - You can't specify target table 's' for update in FROM clause
  10. 二分法和牛顿迭代实现开根号函数:OC的实现
  11. louvain算法python_python – 如何在igraph中运行louvain社区检测算法?
  12. java 执行class文件
  13. 计算机主机包括哪两大部分,电脑硬件分为哪几个部分
  14. html彩色条,html5 canvas彩色流动线条动画特效
  15. 介绍计算机方队,方阵
  16. 等保2.0基本要求与等保1.0对比解读
  17. 旭锋科技制造信息管理系统
  18. 抖音上热门?这几个一定要记住
  19. bulldog靶机练习思路详解
  20. BT源代码学习心得(六):跟踪服务器(Tracker)的代码分析(初始化) -- 转贴自 wolfenstein (NeverSayNever)

热门文章

  1. Oracle(二)Oracle sql操作
  2. HDU 2838 Cow Sorting(双树状数组+求逆序数)
  3. VIP邮箱和免费邮箱哪个好?个人电子邮箱哪家好
  4. BUUCTF:[SWPU2019]你有没有好好看网课?
  5. PyQt4的学习历程(3)
  6. 如何破解带密码保护的word文件
  7. 美团点评校招前端方向笔试题
  8. python爬取豆瓣评论,并制作成词云
  9. JavaScript经典代码总结
  10. 【转载】各个版本Microsoft Visual C++运行库下载