1 Star 2 Fork 0

飞虎233 / 基于PySimpleGUI开发的天气预报获取小程序

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

图形化爬取天气预报小程序-操作手册与设计文档

项目信息

版本号: beta 0.10
作者: 飞虎233
版权: The MIT License Copyright (c) 2020 Feihu233feihu12345@126.com

使用手册

快速使用

双击 开始运行.exe 即可运行, 您也可以添加该程序到桌面快捷方式
若已按下文所说提前安装了所需模块, 则删除上述 exe 文件, 直接运行 开始运行.bat 也是不错的选择

主要界面介绍

运行界面截图见 \pict\运行截图.png
系统的主要界面构成如下:
[ 输入城市名 ][ -ID- ] [ 选择时间 ][ -Combo- ] [ -Submit- ]
[ 输出框 ]
其中, 名字为英文的的为可操作组件

  1. [ -ID- ] 在此处输入城市名/城市 ID
    爬取的目标气象网站可用两种方式链接到具体城市的气象信息, 因此这里也提供两种输入方式
    一种是通过城市名, 如北京
    一种是通过城市ID, 即唯一标识城市的数字串
    二者的对应关系可在 \docs\城市代码.txt 文件中找到
    注意: 此处填写的城市名必须严格按照 城市代码.txt 中的格式, 如北京就不可写为北京市
  2. [ -Combo- ] 这里是一个下拉菜单
    下拉菜单中不同的选项代表所查询的时间, 从昨天, 到四天后, 默认选择为明天
  3. [ -Submit- ] 这里是一个提交按钮, 点击后可以在下方的 [ 输出框 ] 中得到天气信息
  4. [ 输出框 ] 这里是显示信息的输出框
    每次点击 [ -Submit- ] 后, 新的输出信息将会出现在旧信息的下方, 滑动控制条可以查看历史查询记录
    每次输出后, 输出在屏幕上的信息都将复制, 使用 Ctrl+VCommand+v 可以粘贴到其他场合
    每次输出的信息如下例所示, 其中, 最后一行内容不会进入剪贴板

    温度: 25℃ - 31 ℃
    天气: 阴
    风向: 西北风
    已复制到剪贴板

高级部分

使用模块: requests, PySimpleGUI, pyperclip
requests 依赖模块(安装 request 时自动下载): certifi, chardet, idna, urllib3
源代码说明请参照代码讲解与运行设计节
wthcdn数据源: 保存了昨天, 今天, 和未来 3 天的数据, 内容极其丰富, 可通过城市名, 城市 ID 两种方式获取数据
城市名例: http://wthrcdn.etouch.cn/weather_mini?city=北京
城市 ID 例: http://wthrcdn.etouch.cn/weather_mini?citykey=101010100
weather,com 只允许通过城市 ID 获取数据, 且数据量少
城市 ID 例: http://www.weather.com.cn/data/cityinfo/10101010.html\
详情请查看 doc 文件夹内的 json 格式文档
该程序使用 PyInstaller 封装为 .exe 可执行文件, 若无使用需求可直接删除该文件

设计手册

引言-概述-需求分析

(作品引用不代表本人认同作品本身的思想)
现代生活中, 主流都在追求 "大而全", 将自己的用户群一拓再拓, 恨不能天下韭菜尽入吾彀中. 在此宏大叙事之中, 一部分人开始重新审视自己的需求. 大量的 "小而精" 也迅速占领了这一部分人的市场. 他们中的一部分, 为了真正掌握信息收集与筛选的权力, 拿起镰刀锤子, 为自己打造出合适的生活. 这就是网络时代 "DO IT YOURSELF" 的精神内核所在.
爬虫的普及, 是 "DIY" 新热潮暗伏的前浪. 正如 后浪 中所说: "不惑于自己喜欢什么 ... 你所热爱的, 就是你的生活", 使自己生活的定制化, 精简化, 便利化, 成为了都市新一代人的急切需求. 爬虫虽不是为此而生, 但它可以为此而用, 既雪中送碳又锦上添花.
如果说爬虫是为了定制生活, 那么可视化技术就是为了定制理想. 长久以来, 许多程序员一直在被可视化程序的组件设计烦扰. 如何既美观又方便地设计程序界面一度成为了学习 GUI 编程的最大心理包袱. 了不起的盖茨比 整部作品的第一段说: "每逢你想要批评任何人的时候, 你就记住, 这个世界上所有的人, 并不是个个都有过你拥有的那些优越条件." 对于美术感知能力差的人来说, 设计一个 "人类可用" 的 GUI 程序往往成为一种奢求, 甚至于 UI 设计成为了一个专门的职业.
PySimpleGUI 的到来让我们燃起希望, 它通过表格化的设计方法, 以及与多个主流 GUI 模块的联动, 使得界面设计门槛变得极低, 而拥有一定经验的程序员, 也可以借助其对其他 Python 包的支持, 自由增加自己需要的内容, 更可以尝试通过这个模块, 将完全相同的代码, 仅通过修改导入模块, 使其运行在本地和网络 (指 Remi 模块) 上.
本程序旨在通过爬虫处理网络爬虫内容这一兴趣接口, 让大家了解 json 模块的使用方法, 以及为 PySimpleGUI 的学习提供一个相对简单的入门实例.

主要任务

爬虫部分:
1. 寻找并分析爬虫目标网站
2. 爬取并拆解内容
视图部分:
3. 确定视图结构, 画好设计图
4. 根据设计图进行视图设计
5. 设置控件交互相关功能
其他部分:
6. 根据实际需要增添其他功能

系统分析

技术简介

爬虫技术: 指对从网页获取的信息进行分析处理的编程技术的总称, 涉及获取网页信息, 网页结构, 格式化文档处理等多种技术分支, 此程序中通过 requests 模块获取网页信息, 并通过 JSON 模块进行格式化文档处理
GUI 技术: 指通过代码建立窗口, 以可视化的方式显示技术, 包装底层运行逻辑, 简化使用的技术. 其核心便是窗口界面设计及组件处理, 此处使用 PySimpleGUI 模块建立 GUI 界面. PySimpleGUI 是横跨多模块多平台的综合性 GUI 模块, 方便的界面设计及组件操作, 利用它们可以较快设计出可视化程序, 适合于不想了解界面设计底层概念 (图形学), 以及想快速定制小程序的人进行初步设计开发.
此外, 该程序涉及的技术还有系统剪贴板操作 (通过 pyperclip 模块实现) 等

系统设计

系统开发环境: VSCode
运行平台: Windows-10
数据: 格式化文本

结构设计

功能结构图: 见 \pict\功能结构图.png
程序分为两个主要部分:

  1. 界面部分: 通过设计界面以简化用户操作难度, 其中涉及界面退出的处理, 组件交互设计, 界面排版等.
  2. 爬虫部分: 这一部分在此涉及颇少, 仅爬取单个网页, 及处理网页内容中的格式化文本信息.

代码讲解与运行设计

源代码见 Start.pyw
程序框图见 \pict\程序框图.png
代码主体包含界面设计, 文件处理与程序主循环部分
界面设计部分包含组件排版设计与组件交互设计, 排版设计使呈现界面简洁美观, 组件交互设计确立了 GUI 主要数据事件交互, 为后面主循环处理部分埋设可操作接口.
文件处理部分通过将事先准备的文件打包为字典来减少代码量, 避免代码臃肿, 逻辑混乱.
程序主循环部分包括信息获取部分, 信息处理部分与界面操作部分
信息获取部分包括获取信息更新的组件, 通过事先成立的字典检验获取到的组件信息的合理性, 根据获取到的组件信息在指定网址上爬取所需数据, 以及处理 "退出" 事件, 退出运行主循环
信息处理部分包括将爬取到的格式文本转化为字典, 根据组件信息挑选将显示的字典部分并组成长字符串, 并将用户所需的字符串添加到用户的剪切板中
界面操作部分包括组件信息获取, 组件输出信息显示及更新, 处理系统主循环逻辑等
代码除程序主体外, 还有多个自定义函数用于处理代码冗余问题, 同时, 成型的函数可作为可移植代码作用于其他程序, 大幅减少了工作量. 本程序中的自定义函数有:
get_city_dicts(city_dicts=dict())->dict:
参数形式: 字典格式, 或默认字典
输出形式: 返回存储格式校验用信息的字典, 若已在参数中指定使用的字典, 也可不使用返回值
函数逻辑: 本地打开 城市代码.txt 文件, 逐行解析字符串并将其保存为字典
城市代码文件: 文件中有两种行, 一种为空, 一种格式类似 101011100=大兴, 用来描述城市地区代码与城市名间对应关系, 城市代码为 9 位数字, 故字符串拆分只需拆分为前 9 个字符, 等号字符与等号后字符三个部分即可, 可以直接用字符串位置截取操作
get_data(city=str, dicts=city_dicts: dict, result=dict())->dict:
参数形式: 表示城市或城市 ID 的字符串, 存储格式校验用信息的字典, 带默认值的预设返回值字典
输出形式: 字典形式的爬取数据
函数逻辑: 先处理输入的 city 字符串, 判断其为城市代码形式或城市名形式, 确定形式后即将其与相应地址结合为待爬取地址, 再利用 requests 模块的 loads() 函数获取爬取信息, 并将获取到的 JSON 格式信息转化为字典形式
关于预设值: dicts 参数之所以使用现实字典默认值, 而非空字典或 get_city_dicts() 函数, 是为了节省每次调用函数的运行时间, 属于以空间换时间的设计. 由于此爬虫的特殊性, 导致此函数必须与校验式字典并和使用, 为了避免程序错误, 故在 get_city_dicts() 函数后立即创建变量获取该校验字典.
get_temp(temp_max: str, temp_min: str, result='')->str:
参数形式: 字符串格式, 带默认值的预设返回值字符串
输出形式: 参数经过整合后的新字符串, 即参数中的 result 参数
函数逻辑: 对获取到的特定格式 "温度" 字符串信息进行处理, 使其更有利于输出显示
原温度字符串格式: 类似 "高温 36℃", 拥有最高温 / 最低温表示, 及温度数据. 若不加修饰直接显示, 会造成阅读不便, 故依据 "中文文档排版指南" 所指定的格式, 删除字符串头部中文字符, 并将温度部分用短横线连接

版本信息

beta 0.01: 设计完成初始化结构框架, 尝试数据库应用程序设计
beta 0.04: 数据库设计失败, 转为字典存储设计, 构建基本数据操作体系
beta 0.05: 根据官方文档教程, 进一步扩展窗口, 引入新模块保证使用的便捷性
beta 0,06: 设计批处理程序(bat), 并通过快捷方式形式制作伪可执行程序(exe)
beta 0.07: 使用批处理转换软件生成真正的伪可执行程序 (本质还是批处理)
beta 0.09: 修改部分代码, 改正一些 BUG, 并用打包器 *(PyInstaller)*打包成真可执行程序
beta 0.10: 最后修整, 上传代码至 Gitee, 做第一阶段的工作总结

TODO 未来展望

  1. 将输入部分改为多选框, 并增加选项搜索功能
  2. 考虑利用虚拟环境进行打包, 以压缩空间
  3. 考虑完全包装程序, 真正做到一个文件一程序
  4. 考虑制作多种不同应用场合的程序, 使其能满足不同需求
  5. 更换查询源, 增加表现形式如统计图表等
  6. 完全翻译 PySimpleGUI 官方文档, 尝试制作 VSCODE 辅助插件
  7. [已解决] README 文档修正, 如 5 级标题等的处理
MIT License Copyright (c) 2020 飞虎233 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

暂无描述 展开 收起
Python
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/feihu233/pysimplegui-app-by-feihu233.git
git@gitee.com:feihu233/pysimplegui-app-by-feihu233.git
feihu233
pysimplegui-app-by-feihu233
基于PySimpleGUI开发的天气预报获取小程序
master

搜索帮助