python爬虫模拟有道翻译

案例目的:

通过模拟有道翻译,介绍携带form表单发送post请求以及破解form表单中的加密数据。

案例实现功能:

模拟有道翻译,实现中英互译。

爬取过程分析:

找到目标的url,注意,这里的url是指对应的response为翻译结果的url。而非首页的url。如下图:

检查响应结果:


找到url之后,往下开始我们的重点了

本次爬取的关键在于:怎样处理表单数据中发生变化的数据,以及如何破解加密的数据。

对比翻译不同内容的表单数据,如下图:



对比上图表单数据可知,表单数据发生变化的有参数i,参数salt,参数sign和参数lts

分别分析四个参数:

1.参数i:显而易见为要被翻译的内容
2.参数salt:我们可以根据格式推出salt为以毫秒为单位的时间戳+随机数字
3.参数sign:待分析
4.参数lts:根据格式推出为以毫秒为单位的时间戳

剩下未发生改变的参数直接复制即可。

我们重点分析一下参数sign:

通过在search中所搜sign值,我们可以得到表单数据所对应的内容:

经过对前端代码的调试,我们发现,sign数据为字符串"fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@"的MD5加密数据。其中e对应的为要被搜索的内容,i对应为salt参数。


form表单的四个数据已经分析完毕。

下面说如何解析爬取到的响应数据:

发送请求,获取的相应数据为json数据,因此可以通过json在线解析得到数据的位置(jsonpath的语法为$…tgt)。

注意事项:

1.表单数据中的参数from参数to同样为auto,意为中译英,英译中是自动识别的。

2.有道翻译是无法识别拼音的,因此可以在发送请求前加上异常处理try用来处理无法识别的语言

3.我们可以通过在程序入口处加上while死循环,可以让翻译一直进行,避免手动执行。

所有过程已经分析完毕,开始上代码:

import requests
import time
import random
import hashlib
import jsonpathif __name__ == '__main__':# 加上死循环,一直执行while True:# 输入要被翻译的内容content = input('请输入要被翻译的内容:')# 确定目标的urlurl_ = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'# 创建请求头参数headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36','Referer':'http://fanyi.youdao.com/','Cookie':'OUTFOX_SEARCH_USER_ID_NCOO=1328394085.0392962; OUTFOX_SEARCH_USER_ID="1796778757@10.108.160.18"; JSESSIONID=aaaEK20l8ctLw9SDeioDx; ___rl__test__cookies=1611923654835'}# 构造表单数据参数content_ = contentsalt_ = str(int(time.time()*1000))+str(random.randint(0,9))e = contenti = salt_start_sign = "fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@"sign_ = hashlib.md5(start_sign.encode()).hexdigest()lts_ = str(int(time.time()*1000))data_ = {'i': content_,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt_,'sign': sign_,'lts': lts_,'bv': '3d91b10fc349bc3307882f133fbc312a','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'}# 由于输入拼请求汇报错,在发送请求的程序加上异常处理try:# 发送请求,获取响应response_ = requests.post(url_,headers=headers,data=data_)# 判断数据类型为json类型py_data = response_.json()# 提取翻译出来的数据res_ = jsonpath.jsonpath(py_data,'$..tgt')[0]# 打印数据print(f'翻译出来的数据为:{res_}')except:print('您的输入有误,请重新输入...')

执行结果如下:

下面介绍一下如何将我们爬取实现的翻译打包成一个小程序:

1.首先将代码保存到在一个以英文命名的文件下。

2.在我的电脑找到文件所在的位置,然后再上面的路径下输入cmd进入黑窗口

3.打开黑窗口后输入pyinstaller -F demo.py(文件名称)

4.文件自动进行解压

5.解压后找到生成的dist文件

6.打开里面的demo.exe程序


这样就可以实现将程序打包成软件的形式。(由于我们未加任何修饰,因此得到的只是一个简陋的黑窗口)

这里提醒一下大家,可以将这个demo.exe文件发给那些没有安装pycharm的小伙伴,他们也可以直接打开软件进行使用的(一个不错的装x工具)

python爬虫模拟有道翻译相关推荐

  1. Python爬虫破解有道翻译

    有道翻译是以异步方式实现数据加载的,要实现对此类网站的数据抓取,其过程相对繁琐,本节我以有道翻译为例进行详细讲解. 通过控制台抓包,我们得知了 POST 请求的参数以及相应的参数值,如下所示: 图1: ...

  2. 教你用Python爬虫自制有道翻译词典

    Python爬虫能够实现的功能有很多,就看你如何去使用它了.今天小千就来教大家如何去利用Python爬虫自制一个有道翻译词典. 首先打开有道翻译页面,尝试输入hello,就出现翻译了,可以自动翻译.有 ...

  3. 【Python爬虫】有道翻译

    Hello,爬虫 直接贴代码 import urllib.requestimport time import random import hashlib # 上边三个模块是用于生成有道翻译的有效时间戳 ...

  4. 基于python爬取有道翻译,并在线翻译

    基于python爬取有道翻译,并在线翻译 由于我也是爬虫新学者,有什么做的不对的请多加包涵 我们需要使用的库如下 from urllib import request import urllib im ...

  5. Python爬虫实例:自制翻译机(简单)

    文章目录 Python爬虫实例:自制翻译机 要求实现功能:用户输入英文或中文,程序即可打印出来对应的译文. 步骤 解决反爬 上码 加界面 结果展示 Python爬虫实例:自制翻译机 一起试试爬取有道翻 ...

  6. python有道翻译接口-Python通过调用有道翻译api实现翻译功能示例

    本文实例讲述了Python通过调用有道翻译api实现翻译功能.分享给大家供大家参考,具体如下: 通过调用有道翻译的api,实现中译英.其他语言译中文 Python代码: # coding=utf-8 ...

  7. python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...

    今天为大家带来的内容是:干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏) 文章主要介绍了python爬虫模拟浏览器的两种方法,结合实例形式分析了Python爬虫模拟浏览器的两种常见操 ...

  8. python爬虫模拟浏览器的两种方法_python爬虫模拟浏览器访问-User-Agent过程解析

    这篇文章主要介绍了python爬虫模拟浏览器访问-User-Agent过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 模拟浏览器访问-Use ...

  9. Python 打造基于有道翻译的命令行翻译工具(命令行爱好者必备)

    Python 打造基于有道翻译的命令行翻译工具(命令行爱好者必备) 之前基于百度写了一篇博文 Python 打造基于百度翻译的命令行翻译工具,本来这工具用得挺好的.但是没想到,近期处于不知道啥原因,不 ...

最新文章

  1. android内置picker控件,android中控件DatePicker控件-Fun言
  2. Objective-C笔记
  3. Ext JS 3.0 RC1.1 Released发布了
  4. 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限...
  5. Gradle善良:获得更多的依赖性见解
  6. 诺基亚E63常见设置指南
  7. vue组件基础知识及组件间通讯
  8. linux系统下UTF-8转GBK编码,使用汉字字库在LCD显示汉字
  9. 简单了解芯片封装技术
  10. DirectoryEntry 对象
  11. Matlab 口罩识别
  12. MobSF分析.ipa文件,MobSF分析iOS app
  13. 随机点名器——java
  14. 【转】激励循环——加密算法如何实际修复现有激励循环
  15. MindMapper免费下载版附序列号激活儿童思维导图软件
  16. 北大资源燕南业主总群 326680907
  17. 来也科技总裁、按键精灵之父,给开发者的一封信
  18. SRAMRAMROM介绍
  19. 帝国cms 产品筛分插件,亲测有效。
  20. 【实用的开源项目】使用云服务器部署Mattermost,强大的开发人员协作平台,更是一款高大上的聊天室

热门文章

  1. 电信isag接口java_使用ag-grid进行国际化
  2. python 报 KeyError: ('coupon_type', 'occurred at index act_code')故障
  3. CentOS 6.3安装配置LAMP服务器(Linux+Apache+MySQL+PHP5)
  4. anaconda 的安装及环境配置、anaconda创建新的环境、jupyter代码高亮及自动补全、改变jupyter注释的字体及颜色
  5. 嵌入式 ssl协议详解
  6. 基于 HTML5 WebGL 的故宫人流量动态监控系统
  7. 找不到网络路径计算机共享,win10 局域网共享问题 提示0x80070035 找不到网络路径...
  8. 关于环境变量 C++ include搜索路径,lib库搜索路径
  9. 1. HTML学习笔记-2021年11月2日
  10. 加壳工具WinLicense使用教程,以v2.3.9.0为例