你是不是做实验经常性的需要一些气象数据,例如PM2.5、相对湿度、月均温度等等……
但是当你开始寻找数据时就遇到困难了,由于权限、数据网站之类的麻烦你会花费大量无用时间,甚至有时候一无所获得不偿失,这就很头疼了!那么我们就去了解一个好的气象数据网免费获取站吧,保证你有所收获。
气象数据一直是一个价值较高的数据,它被广泛用于各个领域的研究当中。地理遥感生态网平台发布的全国站点气象数据集中包括有气温、气压、相对湿度、降水、蒸发、风向风速、日照等多种指标,但是包含了这些全部指标的气象数据却较难获取,即使获取到了也不能随意分享。
1级目录 | 文件名 |
PRS | SURF_CLI_CHN_MUL_DAY-PRS-10004-YYYYMM.TXT(本站气压) |
TEM | SURF_CLI_CHN_MUL_DAY-TEM-12001-YYYYMM.TXT(气温) |
RHU | SURF_CLI_CHN_MUL_DAY-RHU-13003-YYYYMM.TXT(相对湿度) |
PRE | SURF_CLI_CHN_MUL_DAY-PRE-13011-YYYYMM.TXT(降水) |
EVP | SURF_CLI_CHN_MUL_DAY-EVP-13240-YYYYMM.TXT(蒸发) |
WIN | SURF_CLI_CHN_MUL_DAY-WIN-11002-YYYYMM.TXT(风向风速) |
SSD | SURF_CLI_CHN_MUL_DAY-SSD-14032-YYYYMM.TXT(日照) |
GST | SURF_CLI_CHN_MUL_DAY-GST-12030-0cm-YYYYMM.TXT(0cm地温) |
气象数据一直是一个价值较高的数据,它被广泛用于各个领域的研究当中。气象数据包括有气温、气压、相对湿度、降水、蒸发、风向风速、日照等多种指标,但是包含了这些全部指标的气象数据却较难获取,即使获取到了也不能随意分享。
中国气象网的数据集是收费的,想要大规模免费爬取的话,需要自己写爬虫,之前写过一个爬取深圳市数据的爬虫。对深圳市的天气数据爬取基本没有问题。
直辖市: 北京, 天津, 上海, 重庆
安徽: 合肥, 安庆, 蚌埠, 亳州, 池州, 滁州, 阜阳, 淮北, 黄山, 六安, 马鞍山, 宿州, 铜陵, 芜湖, 宣城, 淮南
福建: 福州, 龙岩, 南平, 宁德, 莆田, 泉州, 三明, 厦门, 漳州
广东: 广州, 潮州, 东莞, 佛山, 河源, 惠州, 江门, 揭阳, 茂名, 梅州, 清远, 汕头, 汕尾, 韶关, 深圳, 阳江, 云浮, 湛江, 肇庆, 中山, 珠海
广西: 南宁, 百色, 北海, 崇左, 防城港, 桂林, 贵港, 河池, 贺州, 来宾, 柳州, 钦州, 梧州, 玉林
贵州: 贵阳, 安顺, 毕节地区, 六盘水, 铜仁地区, 遵义, 黔西南州, 黔东南州, 黔南州
甘肃: 兰州, 白银, 定西, 甘南州, 嘉峪关, 金昌, 酒泉, 临夏州, 陇南, 平凉, 庆阳, 天水, 武威, 张掖
海南: 海口, 白沙黎族自治县, 保亭黎族苗族自治县, 昌江黎族自治县, 儋州, 澄迈, 东方, 定安, 琼海, 琼中黎族苗族自治县, 乐东黎族自治县, 临高, 陵水黎族自治县, 三亚, 屯昌, 万宁, 文昌, 五指山, 三沙
河南: 郑州, 安阳, 鹤壁, 焦作, 开封, 洛阳, 漯河, 南阳, 平顶山, 濮阳, 三门峡, 商丘, 新乡, 信阳, 许昌, 周口, 驻马店, 济源
黑龙江: 哈尔滨, 大庆, 大兴安岭地区, 鹤岗, 黑河, 鸡西, 佳木斯, 牡丹江,七台河, 齐齐哈尔, 双鸭山, 绥化, 伊春
湖北: 武汉, 鄂州, 恩施, 黄冈, 黄石, 荆门, 荆州, 潜江, 神农架林区, 十堰, 随州, 天门, 仙桃, 咸宁, 襄阳, 孝感, 宜昌
湖南: 长沙, 常德, 郴州, 衡阳, 怀化, 娄底, 邵阳,湘潭, 湘西州, 益阳, 永州, 岳阳, 张家界, 株洲
河北: 石家庄, 保定, 沧州, 承德, 邯郸, 衡水, 廊坊, 秦皇岛, 唐山, 邢台, 张家口
江苏: 南京, 常州, 淮安, 连云港, 南通, 苏州, 宿迁, 泰州, 无锡, 徐州,盐城, 扬州, 镇江
江西: 南昌, 抚州, 赣州, 吉安, 景德镇, 九江, 萍乡, 上饶, 新余, 宜春, 鹰潭
吉林: 长春, 白城, 白山, 吉林市, 辽源, 四平, 松原, 通化, 延边
辽宁: 沈阳, 鞍山, 本溪, 朝阳, 大连, 丹东, 抚顺, 阜新, 葫芦岛, 锦州, 辽阳, 盘锦, 铁岭, 营口
宁夏: 银川, 固原, 石嘴山, 吴忠, 中卫
内蒙古: 呼和浩特, 阿拉善盟, 包头, 巴彦淖尔, 赤峰, 鄂尔多斯, 呼伦贝尔, 通辽, 乌海, 乌兰察布, 锡林郭勒盟,兴安盟
青海: 西宁, 果洛州, 海东地区, 海北州, 海南州, 海西州, 黄南州, 玉树州
山东: 济南,滨州, 东营, 德州,菏泽, 济宁, 聊城,临沂, 青岛, 日照,泰安, 威海, 潍坊,烟台, 枣庄, 淄博
山西: 太原, 长治, 大同, 晋城, 晋中, 临汾, 吕梁, 朔州, 忻州, 阳泉, 运城
陕西: 西安, 安康, 宝鸡, 汉中,商洛, 铜川, 渭南, 咸阳, 延安,榆林
四川: 成都, 阿坝州, 巴中, 达州, 德阳, 甘孜州, 广安, 广元, 乐山, 凉山州, 泸州, 南充, 眉山, 绵阳, 内江, 攀枝花, 遂宁, 雅安, 宜宾, 资阳, 自贡
西藏: 拉萨, 阿里地区,昌都地区, 林芝地区,那曲地区, 日喀则地区,山南地区
新疆: 乌鲁木齐, 阿拉尔, 阿克苏地区, 阿勒泰地区, 巴音郭楞蒙古自治州, 博尔塔拉州, 昌吉州, 哈密地区, 和田地区, 喀什地区, 克拉玛依, 克孜勒苏州, 石河子, 塔城地区, 图木舒克, 吐鲁番地区, 五家渠, 伊犁州, 北屯, 铁门关, 双河, 可克达拉, 昆玉
云南: 昆明, 保山, 楚雄州, 大理州, 德宏州, 迪庆州, 红河州, 丽江, 临沧, 怒江州, 普洱, 曲靖, 昭通, 文山, 西双版纳傣族自治州, 玉溪
浙江: 杭州, 湖州, 嘉兴, 金华, 丽水, 宁波, 衢州, 绍兴, 台州, 温州, 舟山
import requests import demjson import re import calendar import csv headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36\ (KHML, like Gecko) Chrome/52.0.2743.116 Safari/537.36', } def get_url(date): url = 'https://www.timeanddate.com/scripts/cityajax.php?n=china/shenzhen&mode=historic' url += '&hd=' + date url += '&month=' + str(int(date[4:6])) url += '&year=' + date[:4] + '&json=1' return url # input: type(str) eg:'20170601' def crawl_single_day(date): response = requests.get(get_url(date), headers=headers) response_list = demjson.decode(response.text) for weather in response_list: w_time = re.compile(r'^\d+:\d+').search(weather['c'][0]['h']).group(0) w_temperature = re.compile( r'^-?\d+').search(weather['c'][2]['h']).group(0) w_weather = re.compile( r'^(.*?)\.').search(weather['c'][3]['h']).group(1) if weather['c'][4]['h'] == 'No wind': w_wind_speed = '0' else: w_wind_speed = re.compile( r'^\d+').search(weather['c'][4]['h']).group(0) w_wind_direction = re.compile( r'title=\"(.*?)\"').search(weather['c'][5]['h']).group(1) w_humidity = weather['c'][6]['h'] w_barometer = re.compile(r'^\d+').search(weather['c'][7]['h']).group(0) w_visibility = weather['c'][8]['h'] if w_visibility != 'N/A': w_visibility=re.compile(r'^\d+').search(w_visibility).group(0) yield [date, w_time, w_temperature, w_weather, w_wind_speed, w_wind_direction, w_humidity, w_barometer, w_visibility] # input: type(int) eg: year=2017, month=6 def crawl_single_month(year, month): _, num_day = calendar.monthrange(year, month) month_str = str(year) if month < 10: month_str += '0' + str(month) else: month_str += str(month) day_list = list(range(1, num_day + 1)) for day in day_list: if day < 10: for weather in crawl_single_day(month_str + '0' + str(day)): yield weather else: for weather in crawl_single_day(month_str + str(day)): yield weather if __name__ == "__main__": with open('weather0.csv', 'w', encoding='utf-8', newline='') as file: writer = csv.writer(file) writer.writerow('date time temperature weather wind_speed wind_direction humidity barometer visibility'.split()) for month in range(7, 13): writer.writerows(crawl_single_month(2017, month)) with open('weather1.csv', 'w', encoding='utf-8', newline='') as file: writer = csv.writer(file) writer.writerow('date time temperature weather wind_speed wind_direction humidity barometer visibility'.split()) writer.writerows(crawl_single_day('20210401'))
对 20210401的深圳天气数据爬取获得的 csv 文件如下图所示:
当然啦,中国地面气象日值数据集发布的现成的气象数据包括有气温、气压、相对湿度、降水、蒸发、风向风速、日照太阳辐射等等多种指标,全国共2400+站点。
数据来源请引用:中国日值气象站点数据集.地理遥感生态网科学数据注册与出版系统(http://www.gisrs.cn/),2022.DOI:10.12020/2022090502