cookies应对python反爬虫知识点详解

 更新时间:2020年11月25日 15:20:53   作者:小妮浅浅  
在本篇文章里小编给大家整理关于cookies应对python反爬虫知识点详解,有兴趣的朋友们可以学习下。

在保持合理的数据采集上,使用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 :

先尝试了将那段js脚本保存下来,包装成一个html文件打开,发现浏览器不停的刷新,也并没起什么作用。那就分析一下js脚本,原来的代码是单行的,自己整理一下并加了一些变量名和log,大概是这么个样子: 

将第16行的变量cmd打印出来看看,发现是另一段类似的脚本:

可以看到第二段脚本已经开始设置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实现对大量表格文件数据处理的方法详解

    这篇文章主要为大家介绍了如何基于Python语言实现对大量表格文件加以数据截取、逐行求差、跨文件合并等处理,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-05-05
  • Python使用paddleOCR批量识别pdf的方法

    Python使用paddleOCR批量识别pdf的方法

    PaddleOCR可以在图像、文本、表格等多种场景下进行文字识别,本文主要介绍了Python使用paddleOCR批量识别pdf的方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Python使用Flask Migrate模块迁移数据库

    Python使用Flask Migrate模块迁移数据库

    Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作
    2022-07-07
  • python判断端口是否打开的实现代码

    python判断端口是否打开的实现代码

    python判断端口是否打开的代码,有需要的朋友可以参考下
    2013-02-02
  • python读取xml文件的实现方法

    python读取xml文件的实现方法

    本文主要介绍了使用Python的xml.etree.ElementTree模块读取XML文件并提取其中的信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • Python使用Requests请求网页方式

    Python使用Requests请求网页方式

    这篇文章主要介绍了Python使用Requests请求网页方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • PyTorch环境中CUDA版本冲突问题排查与解决方案

    PyTorch环境中CUDA版本冲突问题排查与解决方案

    在使用 PyTorch 进行深度学习开发时,CUDA 版本兼容性问题是个老生常谈的话题,本文将通过一次真实的排查过程,剖析 PyTorch 虚拟环境自带 CUDA 运行时库与系统全局 CUDA 环境冲突的场景,需要的朋友可以参考下
    2025-02-02
  • Python实现杰卡德距离以及环比算法讲解

    Python实现杰卡德距离以及环比算法讲解

    这篇文章主要为大家介绍了Python实现杰卡德距离以及环比算法的示例讲解,有需要的朋友可以借鉴参考下
    2022-02-02
  • 在python list中筛选包含字符的字段方式

    在python list中筛选包含字符的字段方式

    这篇文章主要介绍了在python list中筛选包含字符的字段方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python优化列表接口进行分页示例实现

    Python优化列表接口进行分页示例实现

    最近,在做测试开发平台的时候,需要对测试用例的列表进行后端分页,在实际去写代码和测试的过程中,发现这里面还是有些细节的,故想复盘一下
    2021-09-09

最新评论