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的Flask框架中实现全文搜索功能
Apr 20 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
python3将视频流保存为本地视频文件
Jun 20 Python
python+Splinter实现12306抢票功能
Sep 25 Python
python3.6+selenium实现操作Frame中的页面元素
Jul 16 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
python实现logistic分类算法代码
Feb 28 Python
记一次django内存异常排查及解决方法
Aug 07 Python
什么是Python装饰器?如何定义和使用?
Apr 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
PHP自动更新新闻DIY
2006/10/09 PHP
分享PHP入门的学习方法
2007/01/02 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
Python requests库用法实例详解
2018/08/14 Python
django项目搭建与Session使用详解
2018/10/10 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
会计专业毕业生求职信分享
2014/01/03 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
卖车协议书范文
2016/03/23 职场文书
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android