0. 前言
Python实战之天气预测
1. 爬取数据
这里使用request
库和正则表达式进行数据的爬取
爬取网上的历史天气数据,这里我使用了成都的历史天气数据(2011-2018年)
之后的天气预测也将会使用成都的历史天气数据
目标网址: http://tianqi.2345.com
这里说明:
由于数据存在缺失,2016年以前的空气质量数据没有找到
通过分析网址我们得到最后的数据都是存在于js文件中的。
1.1 构造日期:
1 2 3 4 5 6 7 8 9 10
| for year in range(2011, 2019): for month in range(1, 13): if month == 12 and year > 2016: month = "%.2d".format() % month url = "http://tianqi.2345.com/t/wea_history/js/" + str(year) + str(month) + "/56294_" + str(year) + str( month) + ".js" else: url = "http://tianqi.2345.com/t/wea_history/js/56294_" + str(year) + str(month) + ".js" print(url) getData(url)
|
通过分析链接可以,在2016年以前,每个12月的链接和一般的链接是不一样的。
所以我们加上了判断语句,当然细心的小伙伴应该可以看到我们这里还会构造出2019年的链接,这个错误链接我们在后面获取数据的时候会进行处理,若链接是没用的,我们选择不处理,直接pass。
1.2 获取网页源码
1 2 3 4 5 6
| response = requests.get(url) if response.status\_code == 200: html = response.text return html else: return None
|
1.3 使用正则表达式提取数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| results = re.findall("(\{ymd.*?\})", html) for result in results: date = re.search("(\d{4}-\d{1,2}-\d{1,2})", result).group().strip() bWendu = re.search("bWendu:'(.*?)',yWendu", result).groups()[0].strip() yWendu = re.search("yWendu:'(.*?)',tianqi", result).groups()[0].strip() tianqi = re.search("tianqi:'(.*?)',fengxiang", result).groups()[0].strip() fengxiang = re.search("fengxiang:'(.*?)',fengli", result).groups()[0].strip() fengli = re.search("fengli:'(.*?)'", result).groups()[0].strip() try: aqi = re.search("aqi:'(.*?)',aqiInfo", result).groups()[0].strip() except: aqi = 'NULL' try: aqiInfo = re.search("aqiInfo:'(.*?)',aqiLevel", result).groups()[0].strip() except: aqiInfo = 'NULL' try: aqiLevel = re.search("aqiLevel:'(\d{1,2})'}", result).groups()[0].strip() except: aqiLevel = 'NULL'
|
使用正则表达式匹配出上面那些信息,由于空气指数系列数据2016年前不存在,所以我们设置它为NULL。
1.4 组合数据写入文件
1 2 3
| s = date + " " + bWendu + " " + yWendu + " " + tianqi + " " + fengxiang + " " + fengli + " " + aqi + " " + aqiInfo + " " + aqiLevel + "\n" with open('cd_weather.txt', 'a', encoding='utf-8') as f: f.write(s)
|
得到成都历史天气数据(2011-2018年)(点击可下载)
1.5 分析数据
这里暂时简单分析数据,之后会有文章进行详细分析
可见数据变化趋势是非常明显的。
本文代码下载地址:https://img.yingjoy.cn/attachment/2018/05/weathergetData.py