import re
import urllib.request
import tkinter
from tkinter import *
import matplotlib.pyplot as plt
from pylab import *
def zuoye():
url="http://tianqi.so.com/weather/"
data=urllib.request.urlopen(url).read().decode()
pat0='<div class="city-change-wrap">(.*?)</div>'
result0=re.compile(pat0).findall(data)
result0=result0[0]
pat01='<strong class="change-title">(.*?)</strong>'
result01=re.compile(pat01).findall(result0)#地址信息
pat1='<div class="cur-weather g-fl">(.*?)</div>'
result1=re.compile(pat1).findall(data)
result1=result1[0]
pat2='</span>(.*?)</p>'
pat3='<span>(.*?)</span>'
result2=re.compile(pat2).findall(result1)#(天气,体感,风向,分力,气压,湿度)
result3=re.compile(pat3).findall(result1)#天气信息所对应的值
pat4='<div class="badthing-item g-fl ">(.*?)</div>'
result4=re.compile(pat4).findall(data)
result4=result4[0]
pat5='<span>(.*?)</span>'
pat6='<span class="g-fl">(.*?)</span>'
result5=re.compile(pat5).findall(result4)#pm2.5
result6=re.compile(pat6).findall(result4)#pm2.5值
pat8='<div class="mh-detail-tips">(.*?)</div>'
result8=re.compile(pat8).findall(data)#出行建议信息
pat9='<div class="local-time">(.*?)</div>'
result9=re.compile(pat9).findall(data)
result9=result9[0]
result10=re.compile(pat5).findall(result9)#爬取时间信息
pat16='</div><div class="curve-info-item" style="width: 12.5%"><p>(.*?)</p>'
pat17='11时'
pat18='<div class="weather-trend">(.*?)</div>'
result11=re.compile(pat16).findall(data)
result11=str(result11)
a=result11.replace("时", "")
a=a.replace('\'',r'')
a=a.replace('\]',r'')
b=[]#时间
for i in range(1,6):
c=a.split(',')[i]
b=b+[c]
pat23='todayHoursValue(.*?)]'
result12=re.compile(pat23).findall(data)
d=[]#温度
result12=str(result12)
result12=result12.replace("=","")
result12=result12.replace('\'',r'')
result12=result12.replace('\"',r'')
result12=result12.replace('\]',r'')
for i in range(1,6):
e=result12.split(',')[i]
d=d+[e]
def show1():
y = list(map(int,d))
x = list(map(int,b))
for i in range(1,5):
if x[i]<x[0]:
x[i]=x[i]+24#使用48小时制,当每个数小于第一个数时那么他就是第二天,时间+24
x2 = x
x1 = range(len(x))
plt.plot(x, y, marker='*', mec='r', mfc='w',label=u'tempature')
plt.legend()
plt.margins(0)
plt.subplots_adjust(bottom=0.15)
plt.xlabel(u"time")
plt.ylabel("tempature")
plt.title("python")
plt.show()#画折线图
f=open('test.txt','w')
f.truncate()#清空文件
shijian=str(result10)
shijian="当前时间为:"+shijian
shijian=shijian.replace('\'',r'')
dizhi=str(result01)
dizhi="当前地址为:"+dizhi
dizhi=dizhi.replace('\'',r'')
#print(shijian)
tianqi=dict()#建立字典a用于存储天气信息
tianqi=dict(zip(result3,result2))
tianqi1=str(tianqi)
tianqi1=tianqi1.replace('\'',r'')
tianqi1=tianqi1.replace(',',r', ')
#for key,value in tianqi.items():
# print(key,value)
pm=dict()#建立字典b用于存储pm2.5信息
pm=dict(zip(result5,result6))
pm1=str(pm)
pm1=pm1.replace('\'',r'')
jianyi=str(result8)
jianyi="出行建议:"+jianyi
jianyi=jianyi.replace('\'',r'')
f.write(jianyi+'\n')#将建议写入
f.write(pm1+'\n')#将pm2.5信息写入
f.write(tianqi1+'\n')#将天气信息写入
f.write(shijian+'\n')#将时间写入
f.write(dizhi+'\n')#将地址写入
f.close()
root=tkinter.Tk()
root.title('python作业')
root['height']=800
root['width']=600
listboxzuoye=tkinter.Listbox(root,selectmode = BROWSE,width=300)
listboxzuoye.place(x=0,y=35,width=600,height=770)#设置输出框
def show():
f=open('test.txt','r')#读取文件内容,逐行显示
li=f.readlines()
for line in li:
listboxzuoye.insert(0,line)
buttonjisuan1=tkinter.Button(root,text='获取天气信息',width=100,command=show)
buttonjisuan1.place(x=10,y=10,width=150,height=20)
buttonjisuan1=tkinter.Button(root,text='查看温度折线图',width=100,command=show1)
buttonjisuan1.place(x=260,y=10,width=150,height=20)
if __name__ == '__main__' :zuoye()