1、SSL

-SSL证书就是指遵守SSL安全套阶层协议的服务器数字证书(SercureSocketLayer)

-美国王景公司开发

-CA(CertifacateAuthority)是数字证书认证中心,是发放、管理、废除数字证书的收信人的第三方机构

-遇到不信任的SSL证书,需要单独处理

解决以下错误:

错误1:AttributeError: 'module' object has no attribute '_create_unverified_context',

错误2:URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)>

from urllib import request
#本来是要把不安全的证书改为SSL安全的,但是我用的360浏览器打开是安全的,
#假装当不安全实例改改,遇到不安全的可以用#导入python ssl处理模块
import ssl#利用非认证上下文环境替换认证的上下文环境,添加此句可忽略不安全证书信息
ssl._create_default_https_context = ssl._create_unverified_context()url = "https://www.12306.cn/mormhweb"
rsp = request.urlopen(url)
html = rsp.read().decode()
print(html)

2、js加密

-有的反爬虫策略采用js对需要传输的数据进行加密处理(通常是取md5值)

-经过加密、传输的就是密文,但是

-加密函数或者过程一定是在浏览器完成,也就是会把代码(js代码)暴露给使用者

-通过阅读加密算法,就可以模拟出加密过程,从而达到破解

3、以破解有道词典加密算法为例:

(1)有道词典在线翻译页面:http://fanyi.youdao.com/?keyfrom=fanyi.logo

(2)例如查询girl,打开审查元素(一般F12键),查看network->all,找到对应页面,点击headers查看有关信息,动态刷新,编写文件如下:

'''
破解有道词典 v1
'''
from urllib import request,parse
def youdao(key):dc = input("请输入所要翻译的语句:")url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"data = {'i':dc,'from':'AUTO','to':'AUTO','smartresult':'dict','client':'fanyideskweb','salt':'15548857218744','sign':"d7a8cf6acc9f4c2f0024b95dd55ae319",'ts':'1554885721874','bv':'bbb3ed55971873051bc2ff740579bb49','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTlME'}data = parse.urlencode(data).encode()headers = {'Accept':'application/json, text/javascript, */*; q=0.01',#'Accept-Encoding':'gzip, deflate','Accept-Language':'zh-CN,zh;q=0.9','Connection':'keep-alive','Content-Length':'237','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','Cookie':'OUTFOX_SEARCH_USER_ID=1971107538@10.169.0.82; JSESSIONID=aaa9f1yLaywqDfIVlxgOw; OUTFOX_SEARCH_USER_ID_NCOO=228140715.63433138; ___rl__test__cookies=1554885721865','Host':'fanyi.youdao.com','Origin':'http://fanyi.youdao.com','Referer':'http://fanyi.youdao.com/?keyfrom=fanyi.logo','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','X-Requested-with':"XMLHttpRequest"}req = request.Request(url=url,data=data,headers=headers)rsp = request.urlopen(req)html = rsp.read().decode('utf-8')print(html)if __name__ == '__main__':youdao("girl")

报错:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

解决:导入gzip解码或者注掉不用gzip

此时查询girl可以,查询其他不行,我们注意到data里面有属性“salt”和“sign”,现在研究一下是否和这个有关。

在network->all下,找到fanyi.min.js文件,查看Response,将response里面的文件复制保存下来,我们看到这里是很长的无格式的一段代码,推荐一个工具http://tool.oschina.net/codeformat/js,在这里可以进行代码格式化,这里就不贴图了,保存到文本文件就行。

在文件里查找salt和sign,这个文件里有很多个,但是内容功能都大差不差,举例如下:可以看到他们的计算公式

接下来我们开始用代码模拟他们的方法,进行编写。

在审查元素中console(左图)输入如下,右图为在pycharm终端输入,此时我们得到的时间位数和文件中不一样,差三位具体分析见最终代码,但是可以进行编写转换:

    

在审查元素console输入如下,我们可以看到这个就是生成随机数。

终极代码:

'''v2 处理js加密代码
'''
'''
通过查找,能找到js代码中操作代码
1、这个是计算salt的公式:
r = "" + (new Date).getTime(),
i = r + parseInt(10 * Math.random(), 10);2、sign: n.md5("fanyideskweb" + e + i + "@6f#X3=cCuncYssPsuRUE")
md5一共需要四个参数,第一个和第四个都是固定值的字符串,
第三个是所谓的salt,第二个参数就是输入的要查找的单词
'''def getSalt():'''salt公式是:r = "" + (new Date).getTime(),i = r + parseInt(10 * Math.random(), 10);把它翻译成python代码:return:'''import time,randomsalt = int(time.time()*1000) + random.randint(0,10)return salt#v代表得到的每个md5值
def getMD5(v):import hashlibmd5 = hashlib.md5()#md5.update(v,encoding='utf-8')   TypeError: update() takes no keyword arguments#update需要一个bytes格式的参数md5.update(v.encode('utf-8'))sign = md5.hexdigest()return signdef getSign(key,salt):sign = "fanyideskweb" + key + str(salt)+ "@6f#X3=cCuncYssPsuRUE"sign = getMD5(sign)return signfrom urllib import request,parsedef youdao(key):url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"#在之前先获取salt,保证之后的每个函数的salt都是同一个salt = getSalt()data = {'i':key,'from':'AUTO','to':'AUTO','smartresult':'dict','client':'fanyideskweb','salt':str(salt),'sign':getSign(key,salt),'ts':'1554885721874','bv':'bbb3ed55971873051bc2ff740579bb49','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTlME'}#print(data)data = parse.urlencode(data).encode()headers = {'Accept':'application/json, text/javascript, */*; q=0.01',#'Accept-Encoding':'gzip, deflate','Accept-Language':'zh-CN,zh;q=0.9','Connection':'keep-alive','Content-Length':len(data),'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','Cookie':'OUTFOX_SEARCH_USER_ID=1971107538@10.169.0.82; JSESSIONID=aaa9f1yLaywqDfIVlxgOw; OUTFOX_SEARCH_USER_ID_NCOO=228140715.63433138; ___rl__test__cookies=1554885721865','Host':'fanyi.youdao.com','Origin':'http://fanyi.youdao.com','Referer':'http://fanyi.youdao.com/?keyfrom=fanyi.logo','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','X-Requested-with':"XMLHttpRequest"}req = request.Request(url=url,data=data,headers=headers)rsp = request.urlopen(req)html = rsp.read().decode('utf-8')print(html)if __name__ == '__main__':a = input("请输入要翻译的语句:")youdao(a)

这样我们就可以随意翻译语句了~啊hahaha~

python爬虫之SSL、加密、破解有道词典加密算法并编写有道词典实时翻译相关推荐

  1. Python爬虫之js加密破解,抓取网易云音乐评论生成词云

    js破解历程 前言 技能点 界面概况 静态网页动态网页 页面解析 step1: 找参数step2:分析js函数step3:分析参数step4: 校验step5:转为python代码 编写爬虫 很多人学 ...

  2. python爬虫--URL部分加密破解

    URL部分加密破解 背景说明 示例及分析 解决方案 注意 背景说明 最近在爬取网站数据时,碰到提取到的a标签的url与真实的url地址不同,将a标签中的部分内容进行了加密处理,再拼接处理,拿到真实的u ...

  3. python爬虫JS逆向加密破解之百度翻译

    最近在从基础学习JS逆向,来分享一下百度翻译JS逆向的整个过程,也有助于自己加深记忆. JS逆向可以说是爬虫工程师必备的知识点了,但是如果对前端知识不够了解还是学起来很有难度的. 想学习的话可以在B站 ...

  4. Python爬虫-2019年我破解了商标网数据爬虫-破解反爬技术那些事情

    Python爬虫-2019年我破解了商标网!数据爬虫-破解反爬技术那些事情 由于自己一直做Python大数据挖掘技术开发,最近有不少的朋友要做大数据分析,找我帮忙商标网的数据挖掘,实现爬取中国商标网全 ...

  5. 爬虫之js加密破解抓取网易云音乐评论生成词云

    js破解历程 前言 技能点 界面概况 静态网页 动态网页 页面解析 step1: 找参数 step2:分析js函数 step3:分析参数 step4: 校验 step5:转为python代码 编写爬虫 ...

  6. python爬虫遇到crypto加密

    @TOC 爬虫遇到crypto加密 这几天疯狂加班么的时间写blog,今天处理的快,写一写之前无意见到的很厉害的网站,看了看还是网易易盾写的呢好像?全国建筑市场监管公共服务平台里的企业数据(话说这些都 ...

  7. 当Python爬虫遇到JS加密

    我们在做python爬虫的时候经常会遇到许多的反爬措施,js加密就是其中一种. 破解js加密的方法也有很多种: 1.直接驱动浏览器抓取数据,无视js加密. 2.找到本地加密的js代码,使用python ...

  8. python爬虫遇到js加密,python爬虫遇到JS加密,pyv8运行js,详细解密过程

    首先说一下什么是加密,所谓js加密大多出现在表单提交过程中,下面我将以中国电信为例,详细讲解如何利用pyv8来加密登录的密码.要说明的是pyv8目前仅仅支持python2,用的下伙伴要注意自己的pyt ...

  9. Python爬虫:js加密实例-有道翻译

    此项目,参考别人的教程,自己摸索了一下,将结果展示出来,以供后人参考 实现功能: 通过requests请求有道翻译的接口,返回翻译结果,并封装成函数使用 有道翻译地址:http://fanyi.you ...

最新文章

  1. laravel ajax返回json,Laravel validate error处理,ajax,json示例
  2. 如何低价坐飞机头等舱
  3. Windows环境下在IDEA编辑器中spark开发安装步骤
  4. 苹果汽车高管几乎流失殆尽,一年损失7人,新年又有人被Meta挖走
  5. c语言首尾指针相同 则,6.C语言指针练习题.doc
  6. 【MySQl】MyISAM和InnoDB索引对比
  7. Normal Vector Using WorldInverseTranspose
  8. var result = ![] == []; console.log(result); // 结果是?为什么?
  9. Linux学习笔记010---CentOS7下安装FTP服务
  10. oracle删除数据库中的所有数据的拼接语句
  11. 罗技G500游戏鼠标
  12. Twaver-HTML5基础学习(11)形状节点(ShapeNode)
  13. 弘辽科技:DSR的含义是?怎么提升DSR评分?
  14. 苹果手机显示“更新验证失败 因为您不再连接到互联网”怎么办?
  15. 优化网站加快浏览器访问打开速度
  16. python基础训练—数字
  17. NS 宣布推出两款 Boomer D 类音频子系统
  18. Spectral matting
  19. 长文回顾NIPS大会最精彩一日:AlphaZero遭受质疑;NIPS史上第一场正式辩论和LeCun的激情抗辩/据理力争;元学习深度强化学习亮点复盘。
  20. Auto.js学习笔记——快速入门:软件安装

热门文章

  1. 一文详解ARP报文格式及工作原理
  2. vue3之watch和watchEffect实战总结
  3. 那场泡沫破碎的一刻,已宣判了一生。
  4. 直线/曲线检测:Randon变换与Hough变换
  5. vue3+vite+TS配置项目别名“@/“
  6. python 登录新浪微博_Python 模拟登录新浪微博
  7. idea mybatis 常用插件
  8. 百闻牌服务器维护,阴阳师百闻牌一直进不去 无法进入游戏解决方法
  9. 用计算机弄音乐,视频剪辑添加音乐,如何在电脑上給视频添加音乐,什么添加音乐软件比较好用...
  10. 在树莓派上做一个远程控制的小车(基于Python)