Python爬虫—破解JS加密的Cookie

前言

在进行网站数据爬取时,很多网站会使用JS加密来保护Cookie的安全性,而为了防止被网站反爬虫机制识别出来,我们通常需要使用代理IP来隐藏我们的真实IP地址。

 

本篇文章将介绍如何结合代理IP破解JS加密的Cookie,主要包括以下几个方面:

  • 什么是Cookie
  • 什么是JS加密的Cookie
  • 什么是代理IP
  • 破解JS加密的Cookie的方法及实现
  • 如何使用代理IP进行网站数据爬取

首先,我们来了解一下什么是Cookie。

1. 什么是Cookie

Cookie是服务器向客户端发送的一小段数据,客户端将其存储在本地,下次请求时会将这个数据发送给服务器,用于识别用户身份、保存用户设置等。

我们可以通过浏览器的开发者工具查看网站的Cookie信息。

在Chrome浏览器中,可以通过F12进入开发者工具,在Application选项卡下的Cookies中查看网站的Cookie信息。

2. 什么是JS加密的Cookie

为了增强Cookie的安全性,很多网站会使用JS加密来保护Cookie。JS加密的原理是在服务器端生成一个密钥,并将其传递给客户端,客户端将原始Cookie值使用密钥进行加密后发送给服务器,服务器接收到加密的Cookie值后使用密钥进行解密。

这样,即使Cookie被截获,也无法被恶意用户轻易地解密。

下面是一个使用JS加密的Cookie的例子:

function encryptCookie(value, secretKey) {return CryptoJS.AES.encrypt(value, secretKey).toString();
}
var secretKey = 'a2V5c29uYWx1ZQ==';
var value = 'username=JohnDoe';
document.cookie = 'auth=' + encryptCookie(value, secretKey);

在上面的代码中,encryptCookie函数使用CryptoJS库对原始Cookie值进行AES加密,而secretKey是在服务器端生成的密钥。

3. 什么是代理IP

代理IP是一个位于我们计算机和互联网之间的中间人,我们通过代理服务器发送请求,代理服务器再将请求发送给目标服务器,从而隐藏我们的真实IP地址和位置。

使用代理IP可以有效地防止网站反爬虫机制对我们进行识别和封禁,从而提高我们的爬取成功率。

4. 破解JS加密的Cookie的方法及实现

破解JS加密的Cookie的方法有很多种,这里我们介绍一种比较简单的方法。

首先,我们需要找到网站使用的JS加密算法及密钥。我们可以通过查看网站源码或者使用浏览器的开发者工具来获取这些信息。

下面是一个使用CryptoJS库进行AES加密的例子:

function encrypt(value, key) {return CryptoJS.AES.encrypt(value, key).toString();
}
var key = 'a2V5c29uYWx1ZQ==';
var value = 'username=JohnDoe';
document.cookie = 'auth=' + encrypt(value, key);

在上面的代码中,key就是服务器端生成的密钥,我们可以将其复制下来。

接着,我们需要写一个脚本来破解加密的Cookie。具体实现如下:

import requests
import re
import base64
from Crypto.Cipher import AES# 构造请求头和代理IP
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {'http': 'http://username:password@ip:port','https': 'http://username:password@ip:port'}# 发送请求
url = 'http://example.com'
response = requests.get(url, headers=headers, proxies=proxies)# 获取密钥和加密后的Cookie值
pattern = re.compile('var key = \'(.*?)\';.*?document.cookie = \'auth=(.*?)\';', re.S)
result = re.search(pattern, response.text)
key = base64.b64decode(result.group(1))
cipher_text = base64.b64decode(result.group(2))# 解密Cookie值
cipher = AES.new(key, AES.MODE_ECB)
plain_text = cipher.decrypt(cipher_text).decode('utf-8').rstrip('\0')# 输出解密后的Cookie值
print(plain_text)

在上面的代码中,我们首先构造了请求头和代理IP,然后发送一个GET请求获取网站源码,使用正则表达式获取密钥和加密后的Cookie值。接着,我们使用base64库对密钥和加密后的Cookie值进行解码,再使用Crypto库的AES模块进行解密。

最后,我们将解密后的Cookie值输出即可。

需要注意的是,由于JS加密的Cookie的安全性比较高,因此破解的成功率较低,需要根据具体情况进行调整。同时,破解JS加密的Cookie也会涉及到一些法律问题,我们需要在遵守法律的前提下进行破解。

5. 如何使用代理IP进行网站数据爬取

使用代理IP可以有效地防止网站反爬虫机制对我们进行识别和封禁,但同时也会带来一些问题,比如代理IP的稳定性和质量等。

在使用代理IP进行网站数据爬取时,我们需要注意以下几点:

  1. 选择稳定的代理IP供应商,确保代理IP的质量和稳定性。
  2. 对代理IP进行定期检测,以确保代理IP的可用性。
  3. 避免频繁地使用同一个代理IP,以免被目标网站识别出来。
  4. 如需使用多个代理IP,可以使用代理IP池来管理代理IP,定时删除不可用的代理IP并添加新的代理IP。

下面是一个使用代理IP进行网站数据爬取的例子:

import requests# 构造请求头和代理IP
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {'http': 'http://username:password@ip:port','https': 'http://username:password@ip:port'}# 发送请求
url = 'http://example.com'
response = requests.get(url, headers=headers, proxies=proxies)# 解析返回的数据
data = response.text

在上面的代码中,我们首先构造了请求头和代理IP,然后发送一个GET请求获取网站数据。需要注意的是,调用requests库时需要指定proxies参数,将代理IP加入到请求中。

最后,我们可以解析返回的数据并做相应的处理。

总结

本篇文章介绍了如何结合代理IP破解JS加密的Cookie和如何使用代理IP进行网站数据爬取,希望对大家有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/74534.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDS中间件设计

OpenDDS、FastDDS数据分发服务中间件设计 软件架构 应用层DDS层RTPS层传输层 软件层次 FastDDS整体架构如下,这里可以看到DDS和RTPS的关系。另外缺少一部分IDL(统一描述语言),其应该是Pub、Sub的反序列化、序列化工具。 在RT…

RabbitMQ 备份交换机和死信交换机

为处理生产者生产者将消息推送到交换机中,交换机按照消息中的路由键即自身策略无法将消息投递到指定队列中造成消息丢失的问题,可以使用备份交换机。 为处理在消息队列中到达TTL的过期消息,可采用死信交换机进行消息转存。 通过上述描述可知&…

vue 图片回显标签

第一种 <el-form-item label"打款银行回单"><image-preview :src"form.bankreceiptUrl" :width"120" :height"120"/></el-form-item>// 值为 https://t11.baidu.com/it/app106&fJPEG&fm30&fmtauto&…

【OJ比赛日历】快周末了,不来一场比赛吗? #08.05-08.11 #15场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-08-05&#xff08;周六&#xff09; #7场比赛2023-08-06…

电商系统架构设计系列(七):如何构建一个电商的商品搜索系统?

上篇文章中&#xff0c;我给你留了一个思考题&#xff1a;如何构建一个商品搜索系统&#xff1f; 今天这篇文章&#xff0c;我们来说一下电商的商品搜索系统。 引言 搜索这个特性可以说是无处不在&#xff0c;现在很少有网站或者系统不提供搜索功能了&#xff0c;所以&#xf…

Django的生命周期流程图(补充)、路由层urls.py文件、无名分组和有名分组、反向解析(无名反向解析、有名反向解析)、路由分发、伪静态

一、orm的增删改查方法&#xff08;补充&#xff09; 1. 查询resmodels.表名(类名).objects.all()[0]resmodels.表名(类名).objects.filter(usernameusername, passwordpassword).all()res models.表名(类名).objects.first() # 判断&#xff0c;判断数据是否有# res如果查询…

三、基本流程控制结构

3.1结构化程序设计 基本控制结构&#xff1a; 顺序结构选择结构循环结构 C语句&#xff1a; 说明语句控制语句函数调用语句表达式语句空语句复合语句 3.2选择结构语句 if语句&#xff1a; &#xff08;1&#xff09;单选条件语句 if(表达式) 语句 if(x>y) cout<&l…

DASCTF 2023 0X401七月暑期挑战赛web复现

目录 <1> Web (1) EzFlask(python原型链污染&flask-pin) (2) MyPicDisk(xpath注入&文件名注入) (3) ez_cms(pearcmd文件包含) (4) ez_py(django框架 session处pickle反序列化) <1> Web (1) EzFlask(python原型链污染&flask-pin) 进入题目 得到源…

SpringBoot统一功能处理

我们要实现以下3个目标&#xff1a; 统一用户登录权限统一数据格式返回统一异常处理 1.用户的登录权限校验 1.1Spring AOP用户统一登录验证问题 Aspect Component public class UserAspect {// 定义切点controller包下、子孙包下所有类的所有方法Pointcut("execution(…

使用多数据源dynamic-datasource-spring-boot-starter遇到的问题记录

记录使用多数据源dynamic-datasource-spring-boot-starter遇到的问题&#xff1a; 1、工程启动失败 缺少clickhouse连接驱动&#xff0c;引入对应的maven依赖 <!--ck连接驱动--><dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>…

webshell详解

Webshell详解 一、 Webshell 介绍二 、 基础常见webshell案例 一、 Webshell 介绍 概念 webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境&#xff0c;也可以将其称做为一种网页后门。黑客在入侵了一个网站后&#xff0c;通常会将asp或php后门文件与…

国标GB28181安防视频平台EasyGBS大批量通道接入后,创建角色接口未响应的排查

国标GB28181协议视频平台EasyGBS是基于国标GB28181协议的视频云服务平台&#xff0c;支持多路设备同时接入&#xff0c;并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级…

【并发专题】操作系统模型及三级缓存架构

目录 课程内容一、冯诺依曼计算机模型详解1.计算机五大核心组成部分2.CPU内部结构3.CPU缓存结构4.CPU读取存储器数据过程5.CPU为何要有高速缓存 学习总结 课程内容 一、冯诺依曼计算机模型详解 现代计算机模型是基于-冯诺依曼计算机模型 计算机在运行时&#xff0c;先从内存中…

day20-101. 对称二叉树

101. 对称二叉树 力扣题目链接 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 思路 镜像对称必要的条件就是根节点的左右子树互相对称 左子树的左孩子 右子树的右孩子左子树的右孩子 右子树的左孩子 递归 使用递归前要确定递归的顺序&#xff0c;是前序、后序还…

目标识别数据集互相转换——xml、txt、json数据格式互转

VOC数据格式与YOLO数据格式互转 1.VOC数据格式 VOC&#xff08;Visual Object Classes&#xff09;是一个常用的计算机视觉数据集&#xff0c;它主要用于对象检测、分类和分割任务。VOC的标注格式&#xff0c;也被许多其他的数据集采用&#xff0c;因此理解这个数据格式是很重…

QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)

QT实现tcpf服务器代码&#xff1a;&#xff08;源文件&#xff09; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTc…

【图论】强连通分量进阶

一.作用 强连通分量可以判断环和进行缩点。还有一系列作用.... 这篇文章介绍缩点 二.题目 https://www.luogu.com.cn/problem/P2341 三.思路 我们分析可以知道当一个点没有出度时&#xff0c;则为最受欢迎的牛。但如果有多个出度&#xff0c;则没有最受欢迎的牛。 这是只有…

用户权限管理是保证企业图文档安全最有效的策略

企业拥有大量的图文档数据&#xff0c;涉及多个部门和员工&#xff0c;因此需要建立有效的用户权限管理策略&#xff0c;以保护图文档的安全。智橙平台将在线图文档管理与BOM系统的融合应用为企业提供了强大的权限管理功能&#xff0c;能够确保只有授权用户能够访问和编辑特定的…

Linux运维面试题(三)之数据库管理

Linux运维面试题&#xff08;三&#xff09;之数据库管理 1. SQL语句2.集群主从服务器原理主从故障切换单台Mysql达到性能瓶颈时&#xff0c;如何处理 3.索引&#xff08;软优化&#xff09;什么是索引索引的分类劣势&#xff08;优点&#xff1a;效率和减少数据表内排序和随机…

java实现5种不同的验证码图片,包括中文、算式等,并返回前端

导入以下依赖 <!--图片验证码--><dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version></dependency> 编写controller package com.anXin.user.controlle…