版本号: beta 0.10
作者: 飞虎233
版权: The MIT License Copyright (c) 2020 Feihu233feihu12345@126.com
双击 开始运行.exe
即可运行, 您也可以添加该程序到桌面快捷方式
若已按下文所说提前安装了所需模块, 则删除上述 exe
文件, 直接运行 开始运行.bat
也是不错的选择
运行界面截图见 \pict\运行截图.png
系统的主要界面构成如下:
[ 输入城市名 ][ -ID- ] [ 选择时间 ][ -Combo- ] [ -Submit- ]
[ 输出框 ]
其中, 名字为英文的的为可操作组件
\docs\城市代码.txt
文件中找到城市代码.txt
中的格式, 如北京就不可写为北京市
Ctrl+V
或 Command+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
程序分为两个主要部分:
源代码见 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, 做第一阶段的工作总结
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。