当前位置: 首页 > news >正文

Python 自动化与 Web 应用开发详细教案

Python 自动化与 Web 应用开发详细教案

一、课程总览

课程定位
面向 Python 零基础学习者,通过实战案例掌握 Streamlit Web 应用开发与 DrissionPage 网页自动化技术,侧重 "做中学",避免抽象理论。

学习收获

    1. 独立运行并修改两个实战项目
    2. 理解 Python 与 Web 交互的基本逻辑
    3. 掌握基础代码调试与问题解决能力

课时分配
总时长:8 小时(4 次课,每次 2 小时)

    1. 第 1 课:环境搭建 + 81.py 基础框架
    2. 第 2 课:81.py 功能模块深入
    3. 第 3 课:85.py 自动化脚本详解
    4. 第 4 课:综合练习与扩展应用

二、环境准备

1. Python 安装步骤

Windows 系统

    1. 访问官网(Download Python | Python.org)下载 3.8+ 版本
    2. 安装时勾选 "Add Python to PATH"(重点提示,建议配截图)
    3. 验证:Win+R 输入 cmd,执行 python --version 显示版本号

Mac 系统

    1. 推荐使用 Homebrew:brew install python3
    2. 验证:终端输入 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

安装失败解决

    1. 升级 pip:python -m pip install --upgrade pip
    2. PyAudio 安装报错:
      • Windows:下载对应版本 whl 文件(https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio
      • Mac:先执行 brew install portaudio

验证安装
终端输入 streamlit --version,显示版本号即为成功

3. 项目文件准备

  1. 创建项目文件夹(例如 python_web_automation
  2. 文件夹结构:

plaintext

项目文件夹/

├─ 81.py          # Streamlit 应用(课堂提供)

├─ 85.py          # 自动化脚本(课堂提供)

├─ 1.mp3          # 测试音频文件(需提前准备)

└─ uploaded/      # 图片上传保存目录(自动生成)

  1. 文件获取方式:
    • 课程资料包下载
    • 复制课堂提供的代码片段保存为对应文件

三、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://bing.com"

进阶练习

  1. 在 81.py 的 "聊天神器" 中添加一个 "清空历史" 按钮
  2. 让 85.py 保存百度首页的标题和网址到 output.txt(格式:标题 + 换行 + 网址)

七、教学提示

  1. 每个模块讲解后,让学生立即动手操作,观察代码运行效果
  2. 对于抽象概念(如 session_state),用生活例子类比(如 "记事本" 记录内容)
  3. 准备好备用代码文件,避免学生因操作错误导致无法继续
  4. 强调代码缩进的重要性(Python 用缩进来区分代码块)
  5. 鼓励学生修改代码中的文字、路径等简单部分,培养成就感

http://www.dtcms.com/a/317573.html

相关文章:

  • 前端全栈修炼手册:从 Vue3 到工程化的进阶之路
  • Ethereum: 深入Hardhat Console, 我们的智能合约瑞士军刀
  • 微型导轨:智能家居抽屉的智能化应用
  • Text2SQL 智能问答系统开发-spider验证集(三)
  • 线程互斥与同步
  • C语言控制语句练习题1
  • 汽车以太网通信协议——SOME/IP
  • JTAG-SVF文件完整教程
  • 身份证实名认证接口增强联网平台的便利性与安全性
  • Centos上安装Mysql5.7教程
  • 智能提示词引擎的革新与应用:PromptPilot使用全解析
  • Bug 记录:SecureRandom.getInstanceStrong()导致验证码获取阻塞
  • 算法238. 除自身以外数组的乘积
  • 完整的登陆学生管理系统(配置数据库)
  • VSCode git提交记录中文commit显示乱码
  • 碰撞问题的分析
  • OpenAI开源大模型gpt-oss系列深度解析:从120B生产级到20B桌面级应用指南
  • C++实现线程池(3)缓存线程池
  • get请求中文字符参数乱码问题
  • 互联网一线大厂Java面试八股文整理(1000题附答案)
  • MATLAB深度学习之数据集-数据库构建方法详解
  • Leetcode——209. 长度最小的子数组
  • Redis中间件(二):Redis协议与异步方式
  • 用docker的方式快速搭建一个Hive的调测环境
  • Java 字节码文件(.class)的组成详解
  • 具有柔性关节的机械臂matlab仿真
  • 在Word和WPS文字中如何输入汉字的偏旁部首
  • 【计算机网络 | 第4篇】分组交换
  • Linux seLinux
  • 网络工程师--华为命令专题