python实现天气功能查询

在网上发现了一个非常方便的天气API,就用Python试着用了一下。参数是挺少的,用起来也方便。

一、介绍

我们先来看一下实现的程序有什么功能:

在这里插入图片描述
功能也是非常简单的,输入城市,显示当前城市、当前日期时间、温度和天气。

API使用的是国家气象局的接口,完全免费的:
http://t.weather.sojson.com/api/weather/city/101010100

这个是以北京为例的接口,其中最后的数字101010100就是北京的城市代码。查询其它城市只需要把城市代码修改成其它城市的就可以了。

二、返回数据

因为返回的数据比较多,就不完整的列举了。请求成功时,大致数据如下:
在这里插入图片描述

里面还有很多没有拉开的地方,然后我们尝试访问一个错误的城市代码:

{"message":"Request resource not found.","status":404}

代码讲解

代码是非常简单的,主要就是使用了两个模块:requests、json。一个网络请求,一个json解析。

import requests, json

#api地址
url = 'http://t.weather.sojson.com/api/weather/city/'

#输入城市中文
city = input("请输入你要查询的城市:")

#读取json文件
f = open('city.json', 'rb')

#使用json模块的load方法加载json数据,返回一个字典
cities = json.load(f)

#通过城市的中文获取城市代码
city = cities.get(city)

#网络请求,传入请求api+城市代码
response = requests.get(url + city)

#将数据以json形式返回,这个d就是返回的json数据
d = response.json()

#当返回状态码为200,输出天气状况
if(d['status'] == 200):
    print("城市:", d["cityInfo"]["parent"], d["cityInfo"]["city"])
    print("时间:", d["time"], d["data"]["forecast"][0]["week"])
    print("温度:", d["data"]["forecast"][0]["high"], d["data"]["forecast"][0]["low"])
    print("天气:", d["data"]["forecast"][0]["type"])

city.json

{
    "七台河": "101051002",
    "万宁": "101310215",
    "万州天城": "101041200",
    "万州龙宝": "101041300",
    "万盛": "101040600",
    "三亚": "101310201",
    "三明": "101230801",
    "三门峡": "101181701",
    "上海": "101020100",
    "上饶": "101240301",
    "东丽": "101030400",
    "东方": "101310202",
    "东莞": "101281601",
    "东营": "101121201",
    "中卫": "101170501",
    "中山": "101281701",
    "丰台": "101010900",
    "丰都": "101043000",
    "临夏": "101161101",
    "临汾": "101100701",
    "临沂": "101120901",
    "临沧": "101291101",
    "临河": "101080801",
    "临高": "101310203",
    "丹东": "101070601",
    "丽水": "101210801",
    "丽江": "101291401",
    "乌兰浩特": "101081101",
    "乌海": "101080301",
    "乌鲁木齐": "101130101",
    "乐东": "101310221",
    "乐山": "101271401",
    "九江": "101240201",
    "云浮": "101281401",
    "云阳": "101041700",
    "五指山": "101310222",
    "亳州": "101220901",
    "仙桃": "101201601",
    "伊宁": "101131001",
    "伊春": "101050801",
    "佛山": "101280800",
    "佛爷顶": "101011700",
    "佳木斯": "101050401",
    "保亭": "101310214",
    "保定": "101090201",
    "保山": "101290501",
    "信阳": "101180601",
    "儋州": "101310205",
    "克拉玛依": "101130201",
    "八达岭": "101011600",
    "六安": "101221501",
    "六盘水": "101260801",
    "兰州": "101160101",
    "兴义": "101260906",
    "内江": "101271201",
    "凉山": "101271601",
    "凯里": "101260501",
    "包头": "101080201",
    "北京": "101010100",
    "北京城区": "101012200",
    "北海": "101301301",
    "北碚": "101040800",
    "北辰": "101030600",
    "十堰": "101201101",
    "南京": "101190101",
    "南充": "101270501",
    "南宁": "101300101",
    "南川": "101040400",
    "南平": "101230901",
    "南昌": "101240101",
    "南汇": "101020600",
    "南沙岛": "101310220",
    "南通": "101190501",
    "南阳": "101180701",
    "博乐": "101131601",
    "厦门": "101230201",
    "双鸭山": "101051301",
    "台中": "101340401",
    "台北县": "101340101",
    "台州": "101210601",
    "合作": "101161201",
    "合川": "101040300",
    "合肥": "101220101",
    "吉安": "101240601",
    "吉林": "101060201",
    "吉首": "101251501",
    "吐鲁番": "101130501",
    "吕梁": "101101100",
    "吴忠": "101170301",
    "周口": "101181401",
    "呼伦贝尔": "101081000",
    "呼和浩特": "101080101",
    "和田": "101131301",
    "咸宁": "101200701",
    "咸阳": "101110200",
    "哈密": "101131201",
    "哈尔滨": "101050101",
    "唐山": "101090501",
    "商丘": "101181001",
    "商洛": "101110601",
    "喀什": "101130901",
    "嘉兴": "101210301",
    "嘉定": "101020500",
    "嘉峪关": "101161401",
    "四平": "101060401",
    "固原": "101170401",
    "垫江": "101042200",
    "城口": "101041600",
    "塔城": "101131101",
    "塘沽": "101031100",
    "大兴": "101011100",
    "大兴安岭": "101050701",
    "大同": "101100201",
    "大庆": "101050901",
    "大港": "101031200",
    "大理": "101290201",
    "大足": "101042600",
    "大连": "101070201",
    "天水": "101160901",
    "天津": "101030100",
    "天门": "101201501",
    "太原": "101100101",
    "奉节": "101041900",
    "奉贤": "101021000",
    "威海": "101121301",
    "娄底": "101250801",
    "孝感": "101200401",
    "宁德": "101230301",
    "宁河": "101030700",
    "宁波": "101210401",
    "安庆": "101220601",
    "安康": "101110701",
    "安阳": "101180201",
    "安顺": "101260301",
    "定安": "101310209",
    "定西": "101160201",
    "宜宾": "101271101",
    "宜昌": "101200901",
    "宜春": "101240501",
    "宝坻": "101030300",
    "宝山": "101020300",
    "宝鸡": "101110901",
    "宣城": "101221401",
    "宿州": "101220701",
    "宿迁": "101191301",
    "密云": "101011300",
    "密云上甸子": "101011900",
    "屯昌": "101310210",
    "山南": "101140301",
    "岳阳": "101251001",
    "崇左": "101300201",
    "崇明": "101021100",
    "巢湖": "101221601",
    "巫山": "101042000",
    "巫溪": "101041800",
    "巴中": "101270901",
    "巴南": "101040900",
    "常州": "101191101",
    "常德": "101250601",
    "平凉": "101160301",
    "平谷": "101011500",
    "平顶山": "101180501",
    "广元": "101272101",
    "广安": "101270801",
    "广州": "101280101",
    "庆阳": "101160401",
    "库尔勒": "101130601",
    "廊坊": "101090601",
    "延吉": "101060301",
    "延安": "101110300",
    "延庆": "101010800",
    "开县": "101041500",
    "开封": "101180801",
    "张家口": "101090301",
    "张家界": "101251101",
    "张掖": "101160701",
    "彭水": "101043200",
    "徐家汇": "101021200",
    "徐州": "101190801",
    "德宏": "101291501",
    "德州": "101120401",
    "德阳": "101272001",
    "忠县": "101042400",
    "忻州": "101101001",
    "怀化": "101251201",
    "怀柔": "101010500",
    "怒江": "101291201",
    "恩施": "101201001",
    "惠州": "101280301",
    "成都": "101270101",
    "房山": "101011200",
    "扬州": "101190601",
    "承德": "101090402",
    "抚州": "101240401",
    "抚顺": "101070401",
    "拉萨": "101140101",
    "揭阳": "101281901",
    "攀枝花": "101270201",
    "文山": "101290601",
    "文昌": "101310212",
    "斋堂": "101012000",
    "新乡": "101180301",
    "新余": "101241001",
    "无锡": "101190201",
    "日喀则": "101140201",
    "日照": "101121501",
    "昆明": "101290101",
    "昌吉": "101130401",
    "昌平": "101010700",
    "昌江": "101310206",
    "昌都": "101140501",
    "昭通": "101291001",
    "晋中": "101100401",
    "晋城": "101100601",
    "晋江": "101230509",
    "普洱": "101290901",
    "景德镇": "101240801",
    "景洪": "101291601",
    "曲靖": "101290401",
    "朔州": "101100901",
    "朝阳": "101071201",
    "本溪": "101070501",
    "来宾": "101300401",
    "杭州": "101210101",
    "松原": "101060801",
    "松江": "101020900",
    "林芝": "101140401",
    "果洛": "101150501",
    "枣庄": "101121401",
    "柳州": "101300301",
    "株洲": "101250301",
    "桂林": "101300501",
    "梁平": "101042300",
    "梅州": "101280401",
    "梧州": "101300601",
    "楚雄": "101290801",
    "榆林": "101110401",
    "武威": "101160501",
    "武汉": "101200101",
    "武清": "101030200",
    "武都": "101161001",
    "武隆": "101043100",
    "毕节": "101260701",
    "永川": "101040200",
    "永州": "101251401",
    "汉中": "101110801",
    "汉沽": "101030800",
    "汕头": "101280501",
    "汕尾": "101282101",
    "江津": "101040500",
    "江门": "101281101",
    "池州": "101221701",
    "汤河口": "101011800",
    "沈阳": "101070101",
    "沙坪坝": "101043700",
    "沧州": "101090701",
    "河池": "101301201",
    "河源": "101281201",
    "泉州": "101230501",
    "泰安": "101120801",
    "泰州": "101191201",
    "泸州": "101271001",
    "洛阳": "101180901",
    "津南": "101031000",
    "济南": "101120101",
    "济宁": "101120701",
    "济源": "101181801",
    "浦东": "101021300",
    "海东": "101150201",
    "海北": "101150801",
    "海南": "101150401",
    "海口": "101310101",
    "海淀": "101010200",
    "海西": "101150701",
    "涪陵": "101041400",
    "淄博": "101120301",
    "淮北": "101221201",
    "淮南": "101220401",
    "淮安": "101190901",
    "深圳": "101280601",
    "清远": "101281301",
    "渝北": "101040700",
    "温州": "101210701",
    "渭南": "101110501",
    "湖州": "101210201",
    "湘潭": "101250201",
    "湛江": "101281001",
    "滁州": "101221101",
    "滨州": "101121101",
    "漯河": "101181501",
    "漳州": "101230601",
    "潍坊": "101120601",
    "潜江": "101201701",
    "潮州": "101281501",
    "潼南": "101042100",
    "澄迈": "101310204",
    "濮阳": "101181301",
    "烟台": "101120501",
    "焦作": "101181101",
    "牡丹江": "101050301",
    "玉林": "101300901",
    "玉树": "101150601",
    "玉溪": "101290701",
    "珠海": "101280701",
    "琼中": "101310208",
    "琼山": "101310102",
    "琼海": "101310211",
    "璧山": "101042900",
    "甘孜": "101271801",
    "白城": "101060601",
    "白山": "101060901",
    "白沙": "101310207",
    "白银": "101161301",
    "百色": "101301001",
    "益阳": "101250700",
    "盐城": "101190701",
    "盘锦": "101071301",
    "眉山": "101271501",
    "石嘴山": "101170201",
    "石家庄": "101090101",
    "石景山": "101011000",
    "石柱": "101042500",
    "石河子": "101130301",
    "神农架": "101201201",
    "福州": "101230101",
    "秀山": "101043600",
    "秦皇岛": "101091101",
    "綦江": "101043300",
    "红河": "101290301",
    "绍兴": "101210501",
    "绥化": "101050501",
    "绵阳": "101270401",
    "聊城": "101121701",
    "肇庆": "101280901",
    "自贡": "101270301",
    "舟山": "101211101",
    "芜湖": "101220301",
    "苏州": "101190401",
    "茂名": "101282001",
    "荆州": "101200801",
    "荆门": "101201401",
    "荣昌": "101042700",
    "莆田": "101230401",
    "莱芜": "101121601",
    "菏泽": "101121001",
    "萍乡": "101240901",
    "营口": "101070801",
    "葫芦岛": "101071401",
    "蓟县": "101031400",
    "蚌埠": "101220201",
    "衡水": "101090801",
    "衡阳": "101250401",
    "衢州": "101211001",
    "襄樊": "101200201",
    "西宁": "101150101",
    "西安": "101110101",
    "西沙": "101310217",
    "西青": "101030500",
    "许昌": "101180401",
    "贵港": "101300801",
    "贵阳": "101260101",
    "贺州": "101300701",
    "资阳": "101271301",
    "赣州": "101240701",
    "赤峰": "101080601",
    "辽源": "101060701",
    "辽阳": "101071001",
    "达州": "101270601",
    "运城": "101100801",
    "连云港": "101191001",
    "通化": "101060501",
    "通州": "101010600",
    "通辽": "101080501",
    "遂宁": "101270701",
    "遵义": "101260201",
    "邢台": "101090901",
    "那曲": "101140601",
    "邯郸": "101091001",
    "邵阳": "101250901",
    "郑州": "101180101",
    "郴州": "101250501",
    "都匀": "101260401",
    "鄂尔多斯": "101080701",
    "鄂州": "101200301",
    "酉阳": "101043400",
    "酒泉": "101160801",
    "重庆": "101040100",
    "金华": "101210901",
    "金山": "101020700",
    "金昌": "101160601",
    "钦州": "101301101",
    "铁岭": "101071101",
    "铜仁": "101260601",
    "铜川": "101111001",
    "铜梁": "101042800",
    "铜陵": "101221301",
    "银川": "101170101",
    "锡林浩特": "101080901",
    "锦州": "101070701",
    "镇江": "101190301",
    "长寿": "101041000",
    "长春": "101060101",
    "长沙": "101250101",
    "长治": "101100501",
    "门头沟": "101011400",
    "闵行": "101020200",
    "阜新": "101070901",
    "阜阳": "101220801",
    "防城港": "101301401",
    "阳江": "101281801",
    "阳泉": "101100301",
    "阿克苏": "101130801",
    "阿勒泰": "101131401",
    "阿图什": "101131501",
    "阿坝": "101271901",
    "阿拉善左旗": "101081201",
    "阿拉尔": "101130701",
    "阿里": "101140701",
    "陵水": "101310216",
    "随州": "101201301",
    "雅安": "101271701",
    "集宁": "101080401",
    "霞云岭": "101012100",
    "青岛": "101120201",
    "青浦": "101020800",
    "静海": "101030900",
    "鞍山": "101070301",
    "韶关": "101280201",
    "顺义": "101010400",
    "香格里拉": "101291301",
    "马鞍山": "101220501",
    "驻马店": "101181601",
    "高雄": "101340201",
    "鸡西": "101051101",
    "鹤壁": "101181201",
    "鹤岗": "101051201",
    "鹰潭": "101241101",
    "黄冈": "101200501",
    "黄南": "101150301",
    "黄山": "101221001",
    "黄石": "101200601",
    "黑河": "101050601",
    "黔江": "101041100",
    "黔阳": "101251301",
    "齐齐哈尔": "101050201",
    "龙岩": "101230701"
}
  • 15
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
通过使用Python爬虫和tkinter界面,可以实现历史天气查询。首先,需要使用Python代码来获取历史天气数据。可以使用第三方库如requests或urllib来发送 HTTP请求,并解析返回的HTML页面来提取所需的天气数据。可以使用BeautifulSoup库来解析HTML页面。 其次,需要选择一个提供历史天气数据的网站作为目标网站。引用中提到的网站是一个很好的选择,它提供了全国各地的历史天气预报信息。该网站的数据来源于城市当天的天气信息,包括气温、风向、风力等。 最后,通过在tkinter界面中添加输入框和查询按钮,用户可以输入要查询的地区和日期,然后点击按钮来触发查询操作。在查询操作中,将用户输入的地区和日期作为参数传递给Python代码,然后使用代码从目标网站获取历史天气数据,并将结果显示在界面上。 总结起来,通过使用Python爬虫和tkinter界面,可以实现历史天气查询功能。用户可以输入要查询的地区和日期,然后点击按钮来触发查询操作,最终显示查询结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python 爬虫+tkinter界面来实现历史天气查询](https://blog.csdn.net/Px01Ih8/article/details/110297341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python网络爬虫--历史天气数据采集](https://blog.csdn.net/WenWu_Both/article/details/80105189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值