Python 视频爬取教程
文章目录
- 前言
- 基本原理
- 环境准备
- Python安装
- 选择Python开发环境
- 安装必要库
- 示例 1:爬取简单直链视频
- 示例 2:爬取基于 HTML5 的视频(以某简单视频网站为例)
前言
以下是一个较为完整的 Python 视频爬取教程,包含基本原理、不同网站的爬取示例以及注意事项。
基本原理
视频爬取本质上是模拟浏览器向服务器发送请求,获取包含视频信息的网页内容,解析出视频的真实下载地址,然后将视频文件下载到本地。一般会用到requests库来发送请求,BeautifulSoup或lxml库来解析网页内容。
环境准备
Python安装
访问 Python 官方网站,根据你的操作系统(Windows、Mac 或 Linux)下载并安装 Python 3.x 版本。安装时勾选 “Add Python to PATH”,方便在命令行中使用 Python。
Python 3.11安装教程:https://blog.csdn.net/u014164303/article/details/145549489
Python 3.13安装教程:https://blog.csdn.net/u014164303/article/details/146024500
Python 3.11下载地址:https://pan.quark.cn/s/9c44793cb24c
Python 3.13下载地址:https://pan.quark.cn/s/bce37ebd7f70
选择Python开发环境
PyCharm 社区版(免费)或专业版(需付费或申请教育版)。安装完成后,打开 PyCharm,创建一个新的项目,在项目设置中选择之前创建的虚拟环境作为项目的 Python 解释器。PyCharm 功能强大,提供代码自动补全、调试等功能,适合开发大型项目。
Pycharm安装教程:https://blog.csdn.net/u014164303/article/details/145674773
PyCharm下载地址:https://pan.quark.cn/s/5756c8cf8b2a
安装必要库
在开始之前,需要安装必要的 Python 库。可以使用以下命令进行安装:
pip install requests beautifulsoup4 lxml
示例 1:爬取简单直链视频
有些网站会直接提供视频的下载链接,对于这类视频,爬取过程相对简单。以下是一个示例代码:
import requestsdef download_video(url, save_path):try:# 发送请求,获取视频内容response = requests.get(url, stream=True)response.raise_for_status()# 以二进制写入模式打开文件with open(save_path, 'wb') as file:for chunk in response.iter_content(chunk_size=8192):if chunk:file.write(chunk)print(f"视频下载成功,保存路径:{save_path}")except requests.RequestException as e:print(f"下载失败:{e}")# 视频的直接下载链接
video_url = "https://example.com/video.mp4"
# 保存视频的本地路径
save_path = "video.mp4"download_video(video_url, save_path)
示例 2:爬取基于 HTML5 的视频(以某简单视频网站为例)
有些网站使用 HTML5 的标签来播放视频,我们可以通过解析网页内容获取视频的真实地址。
import requests
from bs4 import BeautifulSoupdef get_video_url(url):try:# 发送请求,获取网页内容response = requests.get(url)response.raise_for_status()# 使用 BeautifulSoup 解析网页soup = BeautifulSoup(response.text, 'lxml')# 查找 video 标签video_tag = soup.find('video')if video_tag:# 获取视频的 src 属性video_url = video_tag.get('src')if video_url:if not video_url.startswith('http'):# 处理相对路径base_url = url.rsplit('/', 1)[0]video_url = f"{base_url}/{video_url}"return video_urlexcept requests.RequestException as e:print(f"请求失败:{e}")return Nonedef download_video(url, save_path):try:response = requests.get(url, stream=True)response.raise_for_status()with open(save_path, 'wb') as file:for chunk in response.iter_content(chunk_size=8192):if chunk:file.write(chunk)print(f"视频下载成功,保存路径:{save_path}")except requests.RequestException as e:print(f"下载失败:{e}")# 视频网页的 URL
web_url = "https://example.com/video_page.html"
# 获取视频的真实下载地址
video_url = get_video_url(web_url)
if video_url:save_path = "video.mp4"download_video(video_url, save_path)
示例 3:爬取短视频平台视频(以抖音为例)
抖音的视频爬取相对复杂,因为其采用了加密和反爬机制。以下是一个简单的示例:
python
import requests
import redef get_douyin_video_url(share_url):try:# 发送请求,获取重定向后的 URLresponse = requests.get(share_url, allow_redirects=True)response.raise_for_status()# 使用正则表达式提取视频 IDvideo_id_pattern = re.compile(r'video/(\d+)')match = video_id_pattern.search(response.url)if match:video_id = match.group(1)# 构造视频 API 请求 URLapi_url = f"https://www.iesdouyin.com/web/api/v2/video/playwm/?video_id={video_id}"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}# 发送 API 请求,获取视频信息api_response = requests.get(api_url, headers=headers)api_response.raise_for_status()data = api_response.json()if 'video' in data and 'play_addr' in data['video'] and 'url_list' in data['video']['play_addr']:video_url = data['video']['play_addr']['url_list'][0]# 去除水印video_url = video_url.replace("playwm", "play")return video_urlexcept requests.RequestException as e:print(f"请求失败:{e}")return Nonedef download_video(url, save_path):try:response = requests.get(url, stream=True)response.raise_for_status()with open(save_path, 'wb') as file:for chunk in response.iter_content(chunk_size=8192):if chunk:file.write(chunk)print(f"视频下载成功,保存路径:{save_path}")except requests.RequestException as e:print(f"下载失败:{e}")# 抖音视频的分享链接
share_url = "https://v.douyin.com/xxxxxx/"
# 获取视频的真实下载地址
video_url = get_douyin_video_url(share_url)
if video_url:save_path = "douyin_video.mp4"download_video(video_url, save_path)
注意事项
- 遵守法律法规:在进行视频爬取时,必须遵守相关法律法规和网站的使用条款,不得进行非法爬取和传播。
- 反爬机制:许多网站都有反爬机制,如 IP 封禁、验证码等。可以使用代理 IP、设置合理的请求头和请求间隔时间来绕过反爬机制。
- 版权问题:确保下载的视频具有合法的使用权限,避免侵犯他人的版权。
通过以上教程,你可以了解到不同场景下 Python 视频爬取的基本方法。在实际应用中,需要根据具体网站的特点进行调整。
相关文章:
Python 视频爬取教程
文章目录 前言基本原理环境准备Python安装选择Python开发环境安装必要库 示例 1:爬取简单直链视频示例 2:爬取基于 HTML5 的视频(以某简单视频网站为例) 前言 以下是一个较为完整的 Python 视频爬取教程,包含基本原理…...
NumPy系列 - 创建矩阵
目录 前传直接创建数组就只是创建数组1. np.array()2. np.arange()3. np.ones()4. numpy.ones_like()5. np.zeros()6. numpy.zeros_like() 定义数据类型 参考资料 前传 由于,某人在上智能相关课程的时候,总想着一大堆的事情,统计股市涨跌&am…...
从Instagram到画廊:社交平台如何改变艺术家的展示方式
从Instagram到画廊:社交平台如何改变艺术家的展示方式 在数字时代,艺术家的展示方式正在经历一场革命。社交平台,尤其是Instagram,已经成为艺术家展示作品、与观众互动和建立品牌的重要渠道。本文将探讨社交平台如何改变艺术家的…...
谈谈 TypeScript 中的联合类型(union types)和交叉类型(intersection types),它们的应用场景是什么?
一、联合类型(Union Types) 核心概念 使用管道符 | 表示多选一关系,典型场景:处理可能存在多种类型的变量 // 基础示例:处理数值型ID(number)或哈希型ID(string) type…...
华为OD机试 - 最长的完全交替连续方波信号(Java 2023 B卷 200分)
题目描述 给定一串方波信号,要求找出其中最长的完全连续交替方波信号并输出。如果有多个相同长度的交替方波信号,输出任意一个即可。方波信号的高位用1标识,低位用0标识。 说明: 一个完整的信号一定以0开始并以0结尾,即010是一个完整的信号,但101,1010,0101不是。输入的…...
✎ 一次有趣的经历
📆2025年3月17日 | 周一 | ☀️晴 📍今天路过学院楼7,见到了满园盛开的花🌺,心情瞬间明朗! 📌希望接下来的日子也能像这些花一样,充满活力🔥! …...
【Spring】第二弹:通过反射机制初步理解 IoC
一、Java 反射机制 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机…...
快!快!快!NDPP时延测试数据公布!
在全方位认识NDPP第3期《NDPP在金融场景的应用》中,我们重点介绍了NDPP的典型应用场景行情解码硬件加速和策略计算加速,并帮助某百亿私募用户基于NDPP实现期货业务加速的案例。 近期,中科驭数凭借低时延产品荣获信创“大比武”行业融合赛道三…...
激光雷达“开卷”2.0,头部Tier1入局
高阶智驾的普及,正在催生激光雷达市场的巨大潜在增长空间。 本周,汽车激光雷达主力供应商之一的禾赛科技发布财报,去年第四季度激光雷达总交付量为222,054台,同比增长153.1%,超过2023年全年。2024全年激光雷达总交付量…...
STM32 - 在机器人领域,LL库相比HAL优势明显
在机器人控制器、电机控制器等领域的开发,需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以,大家常用的HAL库明显不符合要求。再加上,我们学习一门技术,一定要学会掌握底层的原理。MCU开发的底层就是寄存器…...
力扣No.376.摆动序列
题目: 链接: https://leetcode.cn/problems/wiggle-subsequence/description/ 代码: class Solution {public int wiggleMaxLength(int[] nums) {int nnums.length;//状态表示:int[] fnew int[n];int[] gnew int[n];//初始化:for(int i0;i…...
找工作、创业的思考和出路
最近有几位朋友在找工作,以及探索职场出路,与他们聊了一些关于找工作和职业发展的话题。而这些话题对大多数职场人来说,都是必须考虑和面对的问题。今天就基于这两个话题展开聊聊。 首先,初入职场时,工作是相对容易找…...
IP关联是什么?怎么避免?
在跨境电商的道路上,大家好!今天想和大家聊一聊一个非常重要的话题,那就是IP关联的问题。在商业活动中,了解如何避免IP关联对保护我们宝贵的商铺至关重要。接下来,我们将深入探讨IP关联的概念、影响及如何有效防止这一…...
C语言中qsort函数的详解,以及模拟
引言 C语言中qsort函数的详解和模拟实现qsort函数,这里为了使用冒泡排序来模拟qsort函数 一、详解qsort函数 在 C 语言中,qsort 函数是一个标准库函数,用于对数组进行快速排序(Quick Sort)。它位于 <stdlib.h>…...
9、讲一讲你理解的虚拟内存【中高频】
计算机早期,CPU 是直接操作 物理内存(Physical Memory)的,但这会导致 内存空间无法完全隔离,一个程序修改了另一个程序的地址空间,就会导致程序崩溃;同时物理内存大小有限,一旦超出这…...
算法刷题整理合集(四)
本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处,望各位可以在评论区指正出来…...
高数1.5 极限的运算法则
1. 预备知识 2.四则求极限法则 3.复合运算求极限法则...
【鸿蒙开发】Hi3861学习笔记- 定时器中断
00. 目录 文章目录 00. 目录01. 概述02. 定时器相关API2.1 hi_timer_create2.2 hi_timer_start2.3 hi_timer_stop2.4 hi_timer_delete 03. 硬件设计04. 软件设计05. 实验现象06. 附录 01. 概述 定时器,顾名思义就是用来计时的,我们常常会设定计时或闹钟…...
Spring Cloud Config 快速介绍与实例
Spring Cloud Config 是什么? Spring Cloud Config 是一个用于分布式系统的配置管理工具,提供集中化的外部配置支持。它适用于微服务架构,能够将各个服务的配置集中存储在服务端(如 Git 仓库),客户端按需动态获取配置,解决了配置分散、环境切换复杂等问题。 Spring Cl…...
Power Apps 技术分享:画布应用使用表单控件
前言 表单控件,是画布应用里一个非常好用的控件,我们今天简单介绍下,如何使用这个控件。 正文 1.首先,我们需要有一个数据源,我们这里用上一篇博客新建的数据源,如下图: 2.新建一个页面…...
【数据库】Data Model(数据模型)数据模型分析
理解图片中的 Data Model(数据模型)是学习数据库设计和应用程序开发的重要一步。作为初学者,你可以通过比喻和简单的解释来理解这些概念以及它们之间的联系。以下是对图片中数据模型的详细分析,以及如何理解它们之间的关系。 1. 数…...
【Unity】 HTFramework框架(六十二)Agent编辑器通用智能体(AI Agent)
更新日期:2025年3月14日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 编辑器通用智能体AIAgent类Friday(星期五)启用智能体设置智能体类型开放智能体权限智能体交互资源优化批处理运行代码联网搜索休闲…...
Elasticsearch 滚动索引(Rollover Index)详解
文章目录 1、滚动索引的作用2、滚动索引的用法2.1 核心概念2.2 实现步骤 3、适用场景4、与其他技术的结合使用5、案例:日志数据的滚动索引5.1 场景描述5.2 实现步骤 6、示例:结合索引生命周期管理(ILM)6.1 场景描述6.2 实现步骤 7…...
学习笔记:黑马程序员JavaWeb开发教程(2025.3.17)
11.5 案例-文件上传-阿里云OSS-入门 出现报错:Process exited with an error: 1 (Exit value: 1),点击exec那一行,出现错误原因:Command execution failed. 在CSDN上找到了解决方法: 之后出现新的报错&…...
python局部变量和全局变量
文章目录 1.局部变量和全局变量2.局部变量2.1 局部变量的作用2.2 局部变量的生命周期 3. 全局变量3.1 函数不能直接修改全局变量的引用3.2 在函数内部修改全局变量的值3.3 全局变量定义的位置3.4 全局变量命名的建议 1.局部变量和全局变量 (1)局部变量 …...
攻克 3D 模型网站建设难题,看迪威系统优势
在当今数字化时代,3D 模型广泛应用于建筑设计、游戏开发、工业制造、文化创意等诸多领域。拥有一个功能强大的 3D 模型网站,对于企业展示产品、设计师分享作品、教育机构开展教学等都具有重要意义。然而,构建这样一个网站却并非易事ÿ…...
仿最美博客POETIZE(简易版)
写在前面 本文章参考于两个开源项目分别为:POETIZE-最美博客,拾壹博客 如有侵权,请联系删除 正题 此页面为拾壹博客修改而成,采用了POETIZE的布局以及背景图片,技术栈:SpringbootVue,主要涉及页面为网站…...
vue/H5的日历组件可简单定制
在components创建riliZujian.vue <template><div class"max_box"><!-- 日历 文字 --><div class"month"><div click"lastMonth" class"monthText13">上月</div><div class"monthText2&q…...
STM32——独立看门狗(IWDG)
IWDG 简介 独立看门狗本质上是一个 定时器 ,这个定时器有一个输出端,可以输出复位信号。该定时器是一个 12 位的递减计数器 ,当计数器的值减到 0 的时候,就会产生一个复位信号。如果 在计 数没减到 0 之前,重置计…...
C++11智能指针简述
一、实现原理 在智能指针对象中有一个裸指针,此指针存储的是动态创建对象的地址,用于生存期控制,能够确保智能指针对象离开所在作用域时,自动正确地销毁动态创建的对象,防止内存泄漏。 使用裸指针存在的问题ÿ…...
