查詢天氣 python3可識別輸入城市
阿新 • • 發佈:2018-12-16
import urllib.request import re from urllib.request import quote import ast def urlopen(url): req = urllib.request.Request(url) req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36") html = urllib.request.urlopen(req) html = html.read() return html #urlopen 開啟連結 並加了heaaders def nam(): print('請輸入城市名字, 比如是深圳市,就只需要輸入‘深圳’') name = input('請輸入城市名:') name = quote(name) #這裡是中文要轉成連結程式碼用 from urllib.request import quote 用這個函式name = quote(name) 就可以了才不會報錯 url = 'http://toy1.weather.com.cn/search?cityname={}'.format(name) #這個是查詢介面加上城市名 htm = urlopen(url) #返回的資料裡面會有城市的程式碼 htm = htm.decode('utf-8') return htm #這裡返回的是一個字串 裡面有很多 def dia(): daima = nam() while daima == '([])': #這個迴圈是為了判斷輸入的城市是否正確,比如輸入‘城市’ 中國沒這個名字的城市就會讓你重新輸入並且無限迴圈 直到正確 daima = nam() #這就是如果輸錯了就會執行這一行程式碼並且重新把資料傳回daima這個變數,再一次迴圈對比 如果==([])就說明寫錯了 需要再輸入,如果對了就會進入下一個步驟 daima = re.search(r'("ref":")(\d*?)(~)',daima) #資料正確就用正則表示式提取需要的城市程式碼 daima = daima.group(2) #group(2)這個就是我們需要的 取出來是str型別的 可以直接用 return daima #然後返回這個城市程式碼 def cha(dianma): #現在我們得到程式碼加入到連結裡面就可以訪問了 url1 = 'http://www.weather.com.cn/data/sk/{}.html'.format(daima) data = urlopen(url1) data = data.decode('utf-8') datadic = ast.literal_eval(data) #返回的資料是一個字串 要轉成字典方便取資料 chen = datadic['weatherinfo']['city'] wendu = datadic['weatherinfo']['temp'] feng = datadic['weatherinfo']['WD'] shidu = datadic['weatherinfo']['SD'] time = datadic['weatherinfo']['time'] #這裡面就是資料了 可以直接取出來 然後輸入 print('城市:'+chen+'\n') print('溫度'+wendu+'\n') print('風向'+feng+'\n') print('溼度'+shidu+'\n') print('時間'+time+'\n') #輸入的資料 daima = dia() cha(daima)