Python学习笔记——天气查询代码

天气查询代码1

# 此程序无法运行,因为中国天气网的api接口被关闭了
import urllib.request
import json
import pickle


#建立城市字典
pickle_file = open(r'F:\codes\python\python\fishc\file\city_date.pkl', 'rb')
city = pickle.load(pickle_file)


password = input('请输入城市:')
name1 = city[password]

# header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}
# req = urllib.request.Request(url='http://m.weather.com.cn/data/'+name1+'.html',data=None,headers=headers)
# # 接着把File那句改成
# File1 = urllib.request.urlopen(req)

File1 = urllib.request.urlopen('http://m.weather.com.cn/data/'+ name1 +'.html')#打开url
weatherHTML = File1.read().decode('utf-8')#读入打开的url
weatherJSON = json.JSONDecoder().decode(weatherHTML)#创建json
weatherInfo = weatherJSON['weatherinfo']
#打印信息
print ( '城市:', weatherInfo['city'])
print ('时间:', weatherInfo['date_y'])
print ( '24小时天气:')
print ('温度:', weatherInfo['temp1'])
print ('天气:', weatherInfo['weather1'])
print ('风速:', weatherInfo['wind1'])
print ('紫外线:', weatherInfo['index_uv'])
print ('穿衣指数:', weatherInfo['index_d'])
print ('48小时天气:')
print ('温度:', weatherInfo['temp2'])
print ('天气:', weatherInfo['weather2'])
print ('风速:', weatherInfo['wind2'])
print ('紫外线:', weatherInfo['index48_uv'])
print ('穿衣指数:', weatherInfo['index48_d'])
print ('72小时天气:')
print ('温度:', weatherInfo['temp3'])
print ('天气:', weatherInfo['weather3'])
print ('风速:', weatherInfo['wind3'])
input ('按任意键退出:')
请输入城市:南丰

---------------------------------------------------------------------------

HTTPError                                 Traceback (most recent call last)

<ipython-input-1-43b6de524dbb> in <module>()
     18 # File1 = urllib.request.urlopen(req)
     19 
---> 20 File1 = urllib.request.urlopen('http://m.weather.com.cn/data/'+ name1 +'.html')#打开url
     21 weatherHTML = File1.read().decode('utf-8')#读入打开的url
     22 weatherJSON = json.JSONDecoder().decode(weatherHTML)#创建json

F:\tools\Anaconda\anaconda\lib\urllib\request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    221     else:
    222         opener = _opener
--> 223     return opener.open(url, data, timeout)
    224 
    225 def install_opener(opener):

F:\tools\Anaconda\anaconda\lib\urllib\request.py in open(self, fullurl, data, timeout)
    530         for processor in self.process_response.get(protocol, []):
    531             meth = getattr(processor, meth_name)
--> 532             response = meth(req, response)
    533 
    534         return response

F:\tools\Anaconda\anaconda\lib\urllib\request.py in http_response(self, request, response)
    640         if not (200 <= code < 300):
    641             response = self.parent.error(
--> 642                 'http', request, response, code, msg, hdrs)
    643 
    644         return response

F:\tools\Anaconda\anaconda\lib\urllib\request.py in error(self, proto, *args)
    568         if http_err:
    569             args = (dict, 'default', 'http_error_default') + orig_args
--> 570             return self._call_chain(*args)
    571 
    572 # XXX probably also want an abstract factory that knows when it makes

F:\tools\Anaconda\anaconda\lib\urllib\request.py in _call_chain(self, chain, kind, meth_name, *args)
    502         for handler in handlers:
    503             func = getattr(handler, meth_name)
--> 504             result = func(*args)
    505             if result is not None:
    506                 return result

F:\tools\Anaconda\anaconda\lib\urllib\request.py in http_error_default(self, req, fp, code, msg, hdrs)
    648 class HTTPDefaultErrorHandler(BaseHandler):
    649     def http_error_default(self, req, fp, code, msg, hdrs):
--> 650         raise HTTPError(req.full_url, code, msg, hdrs, fp)
    651 
    652 class HTTPRedirectHandler(BaseHandler):

HTTPError: HTTP Error 403: Forbidden

天气查询代码2

import urllib.request
import gzip
import json
print('------天气查询------')
def get_weather_data() :
    city_name = input('请输入要查询的城市名称:')
    url1 = 'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(city_name)
    url2 = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101010100'
    #网址1只需要输入城市名,网址2需要输入城市代码
    #print(urllib.parse.quote(city_name))
    weather_data = urllib.request.urlopen(url1).read()
    #读取网页数据
    weather_data = gzip.decompress(weather_data).decode('utf-8')
    #解压网页数据
    weather_dict = json.loads(weather_data)
    #将json数据转换为dict数据
    return weather_dict

def show_weather(weather_data):
    weather_dict = weather_data 
    #将json数据转换为dict数据
    if weather_dict.get('desc') == 'invilad-citykey':
        print('你输入的城市名有误,或者天气中心未收录你所在城市')
    elif weather_dict.get('desc') =='OK':
        forecast = weather_dict.get('data').get('forecast')
        print('城市:',weather_dict.get('data').get('city'))
        print('温度:',weather_dict.get('data').get('wendu')+'℃ ')
        print('感冒:',weather_dict.get('data').get('ganmao'))
        print('风向:',forecast[0].get('fengxiang'))
        print('风级:',forecast[0].get('fengli'))
        print('高温:',forecast[0].get('high'))
        print('低温:',forecast[0].get('low'))
        print('天气:',forecast[0].get('type'))
        print('日期:',forecast[0].get('date'))
        print('*******************************')
        four_day_forecast =input('是否要显示未来四天天气,是/否:')
        if four_day_forecast == '是' or four_day_forecast == 'Y' or four_day_forecast == 'y':
            for i in range(1,5):
                print('日期:',forecast[i].get('date'))
                print('风向:',forecast[i].get('fengxiang'))
                print('风级:',forecast[i].get('fengli'))
                print('高温:',forecast[i].get('high'))
                print('低温:',forecast[i].get('low'))
                print('天气:',forecast[i].get('type'))
                print('--------------------------')
    print('***********************************')
    

show_weather(get_weather_data())
------天气查询------
请输入要查询的城市名称:南丰
%E5%8D%97%E4%B8%B0
城市: 南丰
温度: 25℃ 
感冒: 各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。
风向: 南风
风级: <![CDATA[<3级]]>
高温: 高温 28℃
低温: 低温 16℃
天气: 晴
日期: 17日星期三
*******************************
是否要显示未来四天天气,是/否:n
***********************************

天气查询代码3

import urllib.request
import gzip
import json
print('------021王掌柜 天气查询------')
def get_weather_data():
    city_name = input('请输入要查询的城市名称:')
    url1 = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name)
    url2 = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101010100'
    #网址1只需要输入城市名,网址2需要输入城市代码
    #print(url1)
    weather_data = urllib.request.urlopen(url1).read()
    #读取网页数据
    weather_data = gzip.decompress(weather_data).decode('utf-8')
    #解压网页数据
    weather_dict = json.loads(weather_data)
    #将json数据转换为dict数据
    return weather_dict

def show_weather(weather_data):
    weather_dict = weather_data 
    #将json数据转换为dict数据
    if weather_dict.get('desc') == 'invilad-citykey':
        print('你输入的城市名有误,或者天气中心未收录你所在城市')
    elif weather_dict.get('desc') =='OK':
        forecast = weather_dict.get('data').get('forecast')
        print('城市:',weather_dict.get('data').get('city'))
        print('温度:',weather_dict.get('data').get('wendu')+'℃ ')
        print('感冒:',weather_dict.get('data').get('ganmao'))
        print('风向:',forecast[0].get('fengxiang'))
        print('风级:',forecast[0].get('fengli'))
        print('高温:',forecast[0].get('high'))
        print('低温:',forecast[0].get('low'))
        print('天气:',forecast[0].get('type'))
        print('日期:',forecast[0].get('date'))
        print('*******************************')
        four_day_forecast =input('是否要显示未来四天天气,是/否:')
        if four_day_forecast == '是' or four_day_forecast =='y':
            for i in range(1,5):
                print('日期:',forecast[i].get('date'))
                print('风向:',forecast[i].get('fengxiang'))
                print('风级:',forecast[i].get('fengli'))
                print('高温:',forecast[i].get('high'))
                print('低温:',forecast[i].get('low'))
                print('天气:',forecast[i].get('type'))
                print('--------------------------')
    print('***********************************')

show_weather(get_weather_data())
b = 'yes'
b = input('查询继续,输入 NO 退出程序:')
while (b!= 'no') and (b!='NO'):
    show_weather(get_weather_data())
------021王掌柜 天气查询------
请输入要查询的城市名称:南丰
城市: 南丰
温度: 25℃ 
感冒: 各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。
风向: 南风
风级: <![CDATA[<3级]]>
高温: 高温 28℃
低温: 低温 16℃
天气: 晴
日期: 17日星期三
*******************************
是否要显示未来四天天气,是/否:否
***********************************
查询继续,输入 NO 退出程序:no

天气查询代码4

# 由于未安装easygui模块,所以这里也暂时不能运行
import urllib.request
import gzip
import json
import easygui as g

g.msgbox("------天气查询------")
def get_weather_data() :
    msg = "请输入要查询的城市名称:"
    title = "天气查询器"
    city_name = g.enterbox(msg, title)
    #city_name = input('请输入要查询的城市名称:')
    url1 = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name)
    url2 = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101010100'
    #网址1只需要输入城市名,网址2需要输入城市代码
    #print(url1)
    weather_data = urllib.request.urlopen(url1).read()
    #读取网页数据
    weather_data = gzip.decompress(weather_data).decode('utf-8')
    #解压网页数据
    weather_dict = json.loads(weather_data)
    #将json数据转换为dict数据
    return weather_dict

def query_weather(weather_dict):
        weather_dict.get('desc') =='OK'
        forecast = weather_dict.get('data').get('forecast')
        msg = "查询天气信息如下"
        title = "查询结果"
        text = "城市:"+weather_dict.get('data').get('city')+\
               "\n"+"温度:"+ weather_dict.get('data').get('wendu')+'℃ '+\
               "\n"+"感冒:"+ weather_dict.get('data').get('ganmao')+\
               "\n"+"风向:"+ forecast[0].get('fengxiang')+\
               "\n"+"风级:"+ forecast[0].get('fengli')+\
               "\n"+"高温:"+ forecast[0].get('high')+\
               "\n"+"低温:"+ forecast[0].get('low')+\
               "\n"+"天气:"+ forecast[0].get('type')+\
               "\n"+"日期:"+ forecast[0].get('date')
        g.textbox(msg,title,text)
        
        msg = "是否要显示未来四天天气,是/否:"
        title = "未来天气"
        four_day_forecast = g.enterbox(msg, title)
        if four_day_forecast == '是':
            text = ''
            for i in range(1,5):
                msg = "查询天气信息如下"
                title = "查询结果"
                text += '日期:'+forecast[i].get('date')+\
                "\n"+'风向:'+forecast[i].get('fengxiang')+\
                "\n"+'风级:'+forecast[i].get('fengli')+\
                "\n"+'高温:'+forecast[i].get('high')+\
                "\n"+'低温:'+forecast[i].get('low')+\
                "\n"+'天气:'+forecast[i].get('type')+\
                "\n"+'******************************'+"\n"
            g.textbox(msg,title,text)
        elif four_day_forecast == '否':
            g.msgbox('您请求不查询未来四天天气')
        else:
            g.msgbox('您输入的信息有误')

def show_weather(weather_data):
    weather_dict = weather_data 
    #将json数据转换为dict数据
    if weather_dict.get('desc') == 'invilad-citykey':
        g.msgbox("你输入的城市名有误,或者天气中心未收录你所在城市")
        weather_dict = get_weather_data()
        query_weather(weather_dict)

    else:
        query_weather(weather_dict)
            

show_weather(get_weather_data())

---------------------------------------------------------------------------

ModuleNotFoundError                       Traceback (most recent call last)

<ipython-input-3-89f039e01c80> in <module>()
      2 import gzip
      3 import json
----> 4 import easygui as g
      5 
      6 g.msgbox("------天气查询------")

ModuleNotFoundError: No module named 'easygui'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,726评论 0 30
  • 2017/3/14 RDBMS:关系型数据库管理系统 关系模型独立于语言 SQL有几种不同类型的语言:数据定义语言...
    ancherl阅读 1,608评论 0 6
  • 人的心事最不易捉摸,就像正夏,为晴为雨随时变,甚至,连你自己的心思也捉摸不透。在太平盛世,这人因着礼法的约束,受着...
    东东和阿东阅读 133评论 0 0
  • 又一月过去,从开始的好奇、激动,慢慢冷静了一些。我曾说对于志工活动没有太多期待,心态轻松,顺其自然,因为当...
    史云芬阅读 146评论 0 0
  • 后来,我才明白,有些人的心里从始至终也没有我们的一席之地。
    左岸同学阅读 99评论 0 0