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

简介:
在视频网站上,每个视频都有一个独特的封面图像,它们通常是吸引人的缩略图,用于代表视频内容。有时候,我们可能需要批量下载许多视频的封面图像,以进行进一步的分析或使用。本篇博客将介绍如何使用Python编写一个YouTube视频封面批量下载器,使用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的弹窗对话框显示下载结果,包括成功或失败的消息提示。

6.完整代码:

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并进行下载。这个下载器可以帮助用户快速批量下载YouTube视频的封面图像,为后续的分析和使用提供便利。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值