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中列表和元组的相关语句和方法讲解
Aug 20 Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
解决Python plt.savefig 保存图片时一片空白的问题
Jan 10 Python
Python列表对象实现原理详解
Jul 01 Python
Python3远程监控程序的实现方法
Jul 15 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 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
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
js表单验证实例讲解
2016/03/31 Javascript
jQuery 全选 全部选 反选 实现代码
2016/08/17 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
tornado框架blog模块分析与使用
2013/11/21 Python
Python语言描述随机梯度下降法
2018/01/04 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
关于numpy数组轴的使用详解
2019/12/05 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
银行实习的自我鉴定
2013/12/10 职场文书
材料员岗位职责
2014/03/13 职场文书
动物科学专业求职信
2014/07/27 职场文书
公司年会开场白
2015/06/01 职场文书
导游词之唐山景点
2019/12/18 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技