本文首發地址:
https://yishuihancheng.blog.csdn.net/article/details/102898853
下午正好有點時間就把之前想做的一個工作給結束掉,之前網上搜索數據的時候發現了一個在線的數據結果,提供了一下正好需要的數據,一般的氣象類網站大多隻能提供未來一週的預測數據,而這個網站則可以提供未來半月的預測數據,當然,免費的版本可能顆粒度沒有那麼的高,不過對於一般的應用需求來說已經是足夠了的。
因為整體的實現來說非常簡單這裡就不再累述了,直接帖出來實現的代碼如下所示:
#!usr/bin/env python # encoding:utf-8 from __future__ import division """ __Author__:沂水寒城 功能: python 獲取指定城市【昨日天氣+未來15天預報天氣+空氣質量+氣象數據】 """ import sys import json import requests if sys.version_info == 2: reload(sys) sys.setdefaultencoding("utf-8") pre_url = "http://t.weather.sojson.com/api/weather/city/" def weather(city_code="101210101"): """ 藉助於在線接口獲取所需數據 """ url = pre_url + city_code data = requests.get(url).json() res_list = [] if data["status"] == 200: cityInfo = data["cityInfo"] forest_data = data["data"]["forecast"] yesterday_data = data["data"]["yesterday"] forest_data.append(yesterday_data) key_list = [ "date", "high", "low", "ymd", "week", "sunrise", "sunset", "aqi", "fx", "fl", "type", "notice", ] for one_day in forest_data: one_list = [] for i in range(len(key_list)): try: one_list.append(one_day[key_list[i]]) except: one_list.append("NULL") res_list.append(one_list) res_list = sorted(res_list, key=lambda e: e[0]) return res_list if __name__ == "__main__": res_list = weather(city_code="101210101") for one in res_list: print(one)
以下述鏈接【北京市】為例:
http://t.weather.sojson.com/api/weather/city/101010100
在瀏覽器中回車後返回的結果如下所示:
{"message":"success感謝又拍雲(upyun.com)提供CDN贊助","status":200,"date":"20191104","time":"2019-11-04 13:39:02","cityInfo":{"city":"北京市","citykey":"101010100","parent":"北京","updateTime":"12:54"},"data":{"shidu":"56%","pm25":44.0,"pm10":58.0,"quality":"良","wendu":"13","ganmao":"極少數敏感人群應減少戶外活動","forecast":[{"date":"04","high":"高溫 16℃","low":"低溫 5℃","ymd":"2019-11-04","week":"星期一","sunrise":"06:44","sunset":"17:10","aqi":70,"fx":"西南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"05","high":"高溫 16℃","low":"低溫 5℃","ymd":"2019-11-05","week":"星期二","sunrise":"06:46","sunset":"17:09","aqi":90,"fx":"東北風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"06","high":"高溫 15℃","low":"低溫 3℃","ymd":"2019-11-06","week":"星期三","sunrise":"06:47","sunset":"17:08","aqi":110,"fx":"西南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"07","high":"高溫 12℃","low":"低溫 2℃","ymd":"2019-11-07","week":"星期四","sunrise":"06:48","sunset":"17:07","aqi":70,"fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"08","high":"高溫 16℃","low":"低溫 1℃","ymd":"2019-11-08","week":"星期五","sunrise":"06:49","sunset":"17:06","aqi":80,"fx":"西南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"09","high":"高溫 13℃","low":"低溫 3℃","ymd":"2019-11-09","week":"星期六","sunrise":"06:50","sunset":"17:05","aqi":52,"fx":"北風","fl":"<3級","type":"陰","notice":"不要被陰雲遮擋住好心情"},{"date":"10","high":"高溫 17℃","low":"低溫 3℃","ymd":"2019-11-10","week":"星期日","sunrise":"06:51","sunset":"17:04","fx":"西北風","fl":"3-4級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"11","high":"高溫 15℃","low":"低溫 4℃","ymd":"2019-11-11","week":"星期一","sunrise":"06:53","sunset":"17:03","fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"12","high":"高溫 16℃","low":"低溫 4℃","ymd":"2019-11-12","week":"星期二","sunrise":"06:54","sunset":"17:02","fx":"西風","fl":"4-5級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"13","high":"高溫 11℃","low":"低溫 -1℃","ymd":"2019-11-13","week":"星期三","sunrise":"06:55","sunset":"17:01","fx":"西北風","fl":"<3級","type":"陰","notice":"不要被陰雲遮擋住好心情"},{"date":"14","high":"高溫 3℃","low":"低溫 -3℃","ymd":"2019-11-14","week":"星期四","sunrise":"06:56","sunset":"17:00","fx":"西北風","fl":"5-6級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"15","high":"高溫 5℃","low":"低溫 -3℃","ymd":"2019-11-15","week":"星期五","sunrise":"06:57","sunset":"16:59","fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"16","high":"高溫 6℃","low":"低溫 -2℃","ymd":"2019-11-16","week":"星期六","sunrise":"06:58","sunset":"16:59","fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"17","high":"高溫 8℃","low":"低溫 0℃","ymd":"2019-11-17","week":"星期日","sunrise":"06:59","sunset":"16:58","fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"18","high":"高溫 8℃","low":"低溫 2℃","ymd":"2019-11-18","week":"星期一","sunrise":"07:01","sunset":"16:57","fx":"東風","fl":" <3級","type":"小雨","notice":"雨雖小,注意保暖別感冒"}],"yesterday":{"date":"03","high":"高溫 14℃","low":"低溫 4℃","ymd":"2019-11-03","week":"星期日","sunrise":"06:43","sunset":"17:11","aqi":54,"fx":"東北風","fl":"<3級","type":"多雲","notice":"陰晴之間,謹防紫外線侵擾"}}}
代碼輸出如下所示:
[u'03', u'\u9ad8\u6e29 14\u2103', u'\u4f4e\u6e29 4\u2103', u'2019-11-03', u'\u661f\u671f\u65e5', u'06:43', u'17:11', 54, u'\u4e1c\u5317\u98ce', u'<3\u7ea7', u'\u591a\u4e91', u'\u9634\u6674\u4e4b\u95f4\uff0c\u8c28\u9632\u7d2b\u5916\u7ebf\u4fb5\u6270'] [u'04', u'\u9ad8\u6e29 16\u2103', u'\u4f4e\u6e29 5\u2103', u'2019-11-04', u'\u661f\u671f\u4e00', u'06:44', u'17:10', 70, u'\u897f\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'05', u'\u9ad8\u6e29 16\u2103', u'\u4f4e\u6e29 5\u2103', u'2019-11-05', u'\u661f\u671f\u4e8c', u'06:46', u'17:09', 90, u'\u4e1c\u5317\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'06', u'\u9ad8\u6e29 15\u2103', u'\u4f4e\u6e29 3\u2103', u'2019-11-06', u'\u661f\u671f\u4e09', u'06:47', u'17:08', 110, u'\u897f\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'07', u'\u9ad8\u6e29 12\u2103', u'\u4f4e\u6e29 2\u2103', u'2019-11-07', u'\u661f\u671f\u56db', u'06:48', u'17:07', 70, u'\u5357\u98ce', u' <3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'08', u'\u9ad8\u6e29 16\u2103', u'\u4f4e\u6e29 1\u2103', u'2019-11-08', u'\u661f\u671f\u4e94', u'06:49', u'17:06', 80, u'\u897f\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'09', u'\u9ad8\u6e29 13\u2103', u'\u4f4e\u6e29 3\u2103', u'2019-11-09', u'\u661f\u671f\u516d', u'06:50', u'17:05', 52, u'\u5317\u98ce', u'<3\u7ea7', u'\u9634', u'\u4e0d\u8981\u88ab\u9634\u4e91\u906e\u6321\u4f4f\u597d\u5fc3\u60c5'] [u'10', u'\u9ad8\u6e29 17\u2103', u'\u4f4e\u6e29 3\u2103', u'2019-11-10', u'\u661f\u671f\u65e5', u'06:51', u'17:04', 'NULL', u'\u897f\u5317\u98ce', u'3-4\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'11', u'\u9ad8\u6e29 15\u2103', u'\u4f4e\u6e29 4\u2103', u'2019-11-11', u'\u661f\u671f\u4e00', u'06:53', u'17:03', 'NULL', u'\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'12', u'\u9ad8\u6e29 16\u2103', u'\u4f4e\u6e29 4\u2103', u'2019-11-12', u'\u661f\u671f\u4e8c', u'06:54', u'17:02', 'NULL', u'\u897f\u98ce', u'4-5\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'13', u'\u9ad8\u6e29 11\u2103', u'\u4f4e\u6e29 -1\u2103', u'2019-11-13', u'\u661f\u671f\u4e09', u'06:55', u'17:01', 'NULL', u'\u897f\u5317\u98ce', u'<3\u7ea7', u'\u9634', u'\u4e0d\u8981\u88ab\u9634\u4e91\u906e\u6321\u4f4f\u597d\u5fc3\u60c5'] [u'14', u'\u9ad8\u6e29 3\u2103', u'\u4f4e\u6e29 -3\u2103', u'2019-11-14', u'\u661f\u671f\u56db', u'06:56', u'17:00', 'NULL', u'\u897f\u5317\u98ce', u'5-6\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'15', u'\u9ad8\u6e29 5\u2103', u'\u4f4e\u6e29 -3\u2103', u'2019-11-15', u'\u661f\u671f\u4e94', u'06:57', u'16:59', 'NULL', u'\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'16', u'\u9ad8\u6e29 6\u2103', u'\u4f4e\u6e29 -2\u2103', u'2019-11-16', u'\u661f\u671f\u516d', u'06:58', u'16:59', 'NULL', u'\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'17', u'\u9ad8\u6e29 8\u2103', u'\u4f4e\u6e29 0\u2103', u'2019-11-17', u'\u661f\u671f\u65e5', u'06:59', u'16:58', 'NULL', u'\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'18', u'\u9ad8\u6e29 8\u2103', u'\u4f4e\u6e29 2\u2103', u'2019-11-18', u'\u661f\u671f\u4e00', u'07:01', u'16:57', 'NULL', u'\u4e1c\u98ce', u'<3\u7ea7', u'\u5c0f\u96e8', u'\u96e8\u867d\u5c0f\uff0c\u6ce8\u610f\u4fdd\u6696\u522b\u611f\u5192'] [Finished in 0.4s]
有需要的話可以親自動手實踐一下,本質上就是【網絡請求+數據解析】。