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

20254124 实验四《Python程序设计》实验报告

20254124 2025-2026-2 《Python程序设计》实验4报告

课程:《Python程序设计》
班级:2541
姓名:张璞
学号:20254124
实验教师:王志强
实验日期:2026年5月26日
必修/选修: 专选课

一、实验分析

  1. 问题描述
    平时上网时,想把视频或图片保存到电脑上,但很多网页没有下载按钮。一张张手动保存图片特别慢,视频更是没办法直接下载。所以我打算用 Python 写一个小工具,能自动下载视频、图片和普通文件,这样以后就方便多了。
  2. 功能需求
    老师要求程序至少有 5 个功能,我写了 7 个:
    image

a. 可以下载视频(大文件也支持)
b. 可以把网页里的图片批量下载下来
c. 可以下载普通文件(比如文档、压缩包)
d. 下载的时候会显示进度条,能看到下了多少
e. 如果下载失败会自动重试,最多试 3 次
f. 会把下载过的东西记在日志文件里,可以随时看
g. 有菜单可以选功能,不用记命令
3. 用到的技术
a. Python 自带的 urllib.request 用来访问网络
b. re 正则表达式从网页里找出图片链接
c. os 模块操作文件和文件夹
d. time 和 sys 做等待和进度刷新

二、系统设计

  1. 整体结构
    程序分成几个函数,每个函数负责一个功能。最后用一个 main() 函数显示菜单,之后输入数字选择要做的事情。
  2. 运行流程
    运行流程录屏如下:
    https://www.bilibili.com/video/BV14iVN6cEtY?t=0.5

三、实现过程

  1. 视频和文件下载
    我用 urllib.request.urlopen 打开网络链接,然后用一个 while 循环,每次读 1MB 的数据存到文件里。这样做的好处是即使文件很大,电脑也不会卡死。
    每次存完数据后调用 show_progress 显示进度条。为了不让网络波动导致失败,外面套了一个 for i in range(1,4) 的重试循环,失败了就等 3 秒再试。
  2. 批量下载图片
    先通过 urllib.request.urlopen 拿到网页的源代码,然后用正则表达式 r'(https?😕/[\s"'<>]+.(?:jpg|jpeg|png|gif|webp)[\s"'<>]*)' 把所有图片链接找出来,用 set 去掉重复的链接,最多取 20 张。
    接着循环这些链接,用 urllib.request.urlretrieve 一个个下载。图片名字从链接里提取,如果名字太长就自己取一个。
  3. 进度条
    用 sys.stdout.write 加上 \r 实现在同一行刷新,根据下载的字节数算百分比,用 █ 和 ░ 画出进度条。
  4. 下载日志
    每次下载成功后,把文件名、下载地址、文件大小和时间拼成一行,用追加模式写入 download_log.txt。选菜单 4 时直接读这个文件显示出来。

四、实验结果

  1. 功能测试:
    在测试时,我一项项试了所有功能。先输入一个公开的测试视频链接,选择视频下载,程序开始边下边显示进度条,很快就下载完了,文件也能正常打开。接着我找了一个图片比较多的网页,用图片下载功能,程序自己从网页里找到了20张图片地址,一张张保存到文件夹里,下载速度快而且没有漏掉。然后我又试了普通文件下载,输入一个PDF链接,同样成功下载。为了看失败重试有没有用,我故意输了一个打不开的链接,程序自动重试了3次,最后提示下载失败,说明重试机制是正常的。之后我选了菜单里的查看下载记录,之前下载的视频、图片都记录得清清楚楚,文件大小和时间都有。最后我把每个菜单选项都点了一遍,切换很流畅,输错数字时也会有提示,不会崩溃。总体来看,7个功能都能正常使用,程序运行稳定。

五、课程总结与感想

  1. 课程总结
    这学期学了很多东西。刚开始学 Python 的时候,我连 print 都不会用,后来慢慢学会了变量、循环、判断语句,还自己写出了石头剪刀布的小游戏,虽然代码很短,但那是第一个完全自己写出来的程序,挺开心的。之后又学了文件读写、网络编程,试着写了客户端和服务端聊天的小程序,虽然只是一个简单的发消息功能,但让我理解了网络上两台电脑是怎么交流的。这次写下载器的时候,感觉一下子把很多知识点串了起来,对 Python 的理解也比以前更深了。
  2. 感想和体会
    写代码的过程中遇到了好几个问题,比如一开始直接读大文件导致下载很慢,改成流式下载就好多了;还有正则表达式写错了老是匹配不到图片,改了两次才正确。我发现编程就是要多试,出了问题自己查资料解决,这个过程虽然麻烦但能学到很多东西。最后做出来一个真的能用的工具,挺有成就感的。
  3. 建议
    没什么建议,王老师超级棒!

参考文献

[1] Python官方文档. https://docs.python.org/zh-cn/3/
[2] 正则表达式教程. https://docs.python.org/zh-cn/3/library/re.html

http://www.gsyq.cn/news/1395909.html

相关文章:

  • GEO获客工具机构如何体现专业性?
  • 微信单向好友检测终极指南:3分钟找出谁删除了你
  • 2026企业360度人才盘点实力评测:维度设计vs报告解读全场景
  • 2026 年端午礼盒定制厂家推荐:打造专属节日心意 - GrowthUME
  • 避开Zemax扫描仿真的大坑:为什么你的多重组态光斑大小不一致?从场曲问题讲起
  • 掌握timedatectl:从时区管理到NTP同步的Linux系统时间配置实战
  • 生产收货的几种常用移动类型
  • 免费AI助力JeeSite手机端重构:零成本工作流破传统开发难题
  • 5月26号
  • 如何发布一场投票评选活动,一步步教你搞定 - 投票小程序
  • 服务10万+企业、覆盖全球230国+,飞鸽传书凭什么被选择? - 资讯速览
  • 实验方法详解:细胞热迁移实验(CETSA)标准化操作流程
  • 初学frida
  • 2026北京朝阳区居民搬家公司排名推荐|本地口碑靠谱榜单 - 余小铁
  • 避坑指南:STM32CubeMX配置高级定时器PWM时,时钟源和ARR值设置的那些‘坑’
  • 报告笔记--AI自动化之后的研读记录及感悟
  • 5个常见问题解答:如何快速掌握M3u8视频下载工具
  • Linux下安装Chrome的坑与填坑记录
  • 保姆级教程:用QPST工具救活你的高通865手机,从驱动安装到刷机成功
  • D1207UK,最小10dB增益及低噪声的功率晶体管
  • JavaQuestPlayer终极指南:轻松运行与开发QSP文字冒险游戏 [特殊字符]
  • css属性
  • Python+OpenCV 常用函数全汇总:从原理、实战到排错,计算机视觉入门到进阶指南
  • Taotoken的模型广场功能如何辅助开发者进行技术选型与效果评估
  • AI记忆系统如何解决多义词歧义:语境锚定技术实践
  • 保护眼睛迫在眉睫 护眼宝高效防蓝光 电脑也有护眼模式了
  • 活动平台搭建卡在审批流?性能崩在万人秒杀?Lovable平台6大模块压测数据与优化清单,限24小时领取
  • 告别交叉编译烦恼:用SD卡在RK3588上本地构建Qt 5.15.0全记录(含OpenGL环境)
  • 通过Taotoken模型广场为你的应用选择合适的AI模型
  • 用Indirect Display驱动在Win10上实现桌面特效(球面化/曲面化)的保姆级教程