基于Python的简单天气爬虫程序

本文介绍了一个Python程序,该程序能够从特定网站抓取天气数据,并通过图表形式展示温度变化趋势,同时将天气信息、PM2.5指数及出行建议等内容记录到本地文件。
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() 






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值