查询天气 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)

    原文作者:anyezhiyin
    原文地址: https://blog.csdn.net/AnYeZhiYin/article/details/83244812
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞