Python 视频爬取教程

news2025/3/18 11:34:59

文章目录

  • 前言
  • 基本原理
  • 环境准备
    • 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 requests

def 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 BeautifulSoup

def 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_url
    except requests.RequestException as e:
        print(f"请求失败:{e}")
    return None

def 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 re

def get_douyin_video_url(share_url):
    try:
        # 发送请求,获取重定向后的 URL
        response = requests.get(share_url, allow_redirects=True)
        response.raise_for_status()

        # 使用正则表达式提取视频 ID
        video_id_pattern = re.compile(r'video/(\d+)')
        match = video_id_pattern.search(response.url)
        if match:
            video_id = match.group(1)
            # 构造视频 API 请求 URL
            api_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_url
    except requests.RequestException as e:
        print(f"请求失败:{e}")
    return None

def 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.coloradmin.cn/o/2317195.html

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

相关文章

从Instagram到画廊:社交平台如何改变艺术家的展示方式

从Instagram到画廊:社交平台如何改变艺术家的展示方式 在数字时代,艺术家的展示方式正在经历一场革命。社交平台,尤其是Instagram,已经成为艺术家展示作品、与观众互动和建立品牌的重要渠道。本文将探讨社交平台如何改变艺术家的…

✎ 一次有趣的经历

📆2025年3月17日 | 周一 | ☀️晴 📍今天路过学院楼7,见到了满园盛开的花🌺,心情瞬间明朗! 📌希望接下来的日子也能像这些花一样,充满活力🔥! &#x1…

快!快!快!NDPP时延测试数据公布!

在全方位认识NDPP第3期《NDPP在金融场景的应用》中,我们重点介绍了NDPP的典型应用场景行情解码硬件加速和策略计算加速,并帮助某百亿私募用户基于NDPP实现期货业务加速的案例。 近期,中科驭数凭借低时延产品荣获信创“大比武”行业融合赛道三…

激光雷达“开卷”2.0,头部Tier1入局

高阶智驾的普及,正在催生激光雷达市场的巨大潜在增长空间。 本周,汽车激光雷达主力供应商之一的禾赛科技发布财报,去年第四季度激光雷达总交付量为222,054台,同比增长153.1%,超过2023年全年。2024全年激光雷达总交付量…

力扣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…

C语言中qsort函数的详解,以及模拟

引言 C语言中qsort函数的详解和模拟实现qsort函数&#xff0c;这里为了使用冒泡排序来模拟qsort函数 一、详解qsort函数 在 C 语言中&#xff0c;qsort 函数是一个标准库函数&#xff0c;用于对数组进行快速排序&#xff08;Quick Sort&#xff09;。它位于 <stdlib.h>…

9、讲一讲你理解的虚拟内存【中高频】

计算机早期&#xff0c;CPU 是直接操作 物理内存&#xff08;Physical Memory&#xff09;的&#xff0c;但这会导致 内存空间无法完全隔离&#xff0c;一个程序修改了另一个程序的地址空间&#xff0c;就会导致程序崩溃&#xff1b;同时物理内存大小有限&#xff0c;一旦超出这…

算法刷题整理合集(四)

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…

高数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. 概述 定时器&#xff0c;顾名思义就是用来计时的&#xff0c;我们常常会设定计时或闹钟…

Power Apps 技术分享:画布应用使用表单控件

前言 表单控件&#xff0c;是画布应用里一个非常好用的控件&#xff0c;我们今天简单介绍下&#xff0c;如何使用这个控件。 正文 1.首先&#xff0c;我们需要有一个数据源&#xff0c;我们这里用上一篇博客新建的数据源&#xff0c;如下图&#xff1a; 2.新建一个页面&#xf…

【数据库】Data Model(数据模型)数据模型分析

理解图片中的 Data Model&#xff08;数据模型&#xff09;是学习数据库设计和应用程序开发的重要一步。作为初学者&#xff0c;你可以通过比喻和简单的解释来理解这些概念以及它们之间的联系。以下是对图片中数据模型的详细分析&#xff0c;以及如何理解它们之间的关系。 1. 数…

【Unity】 HTFramework框架(六十二)Agent编辑器通用智能体(AI Agent)

更新日期&#xff1a;2025年3月14日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 编辑器通用智能体AIAgent类Friday&#xff08;星期五&#xff09;启用智能体设置智能体类型开放智能体权限智能体交互资源优化批处理运行代码联网搜索休闲…

学习笔记:黑马程序员JavaWeb开发教程(2025.3.17)

11.5 案例-文件上传-阿里云OSS-入门 出现报错&#xff1a;Process exited with an error: 1 (Exit value: 1)&#xff0c;点击exec那一行&#xff0c;出现错误原因&#xff1a;Command execution failed. 在CSDN上找到了解决方法&#xff1a; 之后出现新的报错&…

仿最美博客POETIZE(简易版)

写在前面 本文章参考于两个开源项目分别为&#xff1a;POETIZE-最美博客&#xff0c;拾壹博客 如有侵权&#xff0c;请联系删除 正题 此页面为拾壹博客修改而成&#xff0c;采用了POETIZE的布局以及背景图片&#xff0c;技术栈:SpringbootVue&#xff0c;主要涉及页面为网站…

STM32——独立看门狗(IWDG)

IWDG 简介 独立看门狗本质上是一个 定时器 &#xff0c;这个定时器有一个输出端&#xff0c;可以输出复位信号。该定时器是一个 12 位的递减计数器 &#xff0c;当计数器的值减到 0 的时候&#xff0c;就会产生一个复位信号。如果 在计 数没减到 0 之前&#xff0c;重置计…

C++11智能指针简述

一、实现原理 在智能指针对象中有一个裸指针&#xff0c;此指针存储的是动态创建对象的地址&#xff0c;用于生存期控制&#xff0c;能够确保智能指针对象离开所在作用域时&#xff0c;自动正确地销毁动态创建的对象&#xff0c;防止内存泄漏。 使用裸指针存在的问题&#xff…

Linux操作系统实验报告单(3)文本编辑器vi/vim

一、实验目的 掌握vi/vim编辑器的进入和退出方式了解vi/vim的三种模式熟练vi/vim的操作命令 二、实验内容 1.在家目录下新建一个名为“vitest_name”&#xff08;“name”为学生姓名拼音&#xff09;的目录。 ●创建用户目录命令&#xff1a;sudo mkdir /home/vitest_lw3613 …

Centos固定IP配置

虚拟机安装 安装vmware 网盘链接 安装centos7.5 网盘链接 安装教程自行查找 固定IP配置 对安装好的VMware进行网络配置&#xff0c;方便虚拟机连接网络&#xff0c;本次设置建议选择NAT模式&#xff0c;需要宿主机的Windows和虚拟机的Linux能够进行网络连接&#xff0c;…

二叉树算法题实战:从遍历到子树判断

目录 一、引言 二、判断两棵二叉树是否相同 思路 代码实现 注意点 三、二叉树的中序遍历 思路 代码实现 注意点 四、判断一棵树是否为另一棵树的子树 思路 代码实现 注意点 ​编辑 五、补充 一、引言 作者主页&#xff1a;共享家9527-CSDN博客 作者代码仓库&am…