本文共 3152 字,大约阅读时间需要 10 分钟。
本文将详细介绍编写一个自动检测B站Up主视频更新情况并通过邮件提醒的Python程序开发过程及实现方法。
此项目基于以下环境进行开发:
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 配置:
设置 > 账户设置
账户详情
页面,获取POP3设置信息shortmessage
API完成短信验证,获取验证码代码示例(发送邮件):
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/