Python爬虫(5) --爬取网页视频
文章目录
- 爬虫
- 爬取视频
- 指定url
- 发送请求
- UA伪装
- 请求页面
- 获取想要的数据
- 解析定位
- 定位音视频位置
- 存放视频
- 完整代码实现
- 总结
爬虫
Python 爬虫是一种自动化工具,用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持(如 requests、BeautifulSoup、Scrapy 等)而成为实现爬虫的首选语言之一。
Python爬虫获取浏览器中的信息,实际上是模仿浏览器上网的行为。上一篇中,我们尝试着爬取了一个网站页面的图片内容,完成获取信息需要完成四步:
- 指定url
- 发送请求
- 获取你想要的数据
- 数据解析
这次我们来试试用同样的方法爬取网站页面的视频看看可以成功吗?
爬取视频
我们来试试爬取以下网页的视频:
https://www.bilibili.com/video/BV12z421z75d/?spm_id_from=333.1007.tianma.2-1-4.click&vd_source=4b1ef23e5d47e143cfb702705740719d
指定url
打开开发者控制台,找到页面的url:
url = "https://www.bilibili.com/video/BV12z421z75d/?spm_id_from=333.1007.tianma.2-1-4.click&vd_source=4b1ef23e5d47e143cfb702705740719d"
发送请求
在前前面的内容中,我们提到过,使用fake_useragent包进行UA伪装给自己一个访问身份,其实在页面中有给我们准备好的UA,只是使用fake_useragent包更方便,这次我们爬取视频,用页面给的UA。
UA伪装
同时,对于视频的爬取,网站都是有很强的反爬取能力,所以我们除此以外还需要在申请访问页面时,输入Referer防盗链以及Cookie身份信息(记得登录网站哦!),

和找寻url时一样,在同一个页面往下滑就能找到页面给的Cookie身份信息。
接着往下滑:

同样的,找到Referer防盗链和页面给的UA。
head = {"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 Edg/126.0.0.0"# 防盗链, "Referer": "https://www.bilibili.com/" # 网页自带的防盗链,我们告诉它从哪里向网页发送的请求,"Cookie": "buvid3=C05B40CB-6A34-98BA-39D6-53A15FB1331D09014infoc; b_nut=1721443209; b_lsid=7E252C23_190CE02D1EA; bsource=search_bing; _uuid=2A4DF7DB-1415-18110-810D10-61B6E716441309713infoc; enable_web_push=DISABLE; header_theme_version=undefined; bmg_af_switch=1; bmg_src_def_domain=i1.hdslb.com; buvid_fp=4737552723e0dc057e8798fde01861bc; buvid4=8B3D0C60-C137-8D41-1DA5-4FB60839F89009729-024072002-402qiK5%2F0O1ew%2BiXfV11Kg%3D%3D; home_feed_column=5; browser_resolution=1872-966; CURRENT_FNVAL=4048; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE3MDI0MjksImlhdCI6MTcyMTQ0MzE2OSwicGx0IjotMX0.rVZ9CiFYg3l5zrKtSm5jk880b2vYdADHdnTpO64kMog; bili_ticket_expires=1721702369; rpdid=|(J|)|~~|YYl0J'u~kuRRJkRu; SESSDATA=fd47394e%2C1736996380%2C3b724%2A71CjCpXPh-TmqNj96oUDW0altJZ6Iw84xOinBCAAhuZ1G-wxw0FFQR-j2_HvZPJtNgLl0SVmRDc2R6RWg3azBMUzVnVklNRGxBSGVXbWZiT2FydVNZVjM2MU1sQzkzQ3ZYMlNwLTdteUFQby0tWjlSaS1oWkVnbXVfRE8zOEd4VEFQbkNFNktMMVNRIIEC; bili_jct=643bc60a12be959fcaf2a7435e37b218; DedeUserID=152019087; DedeUserID__ckMd5=abf7b9e65385947c; sid=5voxt773"
} #自己的网页登录信息
将页面给的UA、Referer防盗链和Cookie身份信息都放在head中。
请求页面
response = requests.get(url, headers=head)
获取想要的数据
我们在爬取图片时,我们在寻找图片的地址,那我们视频的位置在哪里?怎么获取呐?

第一步点击Element,第二部找到html标签,在该标签下,找到第四个script标签。如下:

这里面就是我们要获取的视频信息啦,前20个字符不需要。
解析定位
from lxml import etree
tree = etree.HTML(res_text)
base_info = "".join(tree.xpath("/html/head/script[4]/text()"))[20:] #前20个字符我们不要
#print(base_info) #可以打印看看,有没有获取数据
我们看到,视频信息看到的是字典形式,但是获取信息时返回的是字符串形式,我们要将其转换一下:
info_dict = json.loads(base_info) #将获取到的数据变成字典形式
因为b站的视频,视频和音频时分开的,所以我们得从信息中分别定位到视频和音频位置。但是这个信息密密麻麻的看起来很不方便,我们去响应Response中寻找它:


打开响应Response,然后找到第四个script标签,我们能看到有个video标签,获取音频url,同样的在第四个script标签下面还有audio视频url。
定位音视频位置
这样我们对视频与音频的位置进行访问(记住!!获取的数据已经被转换成字典了!!):
#字典的取值是通过取健的位置得到值:
以下代码理解为:在data中取dash的值,然后再dash的值中取video的值………………最后取到音视频url
video_url = info_dict["data"]["dash"]['video'][0]["baseUrl"]
audio_url = info_dict["data"]["dash"]['audio'][0]["baseUrl"]video_content = requests.get(video_url, head).content #和图片一样,访问后用content接收存储
audio_content = requests.get(audio_url, head).content
存放视频
with open()可以自己创建文件存放。
with open("video.wmv", "wb") as f:f.write(video_content)
with open("audio.mp4", "wb") as fp:fp.write(audio_content)
完整代码实现
import json
import fake_useragent
import requests
from lxml import etreeif __name__ == '__main__':head = {"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 Edg/126.0.0.0"# 防盗链, "Referer": "https://www.bilibili.com/" # 网页自带的防盗链,我们告诉它从哪里向网页发送的请求,"Cookie": "buvid3=C05B40CB-6A34-98BA-39D6-53A15FB1331D09014infoc; b_nut=1721443209; b_lsid=7E252C23_190CE02D1EA; bsource=search_bing; _uuid=2A4DF7DB-1415-18110-810D10-61B6E716441309713infoc; enable_web_push=DISABLE; header_theme_version=undefined; bmg_af_switch=1; bmg_src_def_domain=i1.hdslb.com; buvid_fp=4737552723e0dc057e8798fde01861bc; buvid4=8B3D0C60-C137-8D41-1DA5-4FB60839F89009729-024072002-402qiK5%2F0O1ew%2BiXfV11Kg%3D%3D; home_feed_column=5; browser_resolution=1872-966; CURRENT_FNVAL=4048; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE3MDI0MjksImlhdCI6MTcyMTQ0MzE2OSwicGx0IjotMX0.rVZ9CiFYg3l5zrKtSm5jk880b2vYdADHdnTpO64kMog; bili_ticket_expires=1721702369; rpdid=|(J|)|~~|YYl0J'u~kuRRJkRu; SESSDATA=fd47394e%2C1736996380%2C3b724%2A71CjCpXPh-TmqNj96oUDW0altJZ6Iw84xOinBCAAhuZ1G-wxw0FFQR-j2_HvZPJtNgLl0SVmRDc2R6RWg3azBMUzVnVklNRGxBSGVXbWZiT2FydVNZVjM2MU1sQzkzQ3ZYMlNwLTdteUFQby0tWjlSaS1oWkVnbXVfRE8zOEd4VEFQbkNFNktMMVNRIIEC; bili_jct=643bc60a12be959fcaf2a7435e37b218; DedeUserID=152019087; DedeUserID__ckMd5=abf7b9e65385947c; sid=5voxt773"} #自己的网页登录信息# 1、urlurl = "https://www.bilibili.com/video/BV12z421z75d/?spm_id_from=333.1007.tianma.2-1-4.click&vd_source=4b1ef23e5d47e143cfb702705740719d"#2、发送请求response = requests.get(url, headers=head)# 3、获取想要的数据res_text = response.text# 4、数据解析tree = etree.HTML(res_text)with open("b.html", "w", encoding="utf8") as f:f.write(res_text)base_info = "".join(tree.xpath("/html/head/script[4]/text()"))[20:] #前20个字符我们不要# print(base_info)info_dict = json.loads(base_info) #将获取到的数据变成字典形式#定位音视频位置video_url = info_dict["data"]["dash"]['video'][0]["baseUrl"]audio_url = info_dict["data"]["dash"]['audio'][0]["baseUrl"]video_content = requests.get(video_url, head).contentaudio_content = requests.get(audio_url, head).contentwith open("video.wmv", "wb") as f:f.write(video_content)with open("audio.mp4", "wb") as fp:fp.write(audio_content)
爬取成功显示:

查看视频去文件夹中打开查看,由于音视频是分开的,可以通过剪映等视频剪辑软件将他们拼接在一起。
总结
本篇介绍了网页视频的爬取:
- 指定url
- 发送请求
- UA伪装:UA、Referer防盗链和Cookie身份信息都放在head中
- 获取你想要的数据
- 在Element获取视频信息
- 数据解析
- 在响应Response中,定位视频的具体位置,请求访问它
特别注意:
其实与爬取文本和图片区别不大,主要是定位到视频的位置。
网页都有反爬虫意识,反复多次爬取可能会拒绝你获取信息。
相关文章:
Python爬虫(5) --爬取网页视频
文章目录 爬虫爬取视频指定url发送请求UA伪装请求页面 获取想要的数据解析定位定位音视频位置 存放视频完整代码实现总结 爬虫 Python 爬虫是一种自动化工具,用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持(如 requ…...
【Unity】关于Luban的简单使用
最近看了下Luban导出Excel数据的方式,来记录下 【Unity】关于Luban的简单使用 安装Luban开始使用UnityLubanC# 扩展 安装Luban Luban文档:https://luban.doc.code-philosophy.com/docs/beginner/quickstart 1.安装dotnet sdk 8.0或更高版本sdk 2.githu…...
企业公户验证API如何使用JAVA、Python、PHP语言进行应用
在纷繁复杂的金融与商业领域,确保每笔交易的安全与合规是至关重要的。而企业公户验证API,正是这样一位默默守护的数字卫士,它通过智能化的手段,简化了企业对公账户验证流程,让繁琐的审核变得快捷且可靠。 什么是企业公…...
杰发科技Bootloader(2)—— 基于7840的Keil配置地址
序 在7840的sample代码里面有一个简单的Boot跳转APP的示例 PFlash地址从0开始 DFlash的地址从1000000开始 Boot解析 他的boot地址配置为0 Boot的代码主要是这几行,主要作用就是Flash的跳转 int main(void) {SystemClock_Config();InitDebug();printf("demo…...
cmd常用命令
在Windows操作系统中,CMD(Command Prompt)是一个强大的命令行工具,允许用户通过键入命令来执行各种系统级操作。以下是一些常用的CMD命令及其功能: 文件与目录管理 dir:显示当前目录下的文件和子目录列表。…...
PCIe 以太网芯片 RTL8125B 的 spec 和 Linux driver 分析备忘
1,下载 RTL8125B driver 下载页: https://www.realtek.com/Download/List?cate_id584 2,RTL8125B datasheet下载 下载页: https://file.elecfans.com/web2/M00/44/D8/poYBAGKHVriAHnfWADAT6T6hjVk715.pdf3, 编译driver 解压: $ tar xj…...
Python tkinter Menu菜单组件详解
好久没有更新了,今天我来领大家熟悉一下Menu组件 1.认识、了解Menu 什么是Menu menu组件是tkinter中的菜单组件,通过该组件,开发者可以为窗口设计菜单和工具栏等。(ttk还提供了treeview树形菜单,python遍历目录的两种…...
谷粒商城实战笔记-46-商品服务-API-三级分类-配置网关路由与路径重写
文章目录 一,准备工作1,新增一级菜单2,新增二级菜单 二,前端树形界面开发1,开发分类展示组件 三,远程调用接口获取商品分类数据1,远程调用2,路由配置 错误记录 本节的主要内容&#…...
简要了解sql注入
sql注入安全测试中危害 数据库中的数据,对数据库数据进行操作(查询、删除等);网站的权限,找到注入点后可后门写入; sql注入产生原理详细分析 可控变量,带入数据库查询,变量未存在…...
Java 扫雷游戏
程序分析 使用Java编写的扫雷游戏界面程序,主要内容总结如下: Frame类继承自JFrame,构建了扫雷游戏的界面。 包含文本框text、标签nowBomb和setBomb、按钮start、面板MenuPamel和bombPanel等组件。通过jbInit方法进行初始化设置,…...
vue3 命令运行窗口暴露网络地址,以及修改端口号
一般情况下这里的地址是隐藏的 这里加上 --host 可以暴露网络地址,再加上--port --8080 就可以将端口号修改为8080(修改后边的数字就可以修改为你想要的端口号)...
由CANoe自带协议栈在TCP断开连接时同时发送两条FIN报文引起的注意事项
在我写这篇文章CAPL如何在底层模拟TCP Server端断开TCP连接时,我发现了一个奇怪的现象。我为了使用CAPL组装报文的方式实现TCP Server断开连接的过程,插入一个网络节点作为Client端。为了让Client能够发起连接和发起断开连接,给网络节点配置了独立的TCP/IP Stack,也就是CAN…...
FastGPT部署和接入使用重排模型bce-reranker-base
bce-reranker简介 bce-reranker 是一种专门用于信息检索和自然语言处理领域中的重排序(reranking)模型。这种模型由北京智源人工智能研究院(BAAI)开发,是 BGE(BAAI General Embedding)系列的一部分。BGE 系列模型专注于提供通用的嵌入表示,而 bce-reranker 则更进一步…...
Android笔试面试题AI答之线程Handler、Thread(2)
答案仅供参考,来自 讯飞星火大模型 目录 1.Android多线程间通信和多进程之间通信有什么不同,分别怎么实现?2.请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系?3.Android 线程间通信有哪几种方式?4.子线程发消息…...
某某物联rabbitmqhttp二轮充电桩协议充电协议对接
对接方式概述: 1)请求采用 http 协议方式,推送数据采用 amqp(默认 rabbitmq)点对点消息队 列方式。 2)消息队列连接信息,需贵方完善。 1 hostIp: 2 virtualHost: 3 userName: 4 pass…...
黑马JavaWeb企业级开发(知识清单)03——HTML实现正文:排版(音视频、换行、段落)、布局标签(div、span)、盒子模型
文章目录 前言一、正文排版1. 视频标签: < video >2. 音频标签: < audio >3. 换行标签: < br >4. 段落标签 < p >5. vscode实现 二、布局1. 盒子模型2. 布局标签< div >和< span >3. VScode实现 三、源代码和运行结果总结 前言 本篇文章是…...
Java | Leetcode Java题解之第283题移动零
题目: 题解: class Solution {public void moveZeroes(int[] nums) {int n nums.length, left 0, right 0;while (right < n) {if (nums[right] ! 0) {swap(nums, left, right);left;}right;}}public void swap(int[] nums, int left, int right)…...
Django REST Framework(十三)视图集-GenericViewSet
Django REST Framework 中,ModelViewSet 和 ReadOnlyModelViewSet 提供了快速实现常见视图操作的便捷方法。它们分别继承自 GenericViewSet 并组合了多个 Mixin 类,使得视图的编写变得更加简单。 ModelViewSet ModelViewSet 继承自 GenericViewSet&…...
《0基础》学习Python——第二十四讲__爬虫/<7>深度爬取
一、深度爬取 深度爬取是指在网络爬虫中,获取网页上的所有链接并递归地访问这些链接,以获取更深层次的页面数据。 通常,一个简单的爬虫只会获取到初始页面上的链接,并不会进一步访问这些链接上的其他页面。而深度爬取则会不断地获…...
Python Pygame制作简单五子棋游戏
代码参考自:https://blog.csdn.net/weixin_43918046/article/details/119521845 新增功能:1任意棋盘大小;2.任意棋子连线 # 棋盘大小 [670, 670] # 棋盘行列 15*15 import pygame from pygame.locals import QUIT, KEYDOWN import numpy as…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
