Python 自动化与 Web 应用开发详细教案
Python 自动化与 Web 应用开发详细教案
一、课程总览
课程定位
面向 Python 零基础学习者,通过实战案例掌握 Streamlit Web 应用开发与 DrissionPage 网页自动化技术,侧重 "做中学",避免抽象理论。
学习收获
-
- 独立运行并修改两个实战项目
- 理解 Python 与 Web 交互的基本逻辑
- 掌握基础代码调试与问题解决能力
课时分配
总时长:8 小时(4 次课,每次 2 小时)
-
- 第 1 课:环境搭建 + 81.py 基础框架
- 第 2 课:81.py 功能模块深入
- 第 3 课:85.py 自动化脚本详解
- 第 4 课:综合练习与扩展应用
二、环境准备
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.mp3 的音频文件
- 选择 "播放歌曲" 菜单,页面会显示音频播放器
- 常见问题:
- 提示文件不存在:检查 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" |
六、课堂练习设计
基础练习
- 修改 81.py 的侧边栏标题为自己的名字
- 给 85.py 增加一行代码,让它访问 "https://baidu.com"后再访问"https://bing.com"
进阶练习
- 在 81.py 的 "聊天神器" 中添加一个 "清空历史" 按钮
- 让 85.py 保存百度首页的标题和网址到 output.txt(格式:标题 + 换行 + 网址)
七、教学提示
- 每个模块讲解后,让学生立即动手操作,观察代码运行效果
- 对于抽象概念(如 session_state),用生活例子类比(如 "记事本" 记录内容)
- 准备好备用代码文件,避免学生因操作错误导致无法继续
- 强调代码缩进的重要性(Python 用缩进来区分代码块)
- 鼓励学生修改代码中的文字、路径等简单部分,培养成就感