【Python】有道翻译的爬虫实现(后篇)
前面说到,有道翻译和百度翻译不同
(百度翻译是模拟iPhone手机,可能百度翻译用Pc端也会有类似的问题,有道翻译的User—Agent是Pc端)
每一次的salt和sign都不一样,这是什么原因产生的呢?
一、每一次翻译的时候浏览器会从服务器获取这两个值,导致这两个值不一样
二、按照一定的规则在本地生成
画波浪线的是请求翻译的,其他的都是没有任何数据返回的,所以应该是第二种情况。
接下来我们就查看网页源代码,最底端。
在新建标签页中打开,然后http://tool.chinaz.com/Tools/jsformat.aspx
把代码复制进去后,点击格式化:
新建一个txt文件,找到里面有关salt的内容,我一共找了三个
t.translate = function(e, t) {T = u("#language").val();var n = b.val(),r = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10)),o = u.md5(S + n + r + D),a = n.length;if (L(), w.text(a), a > 5e3) {var l = n;n = l.substr(0, 5e3),o = u.md5(S + n + r + D);var c = l.substr(5e3);c = (c = c.trim()).substr(0, 3),u("#inputTargetError").text("鏈夐亾缈昏瘧瀛楁暟闄愬埗涓�5000瀛楋紝鈥�" + c + "鈥濆強鍏跺悗闈㈡病鏈夎缈昏瘧!").show(),w.addClass("fonts__overed")} else w.removeClass("fonts__overed"),u("#inputTargetError").hide();f.isWeb(n) ? i() : s({i: n,from: _,to: C,smartresult: "dict",client: S,salt: r,sign: o,doctype: "json",version: "2.1",keyfrom: "fanyi.web",action: e || "FY_BY_DEFAULT",typoResult: !1},t)},------------------------------------------------------------------------------------------------------------------function(e, t) {var n = e("./jquery-1.7");e("./md5");e("./utils");var r = null;t.asyRequest = function(e) {var t = e.i,i = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10)),o = n.md5("fanyideskweb" + t + i + "ebSeFb%=XZ%T[KZ)c(sy!");r && r.abort(),r = n.ajax({type: "POST",contentType: "application/x-www-form-urlencoded; charset=UTF-8",url: "/bbk/translate_m.do",data: {i: e.i,client: "fanyideskweb",salt: i,sign: o,tgt: e.tgt,from: e.from,to: e.to,doctype: "json",version: "3.0",cache: !0},dataType: "json",success: function(t) {t && 0 == t.errorCode ? e.success && e.success(t) : e.error && e.error(t)},error: function(e) {}})}
}),
---------------------------------------------------------------------------------------------------------------------
function(e, t) {var n = e("./jquery-1.7");e("./utils");e("./md5");var r = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10));t.recordUpdate = function(e) {var t = e.i,i = n.md5("fanyideskweb" + t + r + "ebSeFb%=XZ%T[KZ)c(sy!");n.ajax({type: "POST",contentType: "application/x-www-form-urlencoded; charset=UTF-8",url: "/bettertranslation",data: {i: e.i,client: "fanyideskweb",salt: r,sign: i,tgt: e.tgt,modifiedTgt: e.modifiedTgt,from: e.from,to: e.to},success: function(e) {},error: function(e) {}})},
然后你就可以发现
salt就是当时时间的时间戳再加上一个0-10的随机字符串
"fanyideskweb" + cotent(要翻译的内容) + salt + "ebSeFb%=XZ%T[KZ)c(sy!"(每个人的应该有微小的差别)
sign就是上述这四个相加的MD5值
然后就是在headers的地方带上User-Agent,Referer,Cookie,就可以了(我一开始没带上Cookie一直报错)
下面是代码:
import requests
import json
import urllib.request
import gzip
import urllib.parse
import json
import time
import random
import hashliburl ="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"content = input("请输入要翻译的内容:")S = "fanyideskweb"n = contentr = str(int(time.time()*1000) + random.randint(1,10))D = "ebSeFb%=XZ%T[KZ)c(sy!"sign = hashlib.md5(( S + n + r + D ).encode('utf-8')).hexdigest()data = {"i": content,
"from": "AUTO",
"to": "AUTO",
"smartresult":"dict" ,
"client":"fanyideskweb" ,
"salt": r,
"sign":sign ,
"doctype":"json" ,
"version":"2.1" ,
"keyfrom":"fanyi.web" ,
"action":"FY_BY_CLICKBUTTION" ,
"typoResult": "false"}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36",
"Referer": "http://fanyi.youdao.com/","Cookie": "OUTFOX_SEARCH_USER_ID=-1038070705@10.168.8.63; JSESSIONID=aaaP2Qy4ztAfyfZRXzktw; OUTFOX_SEARCH_USER_ID_NCOO=570232601.9713346; fanyi-ad-id=47865; fanyi-ad-closed=1; ___rl__test__cookies=1532406668184"}response = requests.post(url,headers = headers,data = data)html_str = response.content.decode()dict_str = json.loads(html_str)print(dict_str['translateResult'][0][0]['tgt'])
可以发现它的“from”和“to”都是AUTO,所以可以自动识别是中文到英文还是英文到中文
参考页面:https://blog.csdn.net/nunchakushuang/article/details/75294947
https://blog.csdn.net/shadkit/article/details/79174948
相关文章:

Redis客户端JetCache的单机版和集群版的配置
jetcache基础应用参考这个:阿里巴巴开源的缓存框架JetCache创建缓存 1.JetCache的jedis配置 https://github.com/alibaba/jetcache/wiki/Config_CN jedis配置:apollo版 jetcache.remote.default.type = redis jetcache.remote.default.keyConvertor = fastjson jetcache.r…

5 分钟一次理解 Spring IOC !
今天我们分析一下 spring 的 IOC,梳理一下 IOC 和 DI 的概念与原理。在网上看到开涛有篇文章写的不错,提取其中一部分精华内容并做一些解读。 1.1.IOC是什么? Ioc—Inversion of Control,即“控制反转”,不是什么技术&…

工作两年的编程感想
2019独角兽企业重金招聘Python工程师标准>>> 工作已有两年了,两年不长也不短了,程序员的辛酸苦乐也都体验了一些,故写此博客既为留念,也为接下来的两年留下一个参考点。 首先需要声明的是,本人的工作是Java…

微服务重构心得
现在都在做微服务,看起来就是做服务拆分比较简单,但是实际上真正重构起来又遇到许许多多的问题。 微服务重构常见问题 1.领域驱动模型的困扰 比如听到很多理论比如领域驱动,那么到底需要不需要学习或者使用领域驱动呢? 2.系统的复杂性 重构的时候发现系统之间调用非常…

【Python】百度翻译的爬虫实现(后篇)
这个程序可以实现中英文的自动识别然后进行翻译 看着程序就很好理解。 import requestsimport jsonclass Translation():翻译def __init__(self,content):self.content contentself.url "http://fanyi.baidu.com/basetrans"self.headers {"User-Agent"…

美团即时物流的分布式系统架构设计
背景 美团外卖已经发展了五年,即时物流探索也经历了3年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验。最主要的收获包括两点: 即时物流业务对故障和高延迟的容忍度极低,在业务复…

Intellij IDEA单元测试提示Test events were not received
Intellij IDEA单元测试时提示Test events were not received 也就是可以运行test方法,也提示成功,但是看不到具体的执行结果。 Intellij IDEA从2019.2.1版本开始,会将Gradle管理的项目的测试代码,默认使用Gradle来运行࿰…

Linux下task_struct详解
背景:为了管理进程,操作系统必须对每个进程所做的事情进行清楚地描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块。在linux系统中,这就是task_stru…

【Python】数据提取xpath和lxml模块(豆瓣电影排行榜的爬虫)
xpath xpath:一门从html中提取数据的语言 xpath语法 1、选择节点(标签) /html/head/meta :能够选中html下的head下的所有的meta标签 2、// :能够从任意节点开始选择 //li:当前页面上所有的li标签 //html/head/link &a…

qt5.6.3下使用firebird
有人把firebird比作数据库界的瑞士军刀,想学习一下其在QT5.6中的使用,于是便开始了一场自己挖坑,自己埋的旅程。 环境说明:win7 64位QT5.6 mingw4.9 32位(好像官网上也没有64位,当然mingw也是32位的&#x…

【Python】数据提取xpath和lxml模块(糗事百科的爬虫)
程序中用到的一些零碎知识点: 一、列表推导式:帮助我们快速生成一堆数据的列表 1、format:字符串格式化的一种方式 >>> ["10月{}日".format(i) for i in range(1,10)] [10月1日, 10月2日, 10月3日, 10月4日, 10月5日, 1…

Linux Performance
性能专家Brendan Gregg的网站。 Linux性能 该页面链接到我创建的各种Linux性能材料,包括右侧的工具图。它们使用大字体来适合滑盖。您也可以将它们打印出来用于办公室墙壁。它们显示:Linux可观察性工具, Linux静态性能分析工具,…

07.LoT.UI 前后台通用框架分解系列之——强大的文本编辑器
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/dunitian/LoTCodeBase/tree/master/LoTUI 先看在LoT.UI里面的应用效果图: 完整Demo:(https://gith…

workerman结合laravel开发在线聊天应用的示例代码
项目背景: 最近由于公司的业务需求,需要用到聊天功能。而且有比较多的个性化需求需要定制。之前使用别人的聊天组件是基于微擎的。如果要移植到普通的H5在逻辑修改还有定制上存在比较多的困难。为此只能克服困难,自己搭建一个吧 什么是Worker…

复杂系统设计 企业开发的困境
复杂系统设计源自我多年对企业复杂系统的设计的一些思考,类似日记吧,不断完善。 为什么从一个大公司的引入架构师甚至架构师组还是很难架构企业开发中的很多问题? 这些问题表现出架构上的复杂性,和业务上的复杂性。 有时候架构…

数据库服务器跟网站服务器间传输慢的问题
数据库服务器和网站服务器是分开的,现在从网站服务器这边查数据比较慢,什么原因??? 一、首先确定服务器之间的网络有没有问题 可以简单的在网站服务器上ping数据库服务器(反过来也可以)…
【Python】百度贴吧图片的爬虫实现(努力努力再努力)
学会爬取图片以后,第一时间去了张艺兴吧,哈哈哈哈哈哈 一定要放上一张爬取的照片,哼唧 import reimport requestsimport urllibclass Baidutieba():def __init__(self):self.url "http://tieba.baidu.com/p/4876047826?pn{}"#u…

cin、cout的重载
一、cin重载 1.cin为ostream类的成员 2.cin重载应为全局函数(毕竟ostream是别人写好的) 3.代码 a.核心代码 ostream & operator<<(ostream &os,const A &a)//const A &a是为了避免复制函数的调用 ;ostream &o 相当…

第二次冲刺第十天
第二次冲刺今天就结束了,这十天来学会了不少的东西。 简单说一下昨天做的:整合各个部件的功能。 今天:小组进行总结,加强性能。 这十天来遇到的问题: 一,对于网络云端,之前都是其他小组成员在使…

说透泛型类和泛型方法以及Class<T>和Class<?>的差异
泛型类和泛型方法看起来似乎可以实现类似的功能,但是很多人并未真正掌握泛型方法,网上很多文章说了很多还是似是而非,特别是初学者还是搞不明白。 一.关于泛型方法 1.泛型方法可以独立于泛型类 2.泛型方法等效于泛型类里泛型参数方法&…
win10 +python 3.6.4安装scrapy
第一步: 首先,我们先在电脑上安装好python3.6并且配置好环境变量,以可以直接在命令行界面输入python命令可以出现如图的界面为主。 第二步: 升级pip ,在cmd窗口中会有提示,没有提示的话就已经是最新版本了…

7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用。 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的脉络: 设计与模式5 大设计原则 7 种常见的设计…

从难免的线上bug说起代码的思考
经常是某司线上又出bug了,然后是给公司造成多少损失,追根究底总是可以找到一些原因,诸如:写代码逻辑考虑不全面,或者代码有硬伤,也有测试不充分,甚至不测试都有,也有是运维的问题等等…

PHP-Fpm应用池配置
//php.net php-fpm配置简介http://php.net/manual/zh/install.fpm.configuration.php//Global Options//pool defined[www]user nobodygroup nobodylisten 127.0.0.1:9000pm dynamicpm.max_children 5pm.start_servers 2pm.min_spare_servers 1pm.max_spare_servers 3s…
【Python】百度首页GIF动画的爬虫
今天百度首页的GIF动画很可爱,就想着用才学的爬虫爬取一下,虽然直接点击“图片另存为”就可以了 import requestsimport urllibclass Gif():def __init__(self):self.url "https://www.baidu.com/"self.headers {"User-Agent": …

CSS题目系列(3)- 实现文字切割效果
描述 有一天逛 Codepen 的时候,看到这么一个效果:将文字上下切开两半。 点进去看了一下代码,发现原理很简单,大概就是通过伪类使用attr()函数获取内容,然后进行定位。 你可以点下方链接查看效果: gd4ark.gi…

Java开发字符串JSON处理
需求很简单就是数据库存json。 数据库字段 varchar 入参request 定义 List<String> 如果不定义这个 而是定义String那么需要加"/转义比较难看 这样就只要入参传这个就行了: "xxxIds": ["33","44"], 数据库也是…

1.JSONObject与JSONArray的使用
参考文献: http://blog.csdn.net/huangwuyi/article/details/5412500 1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jarcommons-beanutils.jarcommons-collections.jarcommons-logging.ja…
【Python】Scrapy爬虫实战(豆瓣电影 Top 250)
今天一天都在弄Scrapy,虽然爬虫起来真的很快,很有效率,但是......捣鼓了一天 豆瓣电影 Top 250:https://movie.douban.com/top250 安装好的scrapy 在你想要的文件夹的目录下输入命令: scrapy startproject douban_m…

vmrun 批量创建vmware虚拟机
1 准备模板机 具体步骤如下: 1. 下载镜像安装系统 https://mirrors.aliyun.com/centos/7.5.1804/isos/x86_64/2. 安装完成配置好IP ,关闭SELINUX ,关闭firewalld ,修改网卡名 3. 预设置好修改其他机器IP脚本 1.1 安装系统 略 1.2 模板机的设置 修改网卡名…