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中使用pyhook实现键盘监控的例子
Jul 18 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
python 2.7.14安装图文教程
Apr 08 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
Django 实现购物车功能的示例代码
Oct 08 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
Python实现Restful API的例子
Aug 31 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
在Python中实现字典反转案例
Dec 05 Python
python运行脚本文件的三种方法实例
Jun 25 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
编译问题
2006/10/09 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
jQuery中prev()方法用法实例
2015/01/08 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
javascript实现日历效果
2019/06/17 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
使用Python中的tkinter模块作图的方法
2017/02/07 Python
python验证码识别的示例代码
2017/09/21 Python
python实现内存监控系统
2021/03/07 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
毕业生的求职信范文分享
2013/12/04 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
股权转让协议书范本
2014/04/12 职场文书
我的画教学反思
2014/04/28 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
学生实习证明范文
2014/09/28 职场文书
入党群众意见范文
2015/06/02 职场文书
Python获取字典中某个key的value
2022/04/13 Python