回复
用Python爬虫做一个“天气预报”软件(exe可执行)
deanyuancn
发布于 2021-1-26 14:17
浏览
0收藏
0.故事背景:好久没写Python了,碰巧有位高中同学有这个“天气预报”软件相关技术的需求,
我也借此再回顾一下Python的部分知识
1.用到的技术关键词:中国天气网、爬虫、GUI、程序打包exe
2.项目前的准备:
中国天气网:http://www.weather.com.cn/
requests库:爬取中国天气网中的天气等数据。
tkinter:制作图形用户界面,从而实现更友好的输入和输出,并与接下来的打包操作结合起来。
pyInstaller:用于最终的项目打包,将py文件和依赖的环境转为一个exe文件,使之由一个脚本变成一个软件。
3.项目思路与实现:
1.首先单独写出此爬虫测试demo,根据用户输入的地区名,爬取中国天气网中对应地区的天气情况等(效果与完整代码见下)。
import requests
city ={'北京': '101010100',
'济南': '101120101',
'青岛': '101120201',
'淄博': '101120301',
'烟台': '101120501',
'潍坊': '101120601',
'曲阜': '101120710',
'泰安': '101120801',
'滨州': '101121101'}
cityname = input('输入查询城市:')
citycode = city[cityname]
url = 'http://wthrcdn.etouch.cn/weather_mini?citykey=%s'%citycode
# print('城市:{},编号:{}'.format(cityname,citycode))
# print(url)
res = requests.get(url)
info = res.json()
# print(info)
data = info['data']
weatherItems = data['forecast']
today = weatherItems[0]
city = f"【城市:{data['city']}】\n"
date = f"日期:{today['date']}\n"
now = f"实时温度:{data['wendu']}度\n"
tips = f"今日贴士:{data['ganmao']}\n"
print(city, date, now, tips)
print('【未来4日天气情况:】\n')
for today in weatherItems[1:]:
# today = data['forecast'][0]
date = f"日期:{today['date']}"
temperature = f"温度:{today['high']} {today['low']}"
weatherType = f"天气:{today['type']}"
print('{}, {}, {}\n'.format(date, weatherType, temperature))
2.有了此核心代码,接下来将图形用户界面写出来即可(效果与完整代码见下)。
from tkinter import *
import requests
LOG_LINE_NUM = 0
class MY_GUI():
def __init__(self,init_window_name):
self.init_window_name = init_window_name
#设置窗口
def set_init_window(self):
self.init_window_name.title("天气预报demo") #窗口名
self.init_window_name.geometry('800x500+200+50')
#标签
self.init_data_label = Label(self.init_window_name, text="输入城市名")
self.init_data_label.grid(row=0, column=0)
self.result_data_label = Label(self.init_window_name, text="天气预测结果")
self.result_data_label.grid(row=0, column=12)
#文本框
self.init_data_Text = Text(self.init_window_name, width=20, height=1) #城市名录入框
self.init_data_Text.grid(row=1, column=0, rowspan=2, columnspan=5)
self.result_data_Text = Text(self.init_window_name, width=70, height=30) #处理结果展示
self.result_data_Text.grid(row=1, column=12, rowspan=10, columnspan=10)
#按钮
self.str_trans_to_md5_button = Button(self.init_window_name, text="获取天气情况", bg="lightblue", width=10,command=self.str_trans_to_md5) # 调用内部方法 加()为直接调用
self.str_trans_to_md5_button.grid(row=1, column=11)
#功能函数
def str_trans_to_md5(self):
city ={'北京': '101010100',
'济南': '101120101',
'青岛': '101120201',
'武汉': '101200101'}
cityname = self.init_data_Text.get(1.0,END).strip()
print(cityname)
citycode = city[cityname]
url = 'http://wthrcdn.etouch.cn/weather_mini?citykey=%s'%citycode
# print('城市:{},编号:{}'.format(cityname,citycode))
# print(url)
res = requests.get(url)
info = res.json()
# print(info)
data = info['data']
weatherItems = data['forecast']
today = weatherItems[0]
city = f"【城市:{data['city']}】\n"
date = f"日期:{today['date']}\n"
now = f"实时温度:{data['wendu']}度\n"
tips = f"今日贴士:{data['ganmao']}\n"
content_today = city + date + now + tips
print(content_today)
self.result_data_Text.delete(1.0,END)
self.result_data_Text.insert(1.0,content_today)
self.result_data_Text.insert(5.0,'\n【未来4日天气情况:】\n')
forecastItems = ""
for today in weatherItems[1:]:
date = f"日期:{today['date']}"
temperature = f"温度:{today['high']} {today['low']}"
weatherType = f"天气:{today['type']}"
print('{}, {}, {}\n'.format(date, weatherType, temperature))
content_four_days = date + weatherType + temperature + '\n'
print(content_four_days)
print(type(content_four_days))
forecastItems += content_four_days
self.result_data_Text.insert(8.0, forecastItems)
def gui_start():
init_window = Tk() #实例化出一个父窗口
ZMJ_PORTAL = MY_GUI(init_window)
ZMJ_PORTAL.set_init_window() # 设置根窗口默认属性
init_window.mainloop() #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示
gui_start()
3.用pyInstaller将此py文件打包成exe可执行文件,用命令行py文件工作目录下输入:pyinstaller -F -w userGUI.py (userGUI.py为此文件名称,-w选项可以避免在打开exe时弹出命令行界面而影响用户体验),在工作目录下的dist目录中即可找到生成的exe文件。打开后就可以正常使用了,也可以传给未装Python环境的朋友用。
4.附阿里云镜像下载Python库的方法:
pip install 库名 -i https://mirrors.aliyun.com/pypi/simple
分类
已于2021-1-26 14:17:18修改
赞
收藏
回复
相关推荐