爬取某平台视频



前言

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

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


一、大致内容

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


二、基本思路

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

三、代码编写

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

1.引入库

# 用来请求网页
import requests

# 用来解析网页
from selenium import webdriver

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

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

2.前期准备

代码如下:

# 创建一个对象实例,用来表示用哪个浏览器爬取
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()

主要讲一下下半部分代码的的作用吧,请看下图(通过检查元素获取其位置,然后用代码定位进行操作):
Python 爬虫之下载视频(一)-LMLPHP


3.获取视频标题和地址

# 获取视频地址所在的位置
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 ,然后接着下图操作:
    Python 爬虫之下载视频(一)-LMLPHP

  2. 获取视频标题。
    Python 爬虫之下载视频(一)-LMLPHP


3.下载保存视频

# 发送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 版本的环境,注意哦要不然程序可能运行不起来。

12-21 09:08