Python 视频爬取教程

devtools/2025/3/18 17:43:08/

文章目录

  • 前言
  • 基本原理
  • 环境准备
  • 示例 1:爬取简单直链视频
  • 示例 2:爬取基于 HTML5 的视频(以某简单视频网站为例)


前言

以下是一个较为完整的 Python 视频爬取教程,包含基本原理、不同网站的爬取示例以及注意事项。


基本原理

视频爬取本质上是模拟浏览器向服务器发送请求,获取包含视频信息的网页内容,解析出视频的真实下载地址,然后将视频文件下载到本地。一般会用到requests库来发送请求,BeautifulSoup或lxml库来解析网页内容。

环境准备

Python_17">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_26">选择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 视频爬取的基本方法。在实际应用中,需要根据具体网站的特点进行调整。

http://www.ppmy.cn/devtools/168116.html

相关文章

vue3vue-elementPlus-admin框架中form组件的upload写法

dialog中write组件代码 let ImageList reactive<UploadFile[]>([])const formSchema reactive<FormSchema[]>([{field: ImageFiles,label: 现场图片,component: Upload,colProps: { span: 24 },componentProps: {limit: 5,action: PATH_URL /upload,headers: {…

游戏引擎学习第161天

回顾并计划今天的工作 我们从头开始编写一款完整的游戏&#xff0c;完全不依赖游戏引擎和库。我们会从最基本的渲染代码开始&#xff0c;一直到高层的AI代码&#xff0c;涵盖其中的一切。 目前&#xff0c;我们正在做一些比较轻松有趣的事情&#xff0c;可以说是比较随意的内…

php开发转go的学习计划及课程资料信息

以下是为该课程体系整理的配套教材和教程资源清单,包含书籍、视频、官方文档和实战项目资源,帮助你系统化学习: Go语言学习教材推荐(PHP开发者适配版) 一、核心教材(按学习阶段分类) 1. 基础语法阶段(阶段一) 资源类型名称推荐理由链接/获取方式官方教程Go语言之旅交…

AI日报 - 2025年3月18日

AI日报 - 2025年3月18日 &#x1f31f; 今日概览&#xff08;60秒速览&#xff09; ▎&#x1f916; AGI突破 | SOO微调技术减少语言模型欺骗行为10倍 创新对齐技术为更安全AI铺路 ▎&#x1f4bc; 商业动向 | Figure推出全球最高产量人形机器人生产线BotQ 年产1.2万台&#x…

简单以太网配置

display arp //查看路由器mac地址 交换机配置命令&#xff1a; system-view // 从用户视图进入系统视图 dis mac-address //查看mac地址表 路由器配置命令: system-view // 从用户视图进入系统视图 int GigabitEthernet 0/0/0 //进入G口 0/0/0 进入之后配置网关: ip addre…

十分钟学会Git

Git 和SVN 的区别&#xff1a; 架构模式&#xff1a; Git 是分布式版本控制系统&#xff0c;每个开发者的本地仓库都包含完整的历史记录&#xff0c;可以离线操作&#xff1b;而 SVN 是集中式版本控制系统&#xff0c;所有版本数据集中存放在中央服务器上&#xff0c;操作大多依…

MyBatis SqlSession 是如何创建的? 它与 SqlSessionFactory 有什么关系?

SqlSession 是 MyBatis 中与数据库交互的核心接口&#xff0c;它提供了执行 SQL 语句、管理事务、获取 Mapper 接口代理对象等关键功能。 SqlSession 实例 不是直接通过 new 关键字创建的&#xff0c;而是通过 SqlSessionFactory 工厂来创建的。 SqlSessionFactory 负责创建 Sq…

从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一 从打光到材质 细嚼慢咽逐条读代码系列

写在篇前的话 作为一个曾经在代码堆里面苦苦挣扎的萌新,困惑的事情在于库,各种依赖,包换文件,链接库,纠结于代码的作用意义。尤其在3D引擎开发的问题上,很多人都被各种困难给阻拦,放弃了在3D渲染,3D游戏引擎上大涨鸿图的机会。 当然关于3D游戏引擎的教程已经汗牛充栋…