今天写个从好K视频平台爬取正在播放的视频,并下载保存到本地。
注意:建议大家先看看我之前的比较简单的基础教程文章,要不可能看起来会有点费劲哦。
通过用户输入某个视频的地址,然后程序会根据这个地址,自动获取视频的标题和下载视频,并将标题命名为视频文件的名称。
注意:仅限该平台哦。
下面所用到的库,记得先用pip等命令安装一下哈。
代码如下:
# 用来请求网页
import requests
# 用来解析网页
from selenium import webdriver
# 用来定位某个元素在网页中的位置
from selenium.webdriver.common.by import By
# 用来记录时间或者短暂等待
import time
代码如下:
# 创建一个对象实例,用来表示用哪个浏览器爬取
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()
主要讲一下下半部分代码的的作用吧,请看下图(通过检查元素获取其位置,然后用代码定位进行操作):
代码如下:
# 获取视频地址所在的位置
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')
下面我用图片给大家解释吧,这样大家容易理解一点。
获取视频下载地址,首先各位先复制上面代码 art-video ,然后接着下图操作:
获取视频标题。
代码如下:
# 发送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 版本的环境,注意哦要不然程序可能运行不起来。