小伙伴们大家好,今天我们分享一点轻松愉快的内容。就是利用python+Tkinter+爬虫+GUI设计一个小型的天气查询系统。
技术点介绍
一、Tkinter
Tkinter是一个python内置的GUI图形库,专注于图形界面的开发。本系统之所以选择Tkinter就是因为是python内置的函数库,然后语法简单易用。缺点是界面不够美观,如果追求界面效果的话可以考虑使用Qt来作为图形化开发的工具。
二、爬虫
爬虫应该不用过多介绍了吧,一个非常牛批的进行大规模数据采集的工具,特别是随着大数据、人工智能时代的到来,爬虫也变得越来越火了。
三、目标网站、
关于目标网站,我们选定了天气网。网址链接是:
/
原因是,这个网站可以接收城市关键字然后添加到URL当中,直接进行网页请求即可,同时网站结构简单,没有ajax异步加载的状况,直接进行静态数据的抓取即可。
各个模块
一、Tkinter图形主界面
def Tkinter():
#设定标签
la1=tk.Label(window,text="请输入要查询的城市拼音", background="yellow")
# 设定查询按钮
btn = tk.Button(window, text="查询", command=getWh,background="red",activeforeground="green")
la1.pack(side="top")
entry1.pack()
btn.pack()
# 主窗口循环展示
window.mainloop()
二、天气数据抓取模块
def getWh():
city=entry1.get()
#天气查询URL
url="/"+city
#伪装浏览器头
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"}
html=requests.get(url,headers=headers)
#解析dom树
selector=etree.HTML(html.text)
#列表来接收信息
wh=[]
dl=selector.xpath("/html/body/div[5]/div/div[1]/dl")
city=dl[0].xpath("./dd[1]/h2/text()")#城市
wh.append(city[0])
date=dl[0].xpath("./dd[2]/text()")#日期
wh.append(date[0])
hot1=dl[0].xpath("./dd[3]/p/b/text()")#温度
hot2=dl[0].xpath("./dd[3]/p/i/text()")
hot=str(hot1[0]+hot2[0])
wh.append(hot)
status=dl[0].xpath("./dd[3]/span/b/text()")#天气状况
wh.append(status[0])
wet=dl[0].xpath("./dd[4]/b[1]/text()")#湿度
wh.append(wet[0][3:])
wind = dl[0].xpath("./dd[4]/b[2]/text()")#风度
wh.append(wind[0][4:])
light=dl[0].xpath("./dd[4]/b[3]/text()")#紫外线
wh.append(light[0][4:])
三、表格展示数据
# 表格展示数据
tree = ttk.Treeview(window) # 表格
tree["columns"] = ("key", "value")
tree.column("key", width=250) # 表示列,不显示
tree.column("value", width=250)
tree.heading("key", text="key值") # 显示表头
tree.heading("value", text="value值")
print(len(wh))
if len(wh) > 0:
tree.insert("", 0, text="line1", values=("城市", wh[0])) # 插入数据,
tree.insert("", 1, text="line2", values=("日期", wh[1]))
tree.insert("", 2, text="line3", values=("温度", wh[2]))
tree.insert("", 3, text="line4", values=("天气状况", wh[3]))
tree.insert("", 4, text="line5", values=("湿度", wh[4]))
tree.insert("", 5, text="line6", values=("风度", wh[5]))
tree.insert("", 6, text="line7", values=("紫外线", wh[6]))
tree.pack()
著作权归作者所有