博客
关于我
Python之Bilibili自动更新邮件提醒并任务栏图标「完整代码」
阅读量:531 次
发布时间:2019-03-07

本文共 3152 字,大约阅读时间需要 10 分钟。

Python自动检测B站Up主视频更新并发送邮件提醒

本文将详细介绍编写一个自动检测B站Up主视频更新情况并通过邮件提醒的Python程序开发过程及实现方法。

环境搭建

此项目基于以下环境进行开发:

  • 语言:Python 3.6
  • 开发工具:PyCharm
  • 依赖库
    • selenium
    • _thread
    • sys
    • time
    • re
    • os
    • beautifulsoup4
    • win32gui / win32con / win32api / winerror
    • email
    • smtplib
    • bs4

项目概述

本项目旨在通过自动化浏览器操作(使用Selenium工具),监控指定B站Up主的视频更新情况,并针对新增内容自动发送邮件提醒。本项目分为以下几个主要模块:

  • 网页访问与解析
  • 邮件发送功能
  • 任务栏图标创建
  • 多线程实现
  • 项目打包与发布
  • 网页访问与解析

    为了实现自动化浏览器操作,本项目采用了Selenium工具,这是一个功能强大的自动化测试框架,支持多种浏览器(如Firefox、PhantomJS等)。

    使用PhantomJS作为无头浏览器(可以避免图形界面),可以更轻松地执行网页解析和操作。

    代码示例(启动浏览器并访问网页):

    from selenium import webdriverfrom bs4 import BeautifulSoupdriver = webdriver.PhantomJS()driver.get(url)  # 需替换为实际的B站视频页面URLpage = driver.page_sourcesoup = BeautifulSoup(page, 'lxml')

    页面解析示例:

    通过对网页进行解析,可以提取出视频发布时间、标题、播放量等信息。利用BeautifulSoup等工具,结合CSS选择器等方式,可以精准抽取所需信息。

    示例提取代码:

    video_title = soup.select('div.video-info h1').textvideo_time = soup.select('div.video-time span').text

    邮件发送功能

    在邮件发送实现中,采用了smtplib库,支持通过第三方服务(如QQ邮箱)获取授权码,从而实现安全的邮件发送。以下为常用配置示例:

    QQ邮箱 SMTP 配置:

  • 登录电脑版QQ邮箱,进入设置 > 账户设置
  • 选择账户详情页面,获取POP3设置信息
  • 通过shortmessage API完成短信验证,获取验证码
  • 获取16位邮箱授权码,用于代替QQ密码进行邮件发送
  • 代码示例(发送邮件):

    import smtplibemail_sender = smtplib.SMTP('smtp.qq.com', 587)email_sender.login('sender@qq.com', 'your_pw')  # your_pw为邮箱授权码to_address = 'receiver@qq.com'  # 接收地址subject = 'B站视频更新提醒'content = f'新发布视频标题:{video_title}\n发布时间:{video_time}'email_sender.sendmail(    from_address='sender@qq.com',    to_address=to_address,    msg=f'From: {from_address}\nTo: {to_address}\nSubject: {subject}\n\n{content}')email_sender.close()

    任务栏图标创建

    为了方便用户查看程序状态,项目需创建任务栏图标。通过调用win32api等库,可以实现如下功能:

    • 左击图标隐藏窗口
    • 右击图标恢复窗口
    • 左双击图标退出程序

    代码示例(创建任务栏图标):

    import win32conimport win32guidef create tray_icon():    tray_menu = []    def onc_click():        win32gui.ShowWindow(none, 'hide')    def onc_dclick():        win32api_exit()    def onc_key_down(*args):        pass    tray_menu = [        ('&显示窗口', 'ShowWindow', 0, ' Burkssa'),        ('&恢复窗口', 'RestoreWindow'),        ('&退出程序', 'Exit')    ]    icon_path = 'draulicat Engineering\\python_tray_ico.ico'  # 替换为实际的图标路径    try:        traylep = win32gui.CreateTrayIcon(icon_path, 'python_tray_app')    except:        pass    win32gui.RegisterShellooks()    return traylep, tray_menu

    多线程实现

    为了解决任务栏图标与程序主逻辑相互 影响的问题,本项目采用了多线程技术。通过threading模块,可以实现以下功能:

    • 任务栏图标显示与程序主逻辑运行的双线程
    • 在任务栏图标运行时,程序仍能正常进行视频监控

    代码改进:

    将主逻辑部分放入def main()函数,开启线程执行。

    主函数部分

    代码示例:

    import threadingimport timedef start():    video_updater = VideoUpdater()  # 假设VideoUpdater为监控类    mail_notifier = MailNotifier()  # 假设MailNotifier为邮件提醒类    video_thread = threading.Thread(target=video_updater.update_video, args=(url,))    mail_thread = threading.Thread(target=mail_notifier.send_mail, args=(video_update_info,))        video_thread.start()    mail_thread.start()    def main():    start()    while True:        sleep(1)        if __name__ == "__main__":    main()

    项目打包与发布

    使用PyInstaller进行项目打包,可以生成适配目标系统的可执行文件。需要注意的是,若PhantomJS作为依赖项,需在同一文件夹下放置相应的phantomjs.exe文件,便于打包时归并到安装文件中。

    PyInstaller打包命令:

    pyinstaller --onefile --console-script '"C:\Path\to\main.py"' [-s stoi]

    结语

    整个项目是一个典型的自动化开发项目,通过结合多个库和工具实现了从网页监控到邮件提醒的完整功能链。希望本文能为有类似需求的开发者提供思路和参考。精彩内容及更多技术文章,可以访问我们的技术博客[ Hydraulicat Engineering ]。

    转载地址:http://edscz.baihongyu.com/

    你可能感兴趣的文章
    MySQL5.6的zip包安装教程
    查看>>
    mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
    查看>>
    Webpack 基本环境搭建
    查看>>
    mysql5.7 安装版 表不能输入汉字解决方案
    查看>>
    MySQL5.7.18主从复制搭建(一主一从)
    查看>>
    MySQL5.7.19-win64安装启动
    查看>>
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>
    mysql5.7免费下载地址
    查看>>
    mysql5.7命令总结
    查看>>
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>