Python 自动化与 Web 应用开发详细教案
一、课程总览
课程定位
面向 Python 零基础学习者,通过实战案例掌握 Streamlit Web 应用开发与 DrissionPage 网页自动化技术,侧重 "做中学",避免抽象理论。
学习收获
-
- 独立运行并修改两个实战项目
- 理解 Python 与 Web 交互的基本逻辑
- 掌握基础代码调试与问题解决能力
课时分配
总时长:8 小时(4 次课,每次 2 小时)
二、环境准备
1. Python 安装步骤
Windows 系统
-
- 访问官网(Download Python | Python.org)下载 3.8+ 版本
- 安装时勾选 "Add Python to PATH"(重点提示,建议配截图)
- 验证:Win+R 输入 cmd,执行 python --version 显示版本号
Mac 系统
-
- 推荐使用 Homebrew:brew install python3
- 验证:终端输入 python3 --version
常见问题
-
- 安装后提示 "不是内部命令":重新安装并勾选 PATH
- 版本过低:卸载旧版本后安装新版本
2. 第三方库安装
bash
基础库安装(复制粘贴到终端)
pip install streamlit streamlit-option-menu pyaudio
pip install DrissionPage
国内加速命令(重点推荐)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit
安装失败解决
-
- 升级 pip:python -m pip install --upgrade pip
- PyAudio 安装报错:
- Windows:下载对应版本 whl 文件(https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio)
- Mac:先执行 brew install portaudio
验证安装
终端输入 streamlit --version,显示版本号即为成功
3. 项目文件准备
- 创建项目文件夹(例如 python_web_automation)
- 文件夹结构:
plaintext
项目文件夹/
├─ 81.py # Streamlit 应用(课堂提供)
├─ 85.py # 自动化脚本(课堂提供)
├─ 1.mp3 # 测试音频文件(需提前准备)
└─ uploaded/ # 图片上传保存目录(自动生成)
- 文件获取方式:
- 课程资料包下载
- 复制课堂提供的代码片段保存为对应文件
三、81.py 代码详解
1. 启动方式
bash
终端中进入项目文件夹后执行
streamlit run 81.py
- 成功启动后,浏览器会自动打开 http://localhost:8501
- 关闭应用:终端中按 Ctrl+C
2. 代码结构总览
python
运行
-*- coding: GBK -*- # 中文编码声明(防止中文乱码)import streamlit as st # 导入Streamlit库from streamlit_option_menu import option_menu # 导入侧边栏菜单组件
侧边栏菜单设置with st.sidebar:
a = option_menu("菜单标题", ["功能1", "功能2",...]) # 选择的菜单项存入变量a
根据选择的菜单项执行对应功能if a == "功能1":
功能1代码块elif a == "功能2":
功能2代码块...
3. 侧边栏菜单模块
python
运行
-*- coding: GBK -*-import streamlit as stfrom streamlit_option_menu import option_menu
创建侧边栏菜单with st.sidebar: # with语句:创建侧边栏区域
a = option_menu(
"子豪网站", # 菜单标题
"播放歌曲", "聊天神器", "上传图片", "网络电台"\], # 菜单项列表 icons=\["eye", "apple"\], # 图标(可选,数量可少于菜单项) ) * ****重点解析**** : * with st.sidebar:固定语法,用于创建侧边栏区域 * 变量 a 会保存用户当前选择的菜单项(如 "播放歌曲") * 后续代码通过判断 a 的值来显示不同功能 #### ******4. 播放歌曲模块****** python 运行 if a == "播放歌曲": # 当用户选择"播放歌曲"时执行 st.audio("1.mp3") # 播放当前目录下的1.mp3文件 * ****操作步骤**** : 1. 在项目文件夹中放入名为 1.mp3 的音频文件 2. 选择 "播放歌曲" 菜单,页面会显示音频播放器 * ****常见问题**** : * 提示文件不存在:检查 1.mp3 是否在项目文件夹中 * 无法播放:确认文件是 MP3 格式(其他格式可能不支持) #### ******5. 聊天神器模块****** python 运行 if a == "聊天神器": # 当用户选择"聊天神器"时执行 st.header("DeepSeek") # 显示标题 st.info("输入内容后按回车键发送") # 显示提示信息 with st.container(): # 创建一个内容容器 # 定义处理输入的函数 def handle_input(): # 检查输入内容是否不为空 if st.session_state.user_input.strip() != "": # 显示用户输入的内容 st.text(st.session_state.user_input) # 清空输入框 st.session_state.user_input = "" # 创建文本输入框 st.text_input( "请输入内容", # 标签(被隐藏) placeholder="在这里输入...", # 输入框提示文字 key="user_input", # 绑定到session_state的变量名 on_change=handle_input, # 输入变化时触发的函数(回车时) label_visibility="collapsed" # 隐藏标签 ) # 创建发送按钮 if st.button("发送", use_container_width=True): handle_input() # 点击按钮时执行处理函数 * ****重点解析**** : * st.session_state:Streamlit 用于保存状态的变量(类似记忆功能),确保页面刷新时数据不丢失 * on_change=handle_input:输入框内容变化时(如按回车)自动执行 handle_input 函数 * st.button:创建按钮,点击时触发后续代码 #### ******6. 上传图片模块****** python 运行 if a == "上传图片": # 当用户选择"上传图片"时执行 import os # 导入文件操作库 st.title("喜欢的图片") # 显示标题 # 创建文件上传器,限制只能上传jpg/png/jpeg格式 f = st.file_uploader("选择图片", \["jpg", "png", "jpeg"\]) st.button("按钮") # 一个示例按钮(无实际功能) # 当点击"保存到本地"按钮时 if st.button("保存到本地"): d = "uploaded" # 保存目录名 # 创建目录(如果不存在) os.makedirs(d, exist_ok=True) # 拼接保存路径(目录+文件名) p = os.path.join(d, f.name) # 保存图片到本地 with open(p, "wb") as fp: fp.write(f.getbuffer()) # 将上传的文件内容写入本地文件 # 显示成功信息和图片 st.success(f"已保存至 {p}") st.image(f) # 显示上传的图片 * ****重点解析**** : * os.makedirs(d, exist_ok=True):创建文件夹,exist_ok=True 表示如果文件夹已存在也不报错 * with open(...):文件操作的安全方式,自动处理文件关闭 * f.getbuffer():获取上传文件的内容,用于写入本地文件 #### ******7. 网络电台模块****** (因您提到 "网络收音机不用提及",此处省略该模块详细解析,实际教学中可根据需求选择是否讲解) ### ******四、85.py 代码详解****** #### ******1. 启动方式****** bash # 终端中进入项目文件夹后执行 python 85.py * 成功运行后,会在项目文件夹中生成 output.txt 文件 * 若首次运行,会自动下载 Chromium 浏览器(约 100MB,耐心等待) #### ******2. 代码逐行解析****** python 运行 from DrissionPage import \* # 导入DrissionPage库的所有功能 co = ChromiumOptions() # 创建浏览器配置对象 co.headless(True) # 设置无头模式(不显示浏览器窗口) page = ChromiumPage(co) # 根据配置创建浏览器页面对象 page.get('https://baidu.com') # 让浏览器访问百度首页 a = page.title # 获取当前页面的标题 # 创建并打开output.txt文件,写入页面标题 f = open("output.txt", "w", encoding="utf-8") # encoding="utf-8"确保中文正常写入 f.write(a) # 将标题写入文件 * ****重点解析**** : * co.headless(True):无头模式适合后台运行,调试时可改为 False 查看浏览器操作过程 * page.get(url):模拟浏览器访问指定网址 * page.title:获取网页标题(如百度首页标题为 "百度一下,你就知道") * encoding="utf-8":处理中文时必须添加,否则可能出现乱码 ### ******五、常见问题与解决方法****** #### ******1. 运行 81.py 时的错误****** |-------------------------------------------------------------------|---------------------------|--------------------------------------| | ****错误提示**** | ****可能原因**** | ****解决方法**** | | ModuleNotFoundError: No module named 'streamlit' | 未安装 streamlit 库 | 执行 pip install streamlit | | FileNotFoundError: \[Errno 2\] No such file or directory: '1.mp3' | 缺少 1.mp3 文件 | 在项目文件夹中放入该文件 | | 侧边栏菜单不显示 | streamlit-option-menu 未安装 | 执行 pip install streamlit-option-menu | #### ******2. 运行 85.py 时的错误****** |-----------------------------------------------------|--------------|-----------------------------| | ****错误提示**** | ****可能原因**** | ****解决方法**** | | ModuleNotFoundError: No module named 'DrissionPage' | 未安装该库 | 执行 pip install DrissionPage | | 下载 Chromium 缓慢 | 网络问题 | 配置国内镜像源或手动下载后指定路径 | | 中文乱码 in output.txt | 未指定编码 | 确保文件操作时添加 encoding="utf-8" | ### ******六、课堂练习设计****** #### ******基础练习****** 1. 修改 81.py 的侧边栏标题为自己的名字 2. 给 85.py 增加一行代码,让它访问 "[https://baidu.com](https://baidu.com/ "https://baidu.com")"后再访问"[https://bing.com](https://bing.com/ "https://bing.com")" #### ******进阶练习****** 1. 在 81.py 的 "聊天神器" 中添加一个 "清空历史" 按钮 2. 让 85.py 保存百度首页的标题和网址到 output.txt(格式:标题 + 换行 + 网址) ### ******七、教学提示****** 1. 每个模块讲解后,让学生立即动手操作,观察代码运行效果 2. 对于抽象概念(如 session_state),用生活例子类比(如 "记事本" 记录内容) 3. 准备好备用代码文件,避免学生因操作错误导致无法继续 4. 强调代码缩进的重要性(Python 用缩进来区分代码块) 5. 鼓励学生修改代码中的文字、路径等简单部分,培养成就感