Python 爬虫之下载视频(一)

news/2024/7/19 12:17:51 标签: python, 爬虫, 音视频, 下载

爬取某平台视频


文章目录

  • 爬取某平台视频
  • 前言
  • 一、大致内容
  • 二、基本思路
  • 三、代码编写
    • 1.引入库
    • 2.前期准备
    • 3.获取视频标题和地址
    • 3.下载保存视频
  • 总结


前言

今天写个从好K视频平台爬取正在播放的视频,并下载保存到本地。

注意:建议大家先看看我之前的比较简单的基础教程文章,要不可能看起来会有点费劲哦。


一、大致内容

通过用户输入某个视频的地址,然后程序会根据这个地址,自动获取视频的标题和下载视频,并将标题命名为视频文件的名称。
注意:仅限该平台哦。


二、基本思路

  • 第一步:获取视频的网页地址。(需要手动获取输入)
  • 第二步:关闭每次打开弹出的登陆窗口,并获取视频的标题和下载地址。(程序自动执行)
  • 第三步,下载视频并以标题来命名下载的视频。(程序自动执行)

三、代码编写

下面所用到的库,记得先用pip等命令安装一下哈。

1.引入库

代码如下:

python"># 用来请求网页
import requests

# 用来解析网页
from selenium import webdriver

# 用来定位某个元素在网页中的位置
from selenium.webdriver.common.by import By

# 用来记录时间或者短暂等待
import time

2.前期准备

代码如下:

python"># 创建一个对象实例,用来表示用哪个浏览器爬取
driver = webdriver.Firefox()
# 某个视频的地址
driver.get("https://haokan.baidu.com/v?vid=7073936468876035706&tab=recommend")
# 等待一下,等打开网页
time.sleep(8)

# 页面打开会弹出一个登录窗口
close = driver.find_element(by=By.CSS_SELECTOR, value='.close-btn')
# 等登录窗口弹出来
time.sleep(5)
# 关闭弹出的登录窗口
close.click()

主要讲一下下半部分代码的的作用吧,请看下图(通过检查元素获取其位置,然后用代码定位进行操作):
在这里插入图片描述


3.获取视频标题和地址

代码如下:

python"># 获取视频地址所在的位置
video = driver.find_element(by=By.CSS_SELECTOR, value='.art-video')
# 获取到该视频地址
video_url = video.get_attribute('src')

# 获取视频的标题
video_name = driver.find_element(by=By.CSS_SELECTOR, value='.videoinfo-title')

下面我用图片给大家解释吧,这样大家容易理解一点。

  1. 获取视频下载地址,首先各位先复制上面代码 art-video ,然后接着下图操作:
    在这里插入图片描述

  2. 获取视频标题。
    在这里插入图片描述


3.下载保存视频

代码如下:

python"># 发送HEAD请求,我们可以获取到服务器返回的关于资源的一些元数据,例如内容类型、内容长度、最后修改日期等
response = requests.head(short_video_url)
# 获取视频的大小(以字节为单位)
content_length = response.headers.get('content-length')
print(content_length)

# 设置stream=True参数以流的方式下载
mp4 = requests.get(short_video_url, stream=True)
with open(f'{video_name.text}.mp4', 'wb') as f:
    # 写入文件时,使用(chunk_size=1024)这种方式按块读取和写入
    for chunk in mp4.iter_content(chunk_size=1024):
        f.write(chunk)

上半部分代码说的是,在不下载视频的前提下,如何去获取视频的内容类型、内容长度、最后修改日期等。

下半部分代码说的是,让视频以流的形式下载,而不是一整块下载保存;同时,按块的方式一点一点保存到视频文件中去。


总结

本人实测有效,可以下载下来。但是清晰度不能保证,因为我没有登陆哈哈哈哈哈。基本环境是Python 3.11.6 版本的环境,注意哦要不然程序可能运行不起来。


http://www.niftyadmin.cn/n/5277794.html

相关文章

java使用面向对象实现图书管理系统

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

feign-core

1.InvocationContext : invocation 调用,调用程序。InvocationContext:调用程序的上下文。 InvocationContext 这个类中有解码器,返回类型,响应三个变量。 主要作用为 decoder.decode(response, returnType); 对响应报文进行解…

dell服务器 R740xd安装windows server 2019过程记录

公司有两台dell服务器型号是R740xd,增加了存储,更新系统到windows server 2019标准版。 查找了网上的系统安装方式,都没有实践成功,做一下工作记录,给大家做参考。 网络搜索到的两种方式,进行安装 &#x…

【JAVA】重力反弹,反弹高次一次比一次低

本来是想实现泡泡屏保(javascript实现漂亮的气泡碰撞效果(Chrome浏览器下更佳) 下载-脚本之家)的,还未实现 当前运行,已经没有问题了,但是还是比较粗糙的: import javax.swing.*; import java.awt.*; import java.util.LinkedLi…

【影像组学入门百问】#32—#34

#32-影像组学研究过程中,图像重采样参 数怎么选择? 在影像组学研究过程中,选择合适的图像重采样参数对于保证分析质量和准确性至关重要。以下是在选择图像重采样参数时需要考虑的一些建议: 1.目标分辨率:首先&#…

测试测试测试测试测试测试测试测试测试测试

测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试

队列(C语言版)

一.队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有 先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾 出队列:进行删除操作的一端称为…

鸿蒙ArkTS语言介绍与TS基础语法

1、ArkTS介绍 ArkTS是HarmonyOS主力应用开发语言,它在TS基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等响应的能力,让开发者以更简洁、更自然的方式开发跨端应用。 JS 是一种属于网络的高级脚本语言,已经被广泛用…