cookies应对python反爬虫知识点详解


Posted in Python onNovember 25, 2020

在保持合理的数据采集上,使用python爬虫也并不是一件坏事情,因为在信息的交流上加快了流通的频率。今天小编为大家带来了一个稍微复杂一点的应对反爬虫的方法,那就是我们自己构造cookies。在开始正式的构造之前,我们先进行简单的分析如果不构造cookies爬虫时会出现的一些情况,相信这样更能体会出cookies的作用。

网站需要cookies才能正常返回,但是该网站的cookies过期很快,我总不能用浏览器开发者工具获取cookies,然后让程序跑一会儿,每隔几分钟再手动获取cookies,再让程序继续跑吧。如果反复这样工作,那么写爬虫也就没意义了。便开始对cookies进行分析。

从浏览器的开发者工具获取到的cookies大约有10个字段,经过反复测试,能让网站正常返回的只需要两个字段,分别为__jsluid_h=011a522dbxxxxxxxxc1ce59d336e5e60和__jsl_clearance=1581880640.794|0|trTB4c6b%2BZpvxxxxxxxx8YqCOOo%3D (中间打码处理)。

 经过测试,如果请求的时候不自己构造cookies,默认会返回__jsluid_h :

cookies应对python反爬虫知识点详解

先尝试了将那段js脚本保存下来,包装成一个html文件打开,发现浏览器不停的刷新,也并没起什么作用。那就分析一下js脚本,原来的代码是单行的,自己整理一下并加了一些变量名和log,大概是这么个样子: 

cookies应对python反爬虫知识点详解

将第16行的变量cmd打印出来看看,发现是另一段类似的脚本:

cookies应对python反爬虫知识点详解

可以看到第二段脚本已经开始设置cookies的__jsl_clearence 字段了。这些显然就是混淆后的js脚本,但是分析到这里也就大概弄明白了从发送请求到网站返回是怎么回事。之所以在本地跑这段代码会不断刷新,是因为第二行的setTimeout会让其在1.5秒后重新请求,但是我们本地没有服务处理请求让其停止,所以会不断的刷新。

而第一段脚本当中,变量y是完整的js代码 ,代码中的变量名和关键字被进行编码了,变量x存储的是用来替换的变量名和关键字,后面是解码函数。所以现在的问题变成了获取第一段脚本当中的cmd代码,执行后再获取第二段代码的document.cookie的内容即可。

可是对于python和js的交互我完全没接触过,尝试了PyExecJS和Js2Py,都没办法正常执行第一段脚本。无奈之下,我用python复现了第一段脚本,然后用Js2Py获取了cookie。在请求一次过后,构造cookies,再请求一次,就可以了:

def test():
  url = REQUEST_URL
  # url = 'https://www.baidu.com'
  request_header = get_header()
  html = requests.get(url, headers=request_header)
  print(html)
  jscode = html.text
  # print(jscode)
  # tryjs.get_cookies()为复现的js代码,以及用Js2Py获取cookies的代码
  request_cookies = try_js.get_cookies(jscode)
  request_cookies += ';__jsluid_h=' + html.cookies['__jsluid_h']
  request_header['Cookie'] = request_cookies
  print(request_header)
  html = requests.get(url, headers=request_header, timeout=5)
  print('new connection')
  print(html)
  print(html.text)

在经历重重的分析试验后,我们终于得出以上的代码成功实现了构造cookies。相信经过本篇的学习,小伙伴们又多了一种解决爬虫阻拦获取数据的cookies办法了,赶快行动起来吧。

到此这篇关于cookies应对python反爬虫知识点详解的文章就介绍到这了,更多相关如何构造cookies应对python反爬虫内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中类的定义、继承及使用对象实例详解
Apr 30 Python
Python语言实现将图片转化为html页面
Dec 06 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
python的Jenkins接口调用方式
May 12 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
Python基于unittest实现测试用例执行
Nov 25 #Python
python反爬虫方法的优缺点分析
Nov 25 #Python
Pytest测试框架基本使用方法详解
Nov 25 #Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 #Python
Python json解析库jsonpath原理及使用示例
Nov 25 #Python
搭建pypi私有仓库实现过程详解
Nov 25 #Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 #Python
You might like
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
Apache2 httpd.conf 中文版
2006/11/17 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
jQuery事件详解
2017/02/23 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
Python函数嵌套实例
2014/09/23 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
python opencv摄像头的简单应用
2019/06/06 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
电气自动化专业职业规划范文
2014/02/16 职场文书
幼儿教师国培感言
2014/02/19 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
奖金申请报告模板
2015/05/15 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis