赞
踩
2020年初,新冠状肺炎爆发,很多地区每天都会涌现出一批新增确诊或是新增疑似患者,但是新闻数据过于繁杂,想要找到自己想知道的省份的疫情信息需要花费一些时间,于是想到制作一个具有疫情查询功能的软件,可以简单方便的进行查询。
计划分两步完成:
1、编写疫情代码:包括疫情数据爬取、全国数据展示、省份具体数据查询三个功能
2、将代码封装成软件
想要获取到实时的信息,肯定要对页面进行实时爬取,这里用的是腾讯新闻的页面(这种页面并不太稳定,如果其改变了源码,那相应的程序也要更改),也可以用API,那样要稳定一些,不过腾讯新闻的API不免费,免费的那些又十分拥挤,所以最终我还是采用的爬取页面的方式。
代码如下:
import requests
import json
def get_data():
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery341001657575837432268_1581070969707&_=1581070969708'
headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36'}
res = requests.get(url, headers=headers).text
a = res.split('jQuery341001657575837432268_1581070969707(')[1].split(')')[0]
c = json.loads(a)
data = json.loads(c['data'])
return data
这部分代码很简单,就不做什么说明了
def print_data_china():
data = get_data()
print('统计截至时间:'+str(data['lastUpdateTime']))
print('全国确诊人数:'+str(data['chinaTotal']['confirm']))
print('相较于昨天确诊人数:'+str(data['chinaAdd']['confirm']))
print('全国疑似病例:'+str(data['chinaTotal']['suspect']))
print('相较于昨天疑似人数:'+str(data['chinaAdd']['suspect']))
print('全国治愈人数:'+str(data['chinaTotal']['heal']))
print('相较于昨天治愈人数:'+str(data['chinaAdd']['heal']))
print('全国死亡人数:'+str(data['chinaTotal']['dead']))
print('相较于昨天死亡人数:'+str(data['chinaAdd']['dead']))
核心就是两个for循环,将你想要查询的省份信息输入,然后得到其输出
def print_data_path_china(): data = get_data()['areaTree'][0]['children'] path_data = [] path_china = [] path = str(input('请输入你要查询的省份:')) for i in data: path_china.append(i['name']) path_data.append(i['children']) if path in path_china: num = path_china.index(path) data_path = path_data[num] print('{:^10}{:^10}{:^10}{:^10}{:^10}'.format('地区', '累计确诊人数', '相较于昨日确诊人数', '累计治愈人数', '累计死亡人数')) for i in data_path: name = i['name'] today = i['today'] total = i['total'] a = '{:^10}{:^15}{:^15}{:^15}{:^15}' print(a.format(name, str(total['confirm']), str(today['confirm']), str(total['heal']), str(total['dead'])))
import requests import json def get_data(): url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery341001657575837432268_1581070969707&_=1581070969708' headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36'} res = requests.get(url, headers=headers).text a = res.split('jQuery341001657575837432268_1581070969707(')[1].split(')')[0] c = json.loads(a) data = json.loads(c['data']) return data def print_data_china(): data = get_data() print('统计截至时间:'+str(data['lastUpdateTime'])) print('全国确诊人数:'+str(data['chinaTotal']['confirm'])) print('相较于昨天确诊人数:'+str(data['chinaAdd']['confirm'])) print('全国疑似病例:'+str(data['chinaTotal']['suspect'])) print('相较于昨天疑似人数:'+str(data['chinaAdd']['suspect'])) print('全国治愈人数:'+str(data['chinaTotal']['heal'])) print('相较于昨天治愈人数:'+str(data['chinaAdd']['heal'])) print('全国死亡人数:'+str(data['chinaTotal']['dead'])) print('相较于昨天死亡人数:'+str(data['chinaAdd']['dead'])) def print_data_path_china(): data = get_data()['areaTree'][0]['children'] path_data = [] path_china = [] path = str(input('请输入你要查询的省份:')) for i in data: path_china.append(i['name']) path_data.append(i['children']) if path in path_china: num = path_china.index(path) data_path = path_data[num] print('{:^10}{:^10}{:^10}{:^10}{:^10}'.format('地区', '累计确诊人数', '相较于昨日确诊人数', '累计治愈人数', '累计死亡人数')) for i in data_path: name = i['name'] today = i['today'] total = i['total'] a = '{:^10}{:^15}{:^15}{:^15}{:^15}' print(a.format(name, str(total['confirm']), str(today['confirm']), str(total['heal']), str(total['dead']))) if __name__ == '__main__': get_data() print_data_china() print_data_path_china() input('查询成功,输入任意字符后结束')
一、安装pyinstaller
如果你用的是pycarm,直接在setting里面找到pyinstaller的库安装即可。
有一点要注意的是,并非所有的python都支持pyinstaller,目前的python3.8就不支持(以后应该会支持)。
方法1:命令行安装
pip3 install pyinstaller -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
方法2:官网下载
下载网址在这里
方法3:[在github上下载](https://github.com/pyinstaller/pyinstaller)
然后解压。之后在cmd中切换到解压目录下(切换目录方法可以点这里),进行安装,安装语法为:python setup.py install
二、安装pywin32-ctypes
下载安装完成pyinstaller后,还需要下载pywin32-ctypes,不然会出现这种问题:
直接命令行安装即可
pip install pywin32-ctypes
如下图所示便可以了
1、选定你需要封装成exe的python文件,因为之前没截图,我这里就随便写了一个做演示用:
2、将该文件放到pyinstaller的解压目录下面:
3、在CMD命令行进入该目录,并执行命令:python pyinstaller.py -F test_app.py
其中,-F是参数,可以有其他参数,列举几个其作用如下:
4、执行完3后,我们需要到解压目录下找到一个和你python文件同名的文件夹。
在该文件夹下面找到dist文件,里面便是已经封装好的exe文件了。
前面已经讲过了该如何将Python代码转化成一个可执行的exe文件,但是这样创建的exe的图标是默认图标,那么该如何将图标换成自己想要的图片呢?
1、首先选择一张你想用的图片,正常的图片是没法用作图标的,我们需要先将格式转化为图标格式,这一步很简单,直接百度将图片转化为.ico格式,找个网站就能实现。
2、将图标格式的图片(即.ico后缀的图片)存在某个地方,记住其存储路径
如图所示,我是将其直接放在了e盘下面。
3、将前文将python代码转换为exe文件的命令行代码修改为:
python pyinstaller.py -F -i E:\test.ico test_app.py
如下图所示
加了一个-i 图片路径的代码
这样便完成了对exe自定义图标的操作,效果图如下
至此,一款具有疫情查询功能的软件就制作完成了。
有时候exe打开后会闪退,这可能是因为执行完程序后自动关闭了。这时候只需要在程序尾部添加一行代码即可:
print("输入任意字符后退出")
正常代码执行的时候,这句可有可无,封装成软件展示的时候,这句就很关键啦。
另外我将封装后的软件放到这里了,下载只需要两积分,如果是在没有积分的可以评论区留下邮箱,看到后我会发给你。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。