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

前言

本文是爬虫系列的第二篇文章,主要讲解关于爬虫的简单伪装,以及如何爬取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.mzph.cn/pingmian/47511.shtml

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

相关文章

C++类与对象(补)

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.默认成员函数二.static三.友元四.匿名对象总结 前言 类的默认成员函数,默认成员…

linux centos limits.conf 修改错误,无法登陆问题修复 centos7.9

一、问题描述 由于修改/etc/security/limits.conf这个文件中的值不当,重启后会导致其账户无法远程登录,本机登录。 如改成这样《错误示范》: 会出现: 二、解决 现在知道是由于修改limits.conf文件不当造成的,那么就…

Android-- 集成谷歌地图

引言 项目需求需要在谷歌地图: 地图展示,设备点聚合,设备站点,绘制点和区域等功能。 我只针对我涉及到的技术做一下总结,希望能帮到开始接触谷歌地图的伙伴们。 集成步骤 1、在项目的modle的build.gradle中添加依赖如…

p19 C语言操作符详解

算术操作符 1.除了%操作符之外&#xff0c;其他的几个操作符可以作用于整数和浮点数。 2.对于/操作符如果两个操作数都为整数&#xff0c;执行整数除法。而只要有浮点数值型的就是浮点除法。 3.%操作符的两个操作数必须为 整数。返回的是整除之后的余数。 #include<std…

计算机毕业设计-基于Springboot的养老院管理系统-源码程序文档

项目源码&#xff0c;请关注❥点赞收藏并私信博主&#xff0c;谢谢~ 本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写&#xff0c;禁止任何人抄袭以及各类盈利性传播&#xff0c; 相关的代码部署论文ppt代码讲解答辩指导文件…

SpringBoot以及swagger的基本使用

1、SpringBoot是什么&#xff1f; 一种快速开发、启动Spring的框架、脚手架 遵循“约定优于配置”的思想&#xff0c;使得能够快速创建和配置Spring应用 2、SpringBoot的核心特性 自动配置&#xff0c;一些依赖、默认配置都预设好了&#xff0c;减少了配置量起步依赖&#x…

表格竖向展示

最近在做手机端web页面&#xff0c;页面中需要有个表格来显示数据&#xff0c;但是由于数据太多页面太窄&#xff0c;table展示横向滑动的话感觉很丑。所以让表格竖向显示了 具体页面如下: 实现代码&#xff1a;当然代码里面绑定的数据啊什么的你都可以修改为自己的内容&#…

【文献阅读】Social Bot Detection Based on Window Strategy

Abstract 机器人发帖的目的是在不同时期宣传不同的内容&#xff0c;其发帖经常会出现异常的兴趣变化、而人类发帖的目的是表达兴趣爱好和日常生活&#xff0c;其兴趣变化相对稳定。提出了一种基于窗口策略&#xff08;BotWindow Strategy&#xff09;的社交机器人检测模型基于…

【fastadmin】selectpickers多选提交后数据库只保存了一个选择值

问题描述 在 fastadmin 框架开发项目中&#xff0c;用到了selectpickers多选组件。 例如&#xff1a;选择了两位员工&#xff0c;但是提交后数据库只保存了一个选择值。 <div class"form-group"><label class"control-label col-xs-12 col-sm-2"…

Puppeteer动态代理实战:提升数据抓取效率

引言 Puppeteer是由Google Chrome团队开发的一个Node.js库&#xff0c;用于控制Chrome或Chromium浏览器。它提供了高级API&#xff0c;可以进行网页自动化操作&#xff0c;包括导航、屏幕截图、生成PDF、捕获网络活动等。在本文中&#xff0c;我们将重点介绍如何使用Puppeteer…

【深度学习】InternVL2-8B,图转文,docker部署

文章目录 基础fastapi服务请求fastapi接口 基础 https://huggingface.co/OpenGVLab/InternVL2-8B#%E7%AE%80%E4%BB%8B InternVL2-26B应该更好&#xff0c;但显存没那么大&#xff0c;只能跑InternVL2-8B了。 下载&#xff1a; cd /ssd/xiedong/InternVL2-26B git clone htt…

unity3d脚本使用start,updata,awake

最近学了一下unity&#xff0c;脚本编写用的c#&#xff0c;虽说没学过c#但是勉强根据教学还能写点代码。 在这里我来记录一下在我学习过程中感觉最重要的东西 消息函数&#xff1a; 在我们创建一个脚本文件的时候&#xff0c;我们首先可以看到两个默认给你写出来的函数。 这两…

RAG技术-为自然语言处理注入新动力

引言&#xff1a; 在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术以其独特的方式&#xff0c;正在改变我们与机器的交互方式。RAG技术结合了大语言模型的强大能力&#xff0c;使得机器在理解和…

MongoDB教程(九):java集成mongoDB

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、环境准…

SAPUI5基础知识15 - 理解控件的本质

1. 背景 经过一系列的练习&#xff0c;通过不同的SAPUI5控件&#xff0c;我们完成了对应用程序界面的初步设计&#xff0c;在本篇博客中&#xff0c;让我们一起总结下SAPUI5控件的相关知识点&#xff0c;更深入地理解SAPUI5控件的本质。 通常而言&#xff0c;一个典型UI5应用…

RocketMQ单结点安装/Dashboard安装

目录 1.安装NameServer 2.安装Broker 3.使用自带工具测试数据发送 4.使用DashBoard进行查看 5.关闭相关设备 前置条件&#xff1a;两台虚拟机CentOS Linux release 7.5.1804(ps:当然也可以都部署在一台机器上) RocketMq属于天生集群。需要同时启动nameServer和Broker进行…

CMMI认证是什么?做CMMI认证的必要条件?CMMI认证的重要性

CMMI&#xff08;Capability Maturity Model Integration&#xff09;认证&#xff0c;作为企业追求卓越软件工程实践的标志&#xff0c;其实现过程既严谨又复杂。首先&#xff0c;我们需要深入理解CMMI的核心理念&#xff0c;即持续的过程改进和成熟度提升。 为了实现CMMI认证…

C++ 几何计算库

代码 #include <iostream> #include <list> #include <CGAL/Simple_cartesian.h> #include <CGAL/AABB_tree.h> #include <CGAL/AABB_traits.h> #include <CGAL/AABB_segment_primitive.h> #include <CGAL/Polygon_2.h>typedef CGAL…

线性代数|机器学习-P24加速梯度下降(动量法)

文章目录 1. 概述2. 引入3. 动量法梯度下降 1. 概述 我们之前学的最速梯度下降[线搜索方法] 公式如下&#xff1a; x k 1 x k − s k ∇ f ( x k ) \begin{equation} x_{k1}x_k-s_k\nabla f(x_k) \end{equation} xk1​xk​−sk​∇f(xk​)​​ 但对于这种方法来说&#xff…

助力数据记录:Connext的Historian功能启动指南

​ 在工业自动化领域&#xff0c;Connext以其全新的OPCUA数据采集解决方案为核心&#xff0c;不仅拥有超越传统的扩展功能&#xff0c;而且在多个行业中都得到了广泛的认证。Connext能够快速找出解决方案并迅速部署&#xff0c;整个过程不会影响到原有的生产。它的强大之处在于…