当前位置: 首页 > news >正文

爬虫(二)

1.同步获取短视频

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.只要播放地址对Json数据解析,先把列表找出:
在这里插入图片描述
在这里插入图片描述
2.只想要所有的播放地址,通过列表表达式循环遍历这个列表拿到每个对象,再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放列表(url_list),播放列表有重复只要第一个
在这里插入图片描述
3.下载
在这里插入图片描述

2.并发获取短视频

在这里插入图片描述

3.JS逆向实战

3.1 对称加密(AES)

AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个。key和iv必须一致

常见的对称加密: AES, DES, 3DES. 我们这里讨论AES。
安装:

pip install pycryptodome

AES 加密最常用的模式就是 CBC 模式和 ECB模式 ,当然还有很多其它模式,他们都属于AES加密。ECB模式和CBC 模式俩者区别就是 ECB 不需要 iv偏移量,而CBC需要。

"""
长度16: *AES-128*   24: *AES-192*32: *AES-256*MODE 加密模式. 常见的ECB, CBCECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。
"""

CBC加密案例(选择aes-128):先加密,再编码

from Crypto.Cipher import AES   # Crypto是一个算法库,Cipher有相应的算法,我们用AES
from Crypto.Util.Padding import pad     # 里面有个工具叫填充叫pad
import base64   # 64编码key = '0123456789abcdef'.encode()  # 秘钥: 因为aes-128模式,所以必须16字节
iv = 'abcdabcdabcdabcd'.encode() # 偏移量:因为aes-128模式,所以必须16字节
text = 'Self-improvement is a lifelong process!'  # 加密内容,因为aes-128模式,所以字节长度必须是16的倍数
# while len(text.encode('utf-8')) % 16 != 0:  # 如果text不足16位的倍数就用空格补足为16位
#     text += '\0'
text = pad(text.encode(), 16)   # pad在这里如果加密不足16位就会block_size:16填充
print("完整text:", text)aes = AES.new(key, AES.MODE_CBC, iv)  # 创建一个aes对象,传key,iv;中间值是个固定值模式,用AES中CBC模式en_text = aes.encrypt(text)  # 加密明文encrypt
print("aes加密数据:::", en_text)  # b"_\xf04\x7f/R\xef\xe9\x14#q\xd8A\x12\x8e\xe3\xa5\x93\x96'zOP\xc1\x85{\xad\xc2c\xddn\x86"en_text = base64.b64encode(en_text).decode()  # 将返回的字节型数据转进行base64编码,防止混淆,歧义
print(en_text)  #  Pwhs4f1/GxersDcWwZa6fxJTS4YfeV3FoOWvcq14jSLdG+clB/H3+kqBnAfwmZ03

在这里插入图片描述
CBC解密案例:先解码,再解密

from Crypto.Cipher import AES
import base64
from Crypto.Util.Padding import unpadkey = '0123456789abcdef'.encode()
iv = 'abcdabcdabcdabcd'.encode()
aes = AES.new(key, AES.MODE_CBC, iv)text = 'Pwhs4f1/GxersDcWwZa6fxJTS4YfeV3FoOWvcq14jSLdG+clB/H3+kqBnAfwmZ03'.encode()  # 需要解密的文本
ecrypted_base64 = base64.b64decode(text)  # base64解码成字节流
source = aes.decrypt(ecrypted_base64)  # 解密decrypt
print("aes解密数据:::", source.decode())
print("aes解密数据:::", unpad(source, 16).decode())

在这里插入图片描述

1.在Python中进行AES加密解密时,所传入的密文、明文、秘钥、iv偏移量、都需要是bytes(字节型)数据。python 在构建aes对象时也只能接受bytes类型数据。
2.当秘钥,iv偏移量,待加密的明文,字节长度不够16字节或者16字节倍数的时候需要进行补全。
3.CBC模式需要重新生成AES对象,为了防止这类错误,无论是什么模式都重新生成AES对象就可以了。

3.2 毛毛租的python逆向

毛毛租平台:https://www.maomaozu.com/#/build

在这里插入图片描述

3.2.1 加密

在这里插入图片描述
在这里插入图片描述
绝招:加一个断点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
找key和iv:
在这里插入图片描述

3.2.2 解密

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import jsonimport requests
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64cookies = {'PHPSESSID': '6rhg42ce8egfeulonevjnfj4sv','Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc': '1706941076','SECKEY_ABVK': 'aJ99/mmPcgDcnVNO8MQjq74LRk9XDbNZo7uGOCGoln0%3D','Hm_lpvt_6cd598ca665714ffcd8aca3aafc5e0dc': '1706941479','BMAP_SECKEY': 'IN6Q3NYbpjYXemaxNcEdhP7dkIvDfrO09kOcuQx3rurdS546vjNWE-mY8RexJlLiLTvJaySgMcDcsFIr0mbjJKoCPrsissHnmXCxfpEUr4az4OxDtbb-s1bmRsoQs0yz9nVTEtFnE5dWUcYecms3m4YY8bV6rl2Sj6HvoQPViznasWG2OkGUebHlE5loh2dV',
}headers = {'Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Cache-Control': 'no-cache','Connection': 'keep-alive','Content-Type': 'application/json; charset=UTF-8',# 'Cookie': 'PHPSESSID=6rhg42ce8egfeulonevjnfj4sv; Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc=1706941076; SECKEY_ABVK=aJ99/mmPcgDcnVNO8MQjq74LRk9XDbNZo7uGOCGoln0%3D; Hm_lpvt_6cd598ca665714ffcd8aca3aafc5e0dc=1706941479; BMAP_SECKEY=IN6Q3NYbpjYXemaxNcEdhP7dkIvDfrO09kOcuQx3rurdS546vjNWE-mY8RexJlLiLTvJaySgMcDcsFIr0mbjJKoCPrsissHnmXCxfpEUr4az4OxDtbb-s1bmRsoQs0yz9nVTEtFnE5dWUcYecms3m4YY8bV6rl2Sj6HvoQPViznasWG2OkGUebHlE5loh2dV','Origin': 'https://www.maomaozu.com','Pragma': 'no-cache','Referer': 'https://www.maomaozu.com/','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-origin','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0','sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"',
}# #   批量爬
# for i in range(1, 10):
#     data = {
#         "Type": 0,
#         "expire": 1706974966977,
#         "page": 5,
#     }
#
#     key = '55b3b62613aef1a0'.encode()
#     iv = '55b3b62613aef1a0'.encode()
#     text = json.dumps(data)
#
#     text = pad(text.encode(), 16)
#     print("完整text:", text)
#
#     aes = AES.new(key, AES.MODE_CBC, iv)  # 创建一个aes对象
#
#     en_text = aes.encrypt(text)  # 加密明文
#     print("aes加密数据:::", en_text)
#
#     en_text = base64.b64encode(en_text).decode()
#     print(en_text)
#
#     # data = 'i1gpLEJyKvluv3sQVGr/h6RZxT9vv00IpxineW3h2Y8GGtjqGm2Gl46nX7lTrD7H'   # 加密值
#
#     response = requests.post('https://www.maomaozu.com/index/build.json', cookies=cookies, headers=headers,
#                              data=en_text)
#     print(response.text)# 数据加密3个加密项
data = {"Type": 0,"expire": 1706974966977,"page": 5,
}key = '55b3b62613aef1a0'.encode()
iv = '55b3b62613aef1a0'.encode()
text = json.dumps(data)text = pad(text.encode(), 16)
print("完整text:", text)aes = AES.new(key, AES.MODE_CBC, iv)  # 创建一个aes对象en_text = aes.encrypt(text)  # 加密明文
print("aes加密数据:::", en_text)en_text = base64.b64encode(en_text).decode()
print(en_text)# data = 'i1gpLEJyKvluv3sQVGr/h6RZxT9vv00IpxineW3h2Y8GGtjqGm2Gl46nX7lTrD7H'   # 加密值response = requests.post('https://www.maomaozu.com/index/build.json', cookies=cookies, headers=headers, data=en_text)
print(response.text)# 解密数据逻辑
key = "0a1fea31626b3b55".encode()
iv = "0a1fea31626b3b55".encode()
aes = AES.new(key, AES.MODE_CBC, iv)ecrypted_base64 = base64.b64decode(response.text.encode())  # base64解码成字节流
source = aes.decrypt(ecrypted_base64)  # 解密
print("aes解密数据:::", source.decode())
print("aes解密数据:::", unpad(source, 16).decode())

相关文章:

爬虫(二)

1.同步获取短视频 1.只要播放地址对Json数据解析,先把列表找出: 2.只想要所有的播放地址,通过列表表达式循环遍历这个列表拿到每个对象,再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放…...

Flink实战四_TableAPISQL

接上文:Flink实战三_时间语义 1、Table API和SQL是什么? 接下来理解下Flink的整个客户端API体系,Flink为流式/批量处理应用程序提供了不同级别的抽象: 这四层API是一个依次向上支撑的关系。 Flink API 最底层的抽象就是有状态实…...

海外云手机开辟企业跨境电商新道路

近几年,海外云手机为跨境电商、海外媒体引流、游戏行业等互联网领域注入了蓬勃活力。对于国内跨境电商而言,在亚马逊及其他平台上,短视频引流和社交电商营销成为最为有效的流量来源。如何通过海外云手机的助力,在新兴社交平台为企…...

【51单片机系列】中断优先级介绍及使用

文章来源:《51单片机原理及应用(第3版)》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。 当CPU处理低优先级中断,又发生更高级中断时,此时中断处理过程如下图所示。 一个正在执行的低优先级中断服…...

.net core 6 集成 elasticsearch 并 使用分词器

1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…...

Unity项目从built-in升级到URP(包含早期版本和2023版本)

unity不同版本的升级URP的方式不一样,但是大体流程是相似的 首先是加载URP包 Windows -> package manager,在unity registry中找到Universal RP 2023版本: 更早的版本: 创建URP资源和渲染器​​ 有些版本在加载时会自动创建&#…...

2月4号作业

编写程序实现二叉树的创建&#xff0c;三种遍历自己销毁 #include <myhead.h>#define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #define OK 1 #define ERROR 0#define INIT_SIZE 20 #define INCREMENT_SIZE 5typedef int Status; typedef int TElemType; //存储结构…...

瑞_23种设计模式_建造者模式

文章目录 1 建造者模式&#xff08;Builder Pattern&#xff09;1.1 介绍1.2 概述1.3 创作者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 模式拓展 ★★★4.1 重构前4.2 重构后 5 总结5.1 建造者模式优缺点5.2 建造者模式使用场景5.3 建造者模式 …...

GA/T 1707-2019 防爆安全门检测

防爆安全门是指能抵抗爆炸冲击波作用的特种防护门&#xff0c;根据防爆门的防爆性能的不同&#xff0c;分为非接触爆炸防爆门和防接触爆炸防爆门&#xff0c;根据防爆能力的不同&#xff0c;分为不同等级。 GA/T 1707-2019 防爆安全门检测项目 测试项目 测试标准 外观质量 …...

k8s学习-数据管理

在Docker中我们知道&#xff0c;要想实现数据的持久化&#xff08;所谓Docker的数据持久化即数据不随着Container的结束而结束&#xff09;&#xff0c;需要将数据从宿主机挂载到容器中&#xff0c;常用的手段就是Volume数据卷。在K8S中&#xff0c;也提供了存储模型Volume&…...

java hutool工具类实现将数据下载到excel

通过hutool工具类&#xff0c;对于excel的操作变得非常简单&#xff0c;上篇介绍的是excel的上传&#xff0c;对excel的操作&#xff0c;核心代码只有一行。本篇的excel的下载&#xff0c;核心数据也不超过两行&#xff0c;简洁方便&#xff0c;特别适合当下的低代码操作。 下载…...

【C/Python】Gtk部件ListStore的使用

一、C语言 在GTK中&#xff0c;Gtk.ListStore是一个实现了Gtk.TreeModel接口的存储模型&#xff0c;用于在如Gtk.TreeView这样的控件中存储数据。以下是一个简单的使用Gtk.ListStore的C语言示例&#xff0c;该示例创建了一个列表&#xff0c;并在图形界面中显示&#xff1a; …...

Swift 入门之自定义类型的模式匹配(Pattern Matching)

概览 小伙伴们都知道 Swift 是一门简洁、类型安全、极富表现力以及“性感迷人”的编程语言。 和大多数语言一样&#xff0c;在 Swift 中也有一些隐藏着的、不为人知的宝藏特性。利用它们我们可以极大增加撸码的愉悦和成就感。 其中&#xff0c;模式匹配&#xff08;Pattern …...

MySQL-----DML基础操作

DML语句 DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增删改操作。 ▶ 添加数据(INSERT) 【语法】 1. 给指定字段添加数据 INSERTO 表名 (字段名1&#xff0c;字段名2,...) VALUES (值1&#xff0c;值2,...); 2.给全…...

提前祝大家新年好!来看看社区 2023 都得了哪些奖吧

大噶好&#xff01;转眼马上就是“龙”历新年啦&#xff0c;不知道大家这周的工作热情怎么样呢&#xff1f;小陈的心已经在殷切期盼回家过年了&#xff5e; RTE 开发者社区预祝诸位&#xff1a; 2024 年 &#x1f432;龙年添财气&#xff0c;万事皆胜意&#xff01; 回顾过去…...

Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”

前言 随着业务数据的增加&#xff08;比如电商业务中&#xff0c;随着用户规模和商品数量的增加&#xff09;&#xff0c;就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群&#xff0c;把数据分散保存到不同的实例上。但是这样做的话&#xff0c;如果要保存的…...

qt-C++笔记之contains()和isEmpty()函数、以及部分其他函数列举

qt-C笔记之contains()和isEmpty()函数、以及部分其他函数列举 code review! 文章目录 qt-C笔记之contains()和isEmpty()函数、以及部分其他函数列举contains()isEmpty() 类似的其他函数列举通用容器类函数字符串特有函数 在Qt C开发中&#xff0c; contains() 和 isEmpty()…...

极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁

文章目录 前言幻兽帕鲁私服详细部署教程查看服务器开始游戏自定义游戏参数配置 前言 行业资讯 《幻兽帕鲁》的火爆对开发商 Pocketpair 来说&#xff0c;代价是巨大的。该游戏的成功让首席执行官沟部拓郎最近在推特上表示&#xff0c;他可能因服务器运营费用而面临破产。据他透…...

MagicVideo-V2:多阶段高保真视频生成框架

本项工作介绍了MagicVideo-V2&#xff0c;将文本到图像模型、视频运动生成器、参考图像embedding模块和帧内插模块集成到端到端的视频生成流程中。由于这些架构设计的好处&#xff0c;MagicVideo-V2能够生成具有极高保真度和流畅度的美观高分辨率视频。通过大规模用户评估&…...

【三】【C++】类与对象(二)

类的六个默认成员函数 在C中&#xff0c;有六个默认成员函数&#xff0c;它们是编译器在需要的情况下自动生成的成员函数&#xff0c;如果你不显式地定义它们&#xff0c;编译器会自动提供默认实现。这些默认成员函数包括&#xff1a; 默认构造函数 (Default Constructor)&…...

51单片机(二) --- GPIO + 中断

一、GPIO 通用输入输出口GPIO&#xff08;General Purpose Input Output&#xff09;即通用目的输入输出口&#xff0c;是 51 单片机与外部设备进行数据交互的核心通道&#xff0c;51 单片机的 P0、P1、P2、P3 四组口均为 GPIO 口。与入门阶段仅用到的简单电平输出不同&#xf…...

【RAG】【vector_stores001】阿里云OpenSearch向量存储完整案例

本案例演示如何使用 LlamaIndex 与阿里云 OpenSearch 向量搜索版集成&#xff0c;实现向量存储和检索功能&#xff0c;用于构建基于文档的问答系统。1. 案例目标本案例的主要目标是&#xff1a;设置阿里云 OpenSearch 向量存储&#xff1a;配置 LlamaIndex 以使用阿里云 OpenSe…...

Windows家庭版开启原生远程桌面

最近有小伙伴问&#xff1a;怎样才能远程控制Windows家庭版的电脑&#xff1f; 小白回答&#xff1a;用向日葵。 哈哈哈哈……这逻辑也是很正确的&#xff0c;毕竟只要安装个第三方远程桌面就能搞定的事情&#xff0c;为啥要弄得那么复杂呢&#xff1f; 不过&#xff0c;他说…...

COMSOL模拟:电磁超声压电接收技术在铝板裂纹检测中的应用

comsol电磁超声压电接收EMAT 在1mm厚铝板中激励250kHz的电磁超声在200mm位置处设置一个深0.8mm的裂纹缺陷&#xff0c;左端面设为低反射边界 在85mm位置处放置一个压电片接收信号&#xff0c;信号如图3所示&#xff0c;三个波分别为始波&#xff0c;裂纹反射波(S0模态)和右端面…...

电动汽车电动真空助力制动系统模型:一场制动系统的静默革命

电动真空泵&#xff0c;真空助力器&#xff0c;助力制动 Simulink伺服制动模型 Simulink电动助力制动模型 电动汽车电动真空助力制动系统模型基于MATLAB/Simulink搭建电动汽车电动真空助力系统&#xff0c;包括真空助力器模型&#xff0c;电动真空泵模型&#xff0c;系统最小真…...

(支援发出,转发需官方授权)某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招(找)的学生都一样。

&#xff08;支援发出&#xff0c;转发需官方授权&#xff09;某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招&#xff08;找&#xff09;的学生都一样。...

从零开始构建遗传图谱:QTL定位的关键技术与实践指南

1. 遗传图谱与QTL定位入门指南 第一次接触遗传图谱时&#xff0c;我和所有初学者一样充满困惑——这堆专业术语到底在说什么&#xff1f;简单来说&#xff0c;遗传图谱就像生物体的"基因地图"&#xff0c;标记着不同基因在染色体上的相对位置。而QTL定位则是寻找控制…...

3步解锁7-Zip:告别存储焦虑的终极文件管理方案

3步解锁7-Zip&#xff1a;告别存储焦虑的终极文件管理方案 【免费下载链接】7z 7-Zip Official Chinese Simplified Repository (Homepage and 7z Extra package) 项目地址: https://gitcode.com/gh_mirrors/7z1/7z 你是否曾因电脑空间不足而焦虑&#xff1f;是否在传输…...

想自己动手做个四足机器人?这份从电机选型到步态控制的保姆级入门指南请收好

从零搭建四足机器人&#xff1a;硬件选型与步态控制实战手册 当你第一次看到波士顿动力的Spot机器人完成后空翻&#xff0c;或是MIT Mini Cheetah在草地上灵活奔跑时&#xff0c;是否也萌生过自己打造一台四足机器的念头&#xff1f;四足机器人正从实验室走向创客空间&#xff…...

从Simulink仿真到Altium Designer画板:一个直流电机调速系统的完整诞生记

从算法仿真到电路实现&#xff1a;直流电机双闭环调速系统全流程实战 在实验室里调试电机控制系统时&#xff0c;最令人兴奋的时刻莫过于看到仿真曲线和实际示波器波形完美吻合的瞬间。作为电子工程师&#xff0c;我们每天都在与这种"虚实结合"的挑战打交道——如何在…...