爬虫(二)——爬虫的伪装
前言
本文是爬虫系列的第二篇文章,主要讲解关于爬虫的简单伪装,以及如何爬取B站的视频。建议先看完上一篇文章,再来看这一篇文章。要注意的是,本文介绍的方法只能爬取免费视频,会员视频是无法爬取的哦。
爬虫的伪装
1.为什么要伪装
有些网站会检查请求的合理性(比如B站),合理性具体包括以下三个指标:
user-agent 操作系统和浏览器的标识cookie 用户标识referer 引荐页
2.伪装格式
直接去网址的下面复制。
headers = {'user-agent': '留空', 'cookie': '留空', 'referer': '留空'}
3.如何骗过网址!
res = requests.get(url, headers=headers)
实战——爬取B站视频
找B站视频的链接
1.打开开发者工具–网络(network)–全部(all)–刷新网页。
2.点击大小(size) 让网络数据从大到小排列(因为视频往往比较大)
3.点击靠最前面的数据,标头(headers)中就有链接!
往下,就能看到User-Agent和Referer,把链接复制到代码中对应的“留空”位置即可。B站没有cookie,那就直接把cookie略去就行了。
代码如下,从四行代码变成了五行代码:
import requests
url = 'https://cn-sdjn-fx-01-08.bilivideo.com/upgcxcode/00/58/1599995800/1599995800_x1-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1721210891&gen=playurlv2&os=bcache&oi=0&trid=0000df6fbda98be44d1d86bfe5fd4f5d5f2eu&mid=0&platform=pc&og=cos&upsig=b62735e5559ca1c4d91bac74f3ffdbd6&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&cdnid=57408&bvc=vod&nettype=0&orderid=0,3&buvid=378D4A7A-2CFF-6786-15B0-D8AD9F8DB7C619803infoc&build=0&f=u_0_0&agrr=1&bw=7600&np=151339420&logo=80000000'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 'referer': 'https://www.bilibili.com/video/BV1N1421k7s6/?spm_id_from=333.1007.tianma.11-2-33.click'}
res = requests.get(url, headers=headers)
open('B站视频.mp4', 'wb').write(res.content)
注意,由于解码方式的不同,该视频使用电脑自带的视频播放工具不一定能打开。建议使用恒星播放器打开视频。
找B站音频的链接
打开视频之后,会发现视频没有声音。那是因为B站的视频和音频是分开存储的。所以还需要再下载音频。
在刚刚找视频数据的地方,下面还有好多条数据。此时数据是从大到小排列的,由于音频的大小往往也比较大,而且会比视频小,所以在下面找到除了第一条视频数据以外,重复出现几次的数据,那就是音频(下图选中的那一条便是我们要找的音频)。
音频只有网址和视频不一样,user-agent和referer都和视频一样,所以只需复制音频网址。
代码如下:
url = 'https://cn-sdjn-fx-01-10.bilivideo.com/upgcxcode/00/58/1599995800/1599995800-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1721210891&gen=playurlv2&os=bcache&oi=0&trid=0000df6fbda98be44d1d86bfe5fd4f5d5f2eu&mid=0&platform=pc&og=hw&upsig=05fec34eb554b2d6eccbec9bda85f552&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&cdnid=57410&bvc=vod&nettype=0&orderid=0,3&buvid=378D4A7A-2CFF-6786-15B0-D8AD9F8DB7C619803infoc&build=0&f=u_0_0&agrr=1&bw=3970&np=151339420&logo=80000000'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 'referer': 'https://www.bilibili.com/video/BV1N1421k7s6/?spm_id_from=333.1007.tianma.11-2-33.click'}
res = requests.get(url, headers=headers)
open('B站音频.mp3', 'wb').write(res.content)
注意打开的文件格式要从mp4改成mp3。
合成视频
现在我们有了没有声音的视频,和没有画面的音频,当然要把两者合成一个视频。这个工作可以通过各种视频剪辑软件完成,但其实python也可以完成这个工作。代码如下:
# 1.加载素材!
video = VideoFileClip('B站视频.mp4')
audio = AudioFileClip('B站音频.mp3')
# 2.剪辑视频!
final = video.set_audio(audio)
# 3.导出成品!
final.write_videofile('完整视频.mp4')
完整代码
这里给出完整代码:
import requests
url = 'https://cn-sdjn-fx-01-08.bilivideo.com/upgcxcode/00/58/1599995800/1599995800_x1-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1721210891&gen=playurlv2&os=bcache&oi=0&trid=0000df6fbda98be44d1d86bfe5fd4f5d5f2eu&mid=0&platform=pc&og=cos&upsig=b62735e5559ca1c4d91bac74f3ffdbd6&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&cdnid=57408&bvc=vod&nettype=0&orderid=0,3&buvid=378D4A7A-2CFF-6786-15B0-D8AD9F8DB7C619803infoc&build=0&f=u_0_0&agrr=1&bw=7600&np=151339420&logo=80000000'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 'referer': 'https://www.bilibili.com/video/BV1N1421k7s6/?spm_id_from=333.1007.tianma.11-2-33.click'}
res = requests.get(url, headers=headers)
open('B站视频.mp4', 'wb').write(res.content)url = 'https://cn-sdjn-fx-01-10.bilivideo.com/upgcxcode/00/58/1599995800/1599995800-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1721210891&gen=playurlv2&os=bcache&oi=0&trid=0000df6fbda98be44d1d86bfe5fd4f5d5f2eu&mid=0&platform=pc&og=hw&upsig=05fec34eb554b2d6eccbec9bda85f552&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&cdnid=57410&bvc=vod&nettype=0&orderid=0,3&buvid=378D4A7A-2CFF-6786-15B0-D8AD9F8DB7C619803infoc&build=0&f=u_0_0&agrr=1&bw=3970&np=151339420&logo=80000000'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 'referer': 'https://www.bilibili.com/video/BV1N1421k7s6/?spm_id_from=333.1007.tianma.11-2-33.click'}
res = requests.get(url, headers=headers)
open('B站音频.mp3', 'wb').write(res.content)from moviepy.editor import *# 1.加载素材!
video = VideoFileClip('B站视频.mp4')
audio = AudioFileClip('B站音频.mp3')
# 2.剪辑视频!
final = video.set_audio(audio)
# 3.导出成品!
final.write_videofile('完整视频.mp4')
视频剪辑
python拥有15万+的库,可以实现非常多功能,做一些简单的视频剪辑不在话下。
比如对于刚刚获取的B站视频,我们可以截取其中10s-20s的视频,然后制作成镜像效果。
from moviepy.editor import *video = VideoFileClip('完整视频.mp4') # 加载完整的视频video1 = video.subclip(0, 10) # 切割0-10s的视频
video2 = video.subclip(10, 20) # 切割10-20s的视频
video3 = video.subclip(20, 30) # 切割20-30s的视频# 包括原视频在内的4个镜像视频!
# video2
clip1 = video2.fx(vfx.mirror_x)
clip2 = video2.fx(vfx.mirror_y)
clip3 = clip2.fx(vfx.mirror_x)final = clips_array([[video2, clip1],[clip2, clip3]
])final.write_videofile('镜像视频.mp4')
原本第13秒的视频是这样的:
经过代码处理后的视频是这样的:
总结
本文在上一篇文章的基础上,进一步介绍了爬虫的功能。这次通过爬虫的伪装,成功下载到了B站的视频。还顺便介绍了一点使用python做视频剪辑的功能。
相关文章:

爬虫(二)——爬虫的伪装
前言 本文是爬虫系列的第二篇文章,主要讲解关于爬虫的简单伪装,以及如何爬取B站的视频。建议先看完上一篇文章,再来看这一篇文章。要注意的是,本文介绍的方法只能爬取免费视频,会员视频是无法爬取的哦。 爬虫的伪装 …...

空安全编程的典范:Java 8中的安全应用指南
文章目录 一、Base64 编码解码1.1 基本的编码和解码1.2 URL 和文件名安全的编码解码器1.3 MIME Base64编码和解码 二、Optional类三、Nashorn JavaScript 一、Base64 编码解码 1.1 基本的编码和解码 Base64 编码: 使用 Base64.getEncoder().encodeToString(origin…...
Docker Machine 深入解析
Docker Machine 深入解析 引言 Docker Machine 是 Docker 生态系统中的一个重要工具,它简化了 Docker 容器环境的配置和管理过程。本文将深入探讨 Docker Machine 的概念、功能、使用场景以及如何在实际环境中高效利用它。 什么是 Docker Machine? Docker Machine 是一个…...

20.x86游戏实战-远线程注入的实现
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

06MFC之对话框--重绘元文件
文章目录 实现示例展示需要绘制的窗口/位置控件位置更新下一次示例粗细滑动部分更新重绘元文件(窗口变化内容消失)方法一:使用元文件方法二:兼容设备方法三:使用自定义类存储绘图数据除画笔外功能处理画笔功能处理保存前面画的线及色彩实现示例展示 需要绘制的窗口/位置 …...

鼠标的发明和鼠标“变形记”
注:机翻,未校对。 Who Invented the Computer Mouse? 谁发明了电脑鼠标? It was technology visionary and inventor Douglas Engelbart (January 30, 1925 – July 2, 2013) who revolutionized the way computers worked, turning it fr…...

快捷:通过胶水语言实现工作中测试流程并行、加速
通过胶水语言实现工作中测试流程并行、加速 通过胶水语言实现工作中测试流程并行、加速工作场景(背景)问题抽象(挑战)如何做(行动)获得了什么(结果)后记相关资源 通过胶水语言实现工…...

MySQL 和 PostgreSQL,我到底选择哪个?
MySQL 和 PostgreSQL 是两个广泛使用的关系型数据库管理系统(RDBMS)。它们都具有强大的功能和广泛的社区支持,但在某些方面存在一些差异。本文将详细比较 MySQL 和 PostgreSQL,包括它们的特点、性能、扩展性、安全性以及适用场景等…...
Java —— 内部类
Java内部类 1.什么是内部类? 将一个类A定义在另一个类B里面,里面的类A就称为内部类(InnerClass),类B则称为外部类(OuterClass)。 2.为什么需要内部类? 具体来说,当一…...

高职院校人工智能人才培养成果导向系统构建、实施要点与评量方法
一、引言 近年来,人工智能技术在全球范围内迅速发展,对各行各业产生了深远的影响。高职院校作为培养高技能人才的重要基地,肩负着培养人工智能领域专业人才的重任。为了适应社会对人工智能人才的需求,高职院校需要构建一套科学、…...
ffmpeg中的超时控制
在FFmpeg库中,很多函数没有直接的参数可以设置超时。 那么有哪些函数可以通过设置 AVFormatContext 的 interrupt_callback 来实现超时控制? avformat_open_input: 打开输入文件或流。这个函数会阻塞,尤其是在网络流的情况下&…...

搜维尔科技:【研究】触觉技术将在5年内以8种方式改变人们的世界
触觉技术在过去几年中发展迅猛,大大提高了反馈的精确度和真实度。其应用产生了真正的影响,数百家公司和企业都集成了触觉技术来增强培训和研究模拟。 虽然触觉技术主要用于 B2B 层面,但触觉技术可能会彻底改变我们的生活,尤其是通…...

项目收获总结--MyBatis的知识收获
MyBatis的知识收获 一、概述二、获取自动生成的(主)键值三、将sql执行结果封装为目标返回对象的方式和原理四、延迟加载实现原理五、批量插入六、自带分页与分页插件原理七、Mapper(Dao)接口与XML映射文件关系八、模糊查询like语句九、#{}和${}的区别十、二级缓存案例实战 一、…...
数据库管理-第221期 Oracle的高可用-04(20240717)
数据库管理221期 2024-07-17 数据库管理-第221期 Oracle的高可用-04(20240717)1 ADG2 连接配置2.1 TNS2.2 JDBC2.3 JAVA连接池2.3.1 Oracle UCP2.3.2 应用连接池基础配置 总结 数据库管理-第221期 Oracle的高可用-04(20240717) 作…...

navicat15已连接忘记密码
1.导出链接 2.使用文本打开 connections.ncx UserName"root" PasswordXXXX 3.复制加密密码,在线解密 代码在线运行 - 在线工具 php解密代码 <?php class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected…...

企业管理必备:学会寻找客户绝佳方法。
无论是日常沟通、工作交流,还是社交娱乐,微信都扮演着重要的角色。而在微信的使用过程中,添加好友是一项基本而重要的操作,但是您真的会添加微信好友吗? 试试这个神器——微信管理系统,下面分享它快速加客…...

昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例
今天是29天,学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理(NLP)库。它具有以下特点: 支持多种 NLP 任务:如语言模型、机器翻译、问答、情感分析、序列标记、摘要等ÿ…...

元服务体验-服务发现
服务发现,无论线上或线下的方式都可以发现元服务。 线上:基于用户意图。从精准意图的搜索、用户事件触发的推荐到主动探索等场景。用户可以在设备的负一屏、全局搜索、应用市场、桌面等场景发现元服务。 线下:用户在 HarmonyOS Connect标签…...

设计模式学习(二)工厂模式——抽象工厂模式+注册表
设计模式学习(二)工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…...
同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器
同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器 同三维T80004解码器系列视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清H…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...