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小技巧分享
Nov 22 Python
pymongo实现控制mongodb中数字字段做加法的方法
Mar 26 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
python和shell获取文本内容的方法
Jun 05 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
python:解析requests返回的response(json格式)说明
Apr 30 Python
Python使用Excel将数据写入多个sheet
May 16 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
php中的静态变量的基本用法
2014/03/20 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
JavaScript修改css样式style
2008/04/15 Javascript
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
JavaScript 继承详解(四)
2009/07/13 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
酒店副总岗位职责
2013/12/24 职场文书
秘书专业自荐信范文
2013/12/26 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
HAM-2000摩机图
2021/04/22 无线电
nginx搭建NFS网络文件系统
2022/04/14 Servers