使用Python实现视频封面批量下载器_python_脚本之家

使用Python实现视频封面批量下载器

 更新时间:2024年04月30日 14:04:05   作者:winfredzhang  
在视频网站上,每个视频都有一个独特的封面图像,本文主要为大家详细如何使用Python编写一个视频封面批量下载器,感兴趣的小伙伴可以跟随小编一起学习一下

简介

在视频网站上,每个视频都有一个独特的封面图像,它们通常是吸引人的缩略图,用于代表视频内容。有时候,我们可能需要批量下载许多视频的封面图像,以进行进一步的分析或使用。本篇博客将介绍如何使用Python编写一个视频封面批量下载器,使用wxPython图形用户界面库来提供交互界面,以及使用requests和BeautifulSoup库来进行网络请求和HTML解析。

C:\pythoncode\new\youtube-dlcoverbatch.py

步骤

1. 导入所需的库:

   - wxPython:用于创建图形用户界面。

   - requests:用于发送HTTP请求。

   - BeautifulSoup:用于解析HTML内容。

2. 创建一个DownloadCoverFrame类,继承自wx.Frame类,作为主窗口。

   - 设置窗口的大小和标题。

   - 创建一个面板(panel)并将其添加到窗口中。

   - 添加封面保存路径的控件,包括一个文本框和一个选择路径的按钮。

   - 添加URL输入的控件,包括一个文本框和一个添加URL的按钮。

   - 添加一个URL列表框,用于显示已添加的URL。

   - 添加一个批量下载按钮,用于触发封面的批量下载操作。

3. 实现事件处理方法:

   - on_select_save_path:处理选择路径按钮的点击事件,打开一个目录选择对话框,让用户选择保存封面的路径。

   - on_add_url_button:处理添加URL按钮的点击事件,将输入的URL添加到URL列表框中。

   - on_download_button:处理批量下载按钮的点击事件,获取保存路径和URL列表,遍历URL列表,依次下载封面图像并保存到指定路径。

4. 使用BeautifulSoup解析HTML内容:

   - 对于每个URL,发送HTTP请求获取页面内容。

   - 使用BeautifulSoup解析页面内容,找到封面图像的URL。

   - 构造保存路径和文件名。

   - 使用requests库下载封面图像并保存到指定路径。

5. 显示结果:

   - 使用wxPython的弹窗对话框显示下载结果,包括成功或失败的消息提示。

完整代码

import wx
import requests
from bs4 import BeautifulSoup
import os
import datetime
import random
 
class DownloadCoverFrame(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(400, 300))
 
        self.panel = wx.Panel(self)
 
        # Save path controls
        save_path_label = wx.StaticText(self.panel, label="封面保存路径:")
        self.save_path_text = wx.TextCtrl(self.panel)
        self.save_path_button = wx.Button(self.panel, label="选择路径")
        self.save_path_button.Bind(wx.EVT_BUTTON, self.on_select_save_path)
 
        # URL entry controls
        url_label = wx.StaticText(self.panel, label="YouTube 视频 URL:")
        self.url_text = wx.TextCtrl(self.panel)
        add_url_button = wx.Button(self.panel, label="添加 URL")
        add_url_button.Bind(wx.EVT_BUTTON, self.on_add_url_button)
 
        # URL list control
        url_list_label = wx.StaticText(self.panel, label="URL 列表:")
        self.url_listbox = wx.ListBox(self.panel)
 
        # Download button
        download_button = wx.Button(self.panel, label="批量下载封面")
        download_button.Bind(wx.EVT_BUTTON, self.on_download_button)
 
        # Sizer
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(save_path_label, 0, wx.ALL, 5)
        sizer.Add(self.save_path_text, 0, wx.ALL | wx.EXPAND, 5)
        sizer.Add(self.save_path_button, 0, wx.ALL | wx.CENTER, 5)
        sizer.Add(url_label, 0, wx.ALL, 5)
        sizer.Add(self.url_text, 0, wx.ALL | wx.EXPAND, 5)
        sizer.Add(add_url_button, 0, wx.ALL | wx.CENTER, 5)
        sizer.Add(url_list_label, 0, wx.ALL, 5)
        sizer.Add(self.url_listbox, 1, wx.ALL | wx.EXPAND, 5)
        sizer.Add(download_button, 0, wx.ALL | wx.CENTER, 5)
 
        self.panel.SetSizer(sizer)
 
    def on_select_save_path(self, event):
        dialog = wx.DirDialog(self.panel, "选择封面保存路径")
        if dialog.ShowModal() == wx.ID_OK:
            save_path = dialog.GetPath()
            self.save_path_text.SetValue(save_path)
        dialog.Destroy()
 
    def on_add_url_button(self, event):
        url = self.url_text.GetValue().strip()
        if url:
            self.url_listbox.Append(url)
            self.url_text.Clear()
 
    def on_download_button(self, event):
        save_path = self.save_path_text.GetValue()
        if not os.path.exists(save_path):
            wx.MessageBox("保存路径不存在", "错误", wx.OK | wx.ICON_ERROR)
            return
 
        urls = self.url_listbox.GetStrings()
        if not urls:
            wx.MessageBox("URL 列表为空", "错误", wx.OK | wx.ICON_ERROR)
            return
 
        try:
            # current_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")
           
            for url in urls:
                response = requests.get(url)
                soup = BeautifulSoup(response.content, "html.parser")
                cover_url = soup.find("meta", property="og:image")["content"]
                current_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + str(random.randint(100, 999))
                filename = os.path.join(save_path, f"{current_time}.jpg")
                with open(filename, "wb") as f:
                    f.write(requests.get(cover_url).content)
 
            wx.MessageBox("封面已批量下载到指定路径", "成功", wx.OK | wx.ICON_INFORMATION)
        except Exception as e:
            wx.MessageBox(f"下载封面失败:{e}", "错误", wx.OK | wx.ICON_ERROR)
 
if __name__ == "__main__":
    app = wx.App()
    frame = DownloadCoverFrame(None, "YouTube 视频封面下载器")
    frame.Show()
    app.MainLoop()

总结

本篇博客介绍了如何使用Python编写一个视频封面批量下载器。通过使用wxPython库创建图形用户界面,可以方便地输入URL并选择保存路径。同时,使用requests库发送HTTP请求和BeautifulSoup库解析HTML内容,可以提取封面图像的URL并进行下载。这个下载器可以帮助用户快速批量下载视频的封面图像,为后续的分析和使用提供便利。

到此这篇关于使用Python实现视频封面批量下载器的文章就介绍到这了,更多相关Python视频封面下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python用sndhdr模块识别音频格式详解

    Python用sndhdr模块识别音频格式详解

    这篇文章主要介绍了Python用sndhdr模块识别音频格式详解,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python内置函数anext的具体使用

    python内置函数anext的具体使用

    本文主要介绍了python内置函数anext的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 查看python下OpenCV版本的方法

    查看python下OpenCV版本的方法

    今天小编就为大家分享一篇查看python下OpenCV版本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Python3+django2.0+apache2+ubuntu14部署网站上线的方法

    Python3+django2.0+apache2+ubuntu14部署网站上线的方法

    这篇文章主要介绍了Python3+django2.0+apache2+ubuntu14部署网站上线的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Python发送网络请求(requests)

    Python发送网络请求(requests)

    这篇文章主要介绍了Python发送网络请求(requests),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python的进程间通信详解

    Python的进程间通信详解

    大家好,本篇文章主要讲的是Python的进程间通信详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • python可扩展的Blender 3D插件开发汇总

    python可扩展的Blender 3D插件开发汇总

    这篇文章主要为大家介绍了python可扩展的Blender 3D插件开发汇总,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Python五种下划线详解

    Python五种下划线详解

    这篇文章主要介绍了Python下划线5种含义实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • Python 图片视频模糊化实现案例

    Python 图片视频模糊化实现案例

    本文主要分享一个可以将图片或者视频模糊化的工具代码。技术路线主要是使用ffmpeg滤镜。感兴趣的小伙伴可以看一看
    2021-11-11
  • python编写一个会算账的脚本的示例代码

    python编写一个会算账的脚本的示例代码

    这篇文章主要介绍了python编写一个会算账的脚本,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论