爬虫(二)——爬虫的伪装

news2024/11/14 6:15:49

前言

本文是爬虫系列的第二篇文章,主要讲解关于爬虫的简单伪装,以及如何爬取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做视频剪辑的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode-三数之和

视频:https://www.bilibili.com/video/BV1bP411c7oJ/?spm_id_from333.788&vd_sourcedd84879fcf1be72f360461b01ecab0d6 从两数之和开始,排序后的两数之和,利用好升序的性质,可以将时间复杂度从on2降到on; class Solution …

MongoDB常用命令大全,概述、备份恢复

文章目录 一、MongoDB简介二、服务启动停止、连接三、数据库相关四、集合操作五、文档操作六、数据备份与恢复/导入导出数据6.1 mongodump备份数据库6.2 mongorestore还原数据库6.3 mongoexport导出表 或 表中部分字段6.4 mongoimport导入表 或 表中部分字段 七、其他常用命令八…

Qt 4.8.7 + MSVC 中文乱码问题深入分析

此问题很常见,然而网上关于此问题的分析大多不够深刻,甚至有错误;加之Qt5又更改了一些编码策略,而很多文章并未提及版本问题,或是就算提了,读者也不重视。这些因素很容易让读者产生误导。今日我彻底研究透了…

成像光谱遥感技术中的AI革命:ChatGPT

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力,ChatGPT在遥感中的应用,人工智能在…

AI第二课堂第一次笔记

conda的使用 在输入cmd进入终端后,使用命令 conda create -n env_name python3.10 创建环境 命令 conda activate env_name 打开环境,如:使用 conda deactivate退出指令 2.python一些常见操作 python中的文件打开与关闭 调开源的库 p…

spring框架(ioc控制反转 aop面向切面编程)

目录 服务端三层开发: spring框架(ioc控制反转 aop面向切面编程) 1、Spring框架的优点 什么是事物? 2、Spring的IOC核心技术 什么是ioc? 代码举例:(详细流程见笔记) **applic…

一些简单的基本知识(与C基本一致)

一、注释 1.单行注释://(快捷键:ctrlshift?,可以选择多行) 2.多行注释:/* 文本 */ 二、变量 变量的作用是给一段内存空间起名,方便操作内存中的数据。 通过赋予某数据的…

肯德基蛋挞咖啡?品牌为何热衷于研发“奇葩”新品

想喝蛋挞的风还是吹到了咖啡这里... 是的,它来了,它带着新品走来了。前不久,肯德基旗下的肯悦咖啡推出了一款“蛋挞dirty”,就是把除去蛋挞的芯,留下蛋挞皮皮献给咖啡,成功变成了可以吃的咖啡或者说是可以…

Java面试题--JVM大厂篇之深入解析JVM中的Serial GC:工作原理与代际区别

目录 引言: 正文: 一、Serial GC工作原理 年轻代垃圾回收(Minor GC): 老年代垃圾回收(Major GC或Full GC): 二、年轻代和老年代的区别 年轻代(Young Generation&a…

Java 中的正则表达式

转义字符由反斜杠\x组成,用于实现特殊功能当想取消这些特殊功能时可以在前面加上反斜杠\ 例如在Java中当\出现时是转义字符的一部分,具有特殊意义,前面加一个反斜可以取消其特殊意义,表示1个普通的反斜杠\,\\\\表示2个…

Java从入门到精通(第4版)中文电子版

前言 针对编程语言JAVA相关知识进行了精密的讲解,全册分为28章,含基础知识、核心知识、高级应用3大核心模块,具体细分又包括初识Java,类的高级特性,流程控制,字符串,数组,数据库操作…

团队提效探索:市场上最好的10款项目工单管理工具对比

本文将分享2024年值得关注的10款项目工单管理系统:PingCode、Worktile、蓝凌OA、禅道、泛微E-office、Teambition、monday.com、Basecamp、ProofHub、Wrike。 你是否曾经因为项目进度混乱而感到头疼,或是在处理大量任务时不知所措?在项目管理…

探索编程世界的乐趣:《C++青少年趣味编程108例》

💂 个人网站:【 摸鱼游戏】【网址导航】【神级代码资源网站】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

TinyVue v3.17.0 正式发布,推出了一款基于 Quill 2.0 的富文本编辑器,功能强大、开箱即用!

本文由体验技术团队Kagol老师原创~ 我们非常高兴地宣布,2024年6月26日,TinyVue 发布了 v3.17.0 🎉。 TinyVue 每次大版本发布,都会给大家带来一些实用的新特性,上一个版本我们重构了 chart-core,新增 Circ…

算法2--贪心算法

1.老鼠和猫的交易 小老鼠准备了M磅的猫粮,准备去和看守仓库的猫做交易,因为仓库里有小老鼠喜欢吃的五香豆。 仓库有N个房间; 第i个房间有 J[i] 磅的五香豆,并且需要用 F[i] 磅的猫粮去交换; 老鼠不必交换该房间所有的五…

笔记 5 :linux 0.11 注释,函数 copy_mem() , copy_process () , 中断函数 int 80H 的代码框架

(38)接着介绍一个创建进程时的重要的函数 copy_mem() 函数: (39) 分析另一个关于 fork() 的重要的函数 copy_process(),与李忠老师的操…

暑期-大数据人工智能学习-在线实习项目

这个暑期 默默努力一把 悄悄惊艳所有人 在线企业项目试岗实训 助你突破固有思维模式,伴你进阶成长

MySQL索引特性(下)

目录 索引的理解 理解单个Page 理解多个Page 页目录 单页情况 多页情况 复盘一下 聚簇索引VS非聚簇索引 区别 索引操作 主键索引 唯一索引的创建 普通索引的创建 查询索引 删除索引 索引创建原则 索引的理解 理解单个Page MySQL 中要管理很多数据表文件,而…

阿里云ECS跨区域迁移,利用老操作系统作为新服务操作系统

由于特殊原因或者数据备份需要迁移ecs服务器 1.老服务快照 选择ecs实例,点开实例 进入云盘 https://ecs.console.aliyun.com/disk 在云盘上点击建立快照 2.准备oss同源 购买oss 存储,用于临时备份 https://oss.console.aliyun.com/bucket/ 记得必…

Spring如何进行动态注册Bean

在Spring框架中,Bean是应用程序的核心组成部分,而BeanDefinition则是这些Bean的元数据表示。随着应用程序的复杂性增加,我们可能需要更灵活地定义和注册Bean。Spring框架提供了几个扩展点,允许我们以编程方式影响Bean的创建和定义…