您的位置首页  历史

学到了吗历史天气查询网24小时(历史天气查询逐小时)

  • 来源:互联网
  • |
  • 2023-09-15
  • |
  • 0 条评论
  • |
  • |
  • T小字 T大字


气象资料的获取与可视化一直是令人头疼的工作,其中数据的获取尤其伤脑筋,所谓巧妇难为无米之炊,课上想用找一张某时的等压线图,费劲!想用某时段的气象数据来命题,费劲

学到了吗历史天气查询网24小时(历史天气查询逐小时)

 

      气象资料的获取与可视化一直是令人头疼的工作,其中数据的获取尤其伤脑筋,所谓巧妇难为无米之炊,课上想用找一张某时的等压线图,费劲!想用某时段的气象数据来命题,费劲!想找一个城市的气候数据,费劲!

因此找到合适的数据能够为自己节省下大把的头发首先得明确我们所说的气象/气候资料包括:1.某时某地的气温降水风向风速等数据;2.某地年均温年降水量数据;3.某时某地各气象要素可视化产品(如某时刻等压线图);。

    本期我们先讲第一种:某时某地的气温降水风向风速数据的获取方法本着数据获取难度小,质量优的原则,推荐以下四种方法,后面两种适合长时间尺度的数据获取NullSchool网址:https://earth.nullschool.net/zh。

-cn/#current/wind/surface/level/气象、海洋、大气环境一站式可视化平台,可以在线地图点击查询地球上任意一点的历史气象数据优点:数据覆盖时间长,时间分辨率高,数据类型多样,可视化效果好;。

缺点:数据不支持下载。

中国气象数据网网址:http://data.cma.cn/优点:官方数据,数据种类齐全,数据量大;缺点:需要注册,部分数据需要科研用户,一般获取难度大以中国地面气象站逐小时观测资料为例,支持实名用户下载近7日内的气象数据,但7日外的数据无法获取。

白嫖的重点来了

中央气象台网址:http://www.nmc.cn/publish/forecast/AZJ/tongxiang.html 偶然间,发现了中央气象台居然把每天24小时的数据都以json数据传进来(不光是24小时天气数据,还包括气候数据),每小时不断更新,所以我的思路是:

如果用爬虫每天固定一个时间(比如中午12:00)自动抓取前一天的气象数据,并存储进数据库,日复一日,这样我不就可以获取长时间全国各气象站点逐小时数据了嘛

全国2170个气象台站基本数据.xlsx获取链接:http://image.data.cma.cn/static/doc/A/A.0012.0001/SURF_CHN_MUL_HOR_STATION.xlsx

听着就很亢奋吧,那我就上代码了:import requestsimport openpyxlimport timeimport datetimeimport os,jsondefcreat_sheet(dir_path)

:#建立数据库# os.chdir(r"H:\Python\20201004nmc") wb=openpyxl.Workbook() ws=wb.create_sheet(index=0,title=

"tongxiang") title_list=["date","humidity","pressure","rain1h","temperature","winddirection","windspeed"

]for nn in range(0,len(title_list)): ws.cell(row=1,column=nn+1,value=title_list[nn]) wb.save(

"tx_weather.xlsx")defget_datas(wb_path,ws_title):#抓取数据 wb=openpyxl.load_workbook(wb_path) ws=wb[ws_title]

row_max=ws.max_row r=requests.get("http://www.nmc.cn/rest/weather?stationid=58456&_=1601898008964"

) r_d=r.content.decode("utf-8") r_j=json.loads(r_d) mm=r_j["data"]["passedchart"]for ii in range(

1,25): humidity=float(mm[24-ii]["humidity"]) pressure=float(mm[24-ii]["pressure"]) rain1h=float(mm[

24-ii]["rain1h"]) tem=float(mm[24-ii]["temperature"]) time=mm[24-ii]["time"] windd=float(mm[

24-ii]["windDirection"]) winds=float(mm[24-ii]["windSpeed"]) ws.cell(row=row_max+ii,column=

1,value=time) ws.cell(row=row_max+ii,column=2,value=humidity) ws.cell(row=row_max+ii,column=

3,value=pressure) ws.cell(row=row_max+ii,column=4,value=rain1h) ws.cell(row=row_max+ii,column=

5,value=tem) ws.cell(row=row_max+ii,column=6,value=windd) ws.cell(row=row_max+ii,column=

7,value=winds) wb.save(wb_path)if __name__ == "__main__": dir_path=r"D:\Python\tx_cliamte"#数据库所在路径

os.chdir(dir_path)whileTrue: t=time.strftime("%H:%M")if t == "12:00": #设定自动抓取的时间if os.path.exists(dir_path+

r"\tx_weather.xlsx")==True: get_datas(dir_path+r"\tx_weather.xlsx","tongxiang")break

else: creat_sheet(dir_path) get_datas(dir_path+r"\tx_weather.xlsx","tongxiang"

)break第三方数据——911天气查询网址:  (点击文末阅读原文即可跳转)https://tianqi.911cha.com/ 非官方,逐小时的历史气象数据,包括气温、降水量、风向、风速、相对湿度、体感温度等数据。

数据时间覆盖2009-2019优点:时间精度高,基本的气象数据都能满足;缺点:不支持直接下载数据,其次就是非官方的数据,准确性可能存在偏差老办法,还是用爬虫抓取数据保存本地Excel,下面这段代码直接跑就好了,。

记得改一下代码主函数里保存路径、城市名称和抓取的时间。

import requestsfrom lxml import etreeimport openpyxlimport osimport pandas as pd def get_weather_data(place,start_date,days,save_path):   

#数据抓取函数 wb=openpyxl.Workbook() ws=wb.create_sheet(index=0,title=place) a=pd.date_range(start

=start_date,periods=days,freq="d") urls_list=[]for ii inrange(0,len(a)):date=a[ii].strftime(%Y-%#m-%#d

)url="https://tianqi.911cha.com/"+place+"/"+date+".html" r=requests.get(url,headers=headers) r_c=r.content.decode(

"utf-8") r_x=etree.HTML(r_c)if ii == 0: ws_title=r_x.xpath("//tr[1]/th/text()")# ws_title=ws_title.remove("气象")

# print(ws_title) write_titles_datas(ws,ws_title) all_datas=r_x.xpath("//tr/td/text()"

) write_row_datas(ws,all_datas,ii,date)else: all_datas=r_x.xpath("//tr/td/text()"

) write_row_datas(ws,all_datas,ii,date)    wb.save(save_path)def write_titles_datas(ws,a):

for mm inrange(0,len(a)):        ws.cell(row=1,column=mm+1,value=a[mm])def write_row_datas(ws,a,n,date

): times=["0:00","1:00","2:00","3:00","4:00","5:00","6:00","7:00","8:00","9:00","10:00","11:00","12:00"

,\"13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"]for nn inrange

(0,int(len(a)/8)): #0-24 row_data=[]# row_data.insert(1,"") row_data.append(date+" "+times[nn])

row_data.append(" ")for kk inrange(0,len(a[0+nn*8:nn*8+8])):if kk==1or kk == 7: row_data.append(

int(a[0+nn*8:nn*8+8][kk][:-1])) elif kk==6:if a[0+nn*8:nn*8+8][kk]=="-": row_data.append(

0)else: row_data.append(float(a[0+nn*8:nn*8+8][kk][:-2])) elif kk ==2: row_data.append(

float(a[0+nn*8:nn*8+8][kk][:-1])*0.01) elif kk != 6and kk !=1and kk !=7and kk != 2: row_data.append(a[

0+nn*8:nn*8+8][kk]) print(row_data)for jj inrange(0,len(row_data)): ws.cell(row=1+n*

24+nn+1,column=jj+1,value=row_data[jj])if __name__ == "__main__": place="haining"#输入需要抓取地点的拼音    start_date=

"2019-1-1"#输入开始时间days=2#输入天数    save_path=r"E:\GIS Data\tx_cliamte\{}.xlsx".format(place)    #修改文件保存路径

headers={user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36

} get_weather_data(place,start_date,days,save_path) pass抓取所在城市2019年365天逐小时气象数据(部分)

抛砖引玉

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186