import tkinter as tk from tkinter import messagebox import urllib.request import requests import re import sys def inquire(): cityName = entry.get() # 获取输入框信息 if cityName == ‘‘: messagebox.showinfo(‘提示‘, ‘请输入您要查询的城市!‘) else: city = urllib.request.quote(cityName) # urllib.request.quote()将汉字编码 raw_url = ‘https://www.tianqi.com/?keyword=‘ + city header = {‘user-agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.16 Safari/537.36‘} resp = requests.get(raw_url, headers = header) reg = re.compile(‘<li><a href="(.*?)" title="%s天气预报">%s天气预报</a></li>‘ % (cityName, cityName)) try: url = re.findall(reg, resp.text)[0] # 获得要查询城市天气预报的网址url resp = requests.get(url, headers = header) except: messagebox.showinfo(‘警告‘, ‘您输入的城市查不到!‘) sys.exit() reg = re.compile(‘<dd class="week">(.*?)</dd>‘) cur_date = re.findall(reg,resp.text)[0] # 提取当前日期 reg = re.compile(‘<p class="now"><b>(.*?)</b><i>℃</i></p>‘) cur_temperature = re.findall(reg, resp.text)[0] # 提取当前温度 reg = re.compile(‘<span><b>(.*?)</b>(.*?)</span>‘) cur_weather, cur_trange = re.findall(reg, resp.text)[0][0],re.findall(reg, resp.text)[0][1] #提取当前天气,温度范围 # 在listbox列表框中显示天气 lis.delete(0, tk.END) # 首先清空列表框 lis.insert(0, ‘城市:%s‘ % cityName) lis.insert(1, ‘日期:%s‘ % cur_date) lis.insert(2, ‘当前温度:%s‘ % cur_temperature) lis.insert(3, ‘天气:%s‘ % cur_weather) lis.insert(4, ‘温度范围:%s‘ % cur_trange) root = tk.Tk() root.title(‘城市天气查询软件‘) root.geometry(‘400x300+20+20‘) label = tk.Label(root, text = ‘请输入城市名称:‘,font = (‘仿宋‘, 15)) label.grid(row = 0, column = 0, sticky = tk.W) entry = tk.Entry(root, font = (‘仿宋‘, 15),width = 22) entry.grid(row = 0, column = 1, sticky = tk.E) lis = tk.Listbox(root, font = (‘仿宋‘, 15),width = 40, height = 11) lis.grid(row = 1, columnspan = 2, sticky = tk.W) btn1 = tk.Button(root, text = ‘查询‘, font = (‘仿宋‘, 15), command = inquire) btn1.grid(row = 2, column = 0, sticky = tk.W) btn2 = tk.Button(root, text = ‘退出‘, font = (‘仿宋‘, 15), command = root.quit) btn2.grid(row = 2, column = 1, sticky = tk.E) root.mainloop()
运行后效果: