天气后报网站历史天气(历史天气网站数据)学到了
新浪图床配合Markdown,真的美滋滋
第十篇好久不见(试试Markdown,预计阅读时间:5分钟)一、写在开头的话由于之前一直在做项目处理数据,好久没有写爬虫了,趁着后台程序正在跑,今儿就爬点天气数据,做个简单的可视化,耍一下,也希望能借机与各位讨论天气数据中各个参数之间的相关性问题,因为之后想将天气数据与别的数据进行结合分析。
操作环境为:window 10python 3.6Jupyter Notebookrequests lxml plotly二、天气数据天气数据本来是打算用和风天气数据的,但由于和该公司客服联系后得知是需要收费的,所以就先用这个天气后报网站中的数据先看看情况,该站目前可以查询涵盖 34 个省、市所属的 2290 个城市、县、地区2011至今的历史天气预报信息,主要指标包括每天最高气温、最低气温、天气状况、风向等。
天气后报,请参考:http://www.tianqihoubao.com/三、爬虫开始这个网站比较简单,只需要对返回回来的数据进行一些简单的处理 1# -*- coding: UTF-8 -*- 2import
requests 3import pandas as pd 4import re 5from lxml import etree 6 7 8headers={User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
} 9url1="****************"#你所要爬取的城市对应的url10r1 = requests.get(url1,headers=headers).content.decode(gb2312
,ignore)11s1 = etree.HTML(r1)12result1= s1.xpath(//*[@id="content"]//a/@href)对第二页网址以及返回的结果进行处理 1del result1[len(result1)
-2:] 2URL = pd.DataFrame(result1) 3URL.replace(regex=[/lishi/],value=[],inplace=True) 4 5d=[] 6for i
in range(len(URL)): 7 newurl = http://www.tianqihoubao.com/lishi/+ URL[0][i] 8 9 r2 = requests.get(newurl,headers=headers).content.decode(
gb2312,ignore)10 s2 = etree.HTML(r2)11 result2 = re.findall(\r\n (.*?)\r\n \r\n \r\n \r\n \r\n \r\n (.*?)\r\n (.*?)\r\n \r\n (.*?)\r\n (.*?)\r\n (.*?)\r\n \r\n \r\n(.*?)
,r2,re.S)12for ii in range(len(result2)):13 list=[]14 list.append(result2[ii][2])15 list.append(result2[ii][
3]+result2[ii][4])16 list.append(result2[ii][5]+result2[ii][6]+result2[ii][7])17 list.append(result2[ii][
8].strip().split(\r)[0])18 d.append(list)19data = pd.DataFrame(d,columns=(Date,weather,temperature
,wind))20data.Date.replace(regex=[年,月,日],value=[/,/,],inplace=True)爬取结果前5行展示日期天气温度风向2011/01/01阴/小雪0℃/-6℃
无持续风向 ≤3级2011/01/02小雪/小雪-2℃/-8℃无持续风向 ≤3级2011/01/03阴/阴1℃/-7℃无持续风向 微风2011/01/04阴/阴-1℃/-7℃无持续风向 微风2011/01/05
阴/多云-2℃/-10℃无持续风向 ≤3级然后将天气情况、温度情况按白天/夜晚分开:日期白天夜晚白天温度夜晚温度 风向2011/01/01阴小雪0℃-6℃无持续风向 ≤3级2011/01/02
小雪小雪-2℃-8℃无持续风向 ≤3级2011/01/03阴阴1℃-7℃无持续风向 微风2011/01/04阴阴-1℃-7℃无持续风向 微风2011/01/05阴多云-2℃-10℃无持续风向 ≤3级可视化开始
go四、plotlyplotly 是一款强大的作图工具,可以快速制作各种精美的图表,而且生成的图表可以实时与用户产生交互这里由于我还没有搞懂怎么把这个天气情况(雨/雪/风等情况)如何可视化出来,只对温度等情况做了几张图。
1trace = go.Scatter(x = data1.Date,y = data1.Htpr,mode = markers,name = Night Temperature,2marker = dict(size=
5,color = data1.Htpr,colorscale=Viridis,showscale=True))3layout = go.Layout(title=WNNightTemperature,hovermode=
closest,yaxis=dict(title=Temperature)4)5data=[trace]6fig= go.Figure(data, layout=layout)7py.iplot(fig)
同理可得如下图:图1
图2
图3
五、尚未解决的几点问题:1.如何将天气情况量化或者用数字/权重等形式表示出来2.如何在做lines图时也可以用colorscale形式,个人非常喜欢Viridis这款3.还没想出来,肯定问题还不少到此告一段落
有新想法再更新 Author:IF 2019-04-15
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186