用Python做天氣預報查詢

3.1 問題

編寫一個display_weather.py腳本,實現以下功能:
1.運行程序時,屏幕將出現你所在城市各區縣名字
2.用戶指定查詢某區縣,屏幕上將出現該區縣當前的氣溫、溼度、風向、風速等

3.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:找到天氣信息規律

1.首先我們想要實現的功能是天氣預報,從哪獲取天氣這是一個問題,在這裏可以使用http://www.weather.com.cn/data/sk/101051301.html這個應用程序編程接口,101051301是城市的ID,可以到http://www.weather.com.cn/查看,替換後瀏覽器打開,如圖-6所示,圖示爲json格式:

在這裏插入圖片描述
圖-6

注意:圖中看不懂的文字是編碼問題

2.從圖-1中可以看出cityid就是城市ID,temp是溫度,SD是溼度,我們編寫代碼可以直接獲取到網站相應信息,編寫腳本wather.py:

01.[root@ localhost day12]# vim weather.py
02.#!/usr/bin/python     #這裏是python的目錄
03.from urllib.request import urlopen
04.import json
05.
06.#打開網頁,使用urllib模塊的urlopen函數打開url,賦值給html
07.html = urlopen('http://www.weather.com.cn/data/sk/101010100.html')
08.#讀html獲取的數據,保存到data
09.data = html.read()
10.#從data中獲取我們想要的信息,json.loads()是將json格式數據轉換爲字典
11.#(可以理解爲json.loads()函數是將字符串轉化爲字典)
12.print(json.loads(data))
13.#關閉html
14.html.close()

3.執行腳本結果如下:

01.[root@ localhost day12]# python3 weather.py
02.{‘weatherinfo’:{‘city’:‘北京’,‘cityid’:‘101010100’,‘temp’:‘27.9’,‘WD’:‘南風’,‘WS’:‘小於3級’,‘SD’:‘28%’,‘AP’:‘1002hPa’,‘njd’:‘暫無實況’,‘WSE’:‘<3’,‘time’:‘17:55’,‘sm’:‘2.1’,‘isRadar’:‘1’,‘Radar’:‘JC_RADAR_AZ9010_JB’}}

從以上腳本執行結果中我們可以看到,從網站中獲取到的數據是以字典形式顯示,顯示信息有城市、城市id,溫度、風向等等,根據這種規律,編寫下面代碼

步驟二:編寫代碼實現如下功能

1.定義一個字典,該字典中鍵‘0’和‘1’對應的值爲天氣網址中城市對應的id,城市不同id則不同

2.運行程序時,屏幕將出現你所在城市名字

3.當用戶指定查詢某城市(即輸入0或1時)

4.調用get_weather函數,函數的實際參數爲city_codes字典對應值(即對應的城市id)

  1. 打開天氣網頁,使用urllib模塊的urlopen函數打開url,賦值給html

6.讀html獲取的數據,用json.loads()獲取天氣信息,獲取到的信息爲字典形式

7.從獲取到的字典數據中提取氣溫、溼度、風向、風速等信息,保存在output變量中

8.將output變量作爲get_weather函數的返回值,打印在屏幕上

01.[root@ localhost day12]# vim display_weather.py
02.#!/usr/bin/python
03.
04.from urllib.request import urlopen
05.import json
06.
07.def get_weather(city_code):        #定義一個輸入城市id的函數
08.5.打開天氣網頁,使用urllib模塊的urlopen函數打開url,賦值給html
09.    url = 'http://www.weather.com.cn/data/sk/%s.html' % city_code
10.    html = urlopen(url)
11.6.讀html獲取的數據,用json.loads()獲取我們想要的信息
12.#json.loads()是將json格式數據轉換爲字典
13.#(可以理解爲json.loads()函數是將字符串轉化爲字典)
14.    data = json.loads(html.read())
15.7.output爲返回值,即最終屏幕顯示的信息
16.    output = '風向:%s, 風力: %s, 溫度:%s, 溼度:%s' % (
17.#data獲取到的天氣信息爲字典,該字典中weatherinfo鍵對應的值還是一個字典,這個字典中‘WD’鍵對應的值是風向,‘WS’鍵對應的值是風力,'temp'鍵對應的值是溫度,'SD'鍵對應的值是溼度,利用鍵值對關係將相應數據顯示出來即可
18.        data['weatherinfo']['WD'],
19.        data['weatherinfo']['WS'],
20.        data['weatherinfo']['temp'],
21.        data['weatherinfo']['SD']
22.    )
23.    return output
24.
25.
26.
27.if __name__ == '__main__':
28.1.定義字典:鍵對應的值爲天氣網站網址接口中城市ID
29.    city_codes = { '0': '101010100', '1': '101121404'}
30.2.代碼執行後,屏幕給出的提示信息
31.    prompt = """(0) 北京
32.(1) 臺兒莊
33.請選擇(0/1): """
34.3.根據提示信息,輸入0或1
35.    choice = input(prompt)
36.4.調用get_weather函數,其實際參數爲city_codes字典對應值
37.8.打印調用get_weather函數返回值
38.    print(get_weather(city_codes[choice]))

步驟三:測試腳本執行

01.[root@ localhost day12]# python3 display_weather.py
02.(0) 北京
03.(1) 臺兒莊
04.請選擇(0/1): 0
05. 風向:南風, 風力: 小於3級, 溫度:27.9, 溼度:28%
06.[root@ localhost day12]# python3 display_weather.py
07.(0) 北京
08.(1) 臺兒莊
09.請選擇(0/1): 1
10. 風向:東北風, 風力: 小於3級, 溫度:22.3, 溼度:64%


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章