1. 程式人生 > >查詢天氣 python3可識別輸入城市

查詢天氣 python3可識別輸入城市

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)