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中的类与对象之描述符详解
Mar 27 Python
详解python单例模式与metaclass
Jan 15 Python
python实现rsa加密实例详解
Jul 19 Python
对Python中range()函数和list的比较
Apr 19 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
Python3安装pip工具的详细步骤
Oct 14 Python
tornado+celery的简单使用详解
Dec 21 Python
NumPy排序的实现
Jan 21 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
Python Django搭建文件下载服务器的实现
May 10 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 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
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
课程设计心得体会
2013/12/28 职场文书
如何写一份好的自荐信
2014/01/02 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
矿泉水广告词
2014/03/20 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
淘宝好评语句大全
2014/12/31 职场文书
国家助学金感谢信
2015/01/21 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python