天气查询

Python语言程序设计课程论文项目名称:天气查询姓名:黄利钦  学号:173110009班级:1708班成绩:博客链接:

摘要

此论文主要介绍了,使用相应的框架和模块,用Python来制作一个简单的天气查询应用,通过此应用,用户可以通过输入所要查询城市名来查询该城市当天或者未来五天的天气情况。同时对此应用所涉及到的一些基础知识和方法技术进行相应的扩展介绍,让初学者对Python有基础的认识。

1.引言

1.1背景

Python是一种解释性、交互式、面向对象的跨平台的语言。并且Python简单易学,是一种支持面向过程编程也支持面向对象编程的高级语言。它是开源的,且具有可扩展性、可移植性和解释性。它还具有丰富的库,能够满足我们日常工作所需,它规范的代码也增强可读性。总体而言,对于初学者来说,Python比较简便,上手也比较容易。

1.2意义

天气的变化对我们日常生活的影响非常大,如果我们能够提前了解当天或后几天的天气情况,做到心里有数,我们可以及时改变我们的计划,以减轻天气对我们的影响。而Python比较简便,制作一个天气查询也比较简单,对技术人员来说,不是一件困难的事,有了天气查询这个软件,我们就可以随时随地的查询某地某天具体的天气情况,从而方便我们的日常生活。

1.3实现的功能

此软件的功能是根据用户的需求,输入某地(只能是某市不能具体到区或镇),即刻弹出当天某地的具体天气情况(如:日期、天气、温度、风向、风级以及穿衣饮食的建议等);也可用户需求查询未来五天的天气情况,并罗列出未来五天的天气变化。

2. 系统结构。

2.1使用相关技术

2.1.1开发环境

Python3:Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Pyqt5:PyQt5 是Digia的一套Qt5应用框架与python的结合,同时支持2.x和3.x。Qt库由Riverbank Computing开发,是最强大的GUI库之一。

PyQt5是由一系列Python模块组成。主要模块有:

QtCore 包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用。

QtGui 包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类。

QtWidgets类包含了一系列创建桌面应用的UI元素。

Request:

Request是用Python语言编写的,基于urllib,采用Apache2 Licensed开源协议的HTTP库。

Request库有七个主要的方法:requests. Request():构造一个请求,支撑一些各方法的基础方法;requests. get():获取HTML网页的主要方法,对应于HTML的get;requests. head():获取HTML网页头信息的方法,对应于HTML的head;requests. post():向HTML网页提交post请求的方法,对应于HTML的post;

requests. put():向HTML网页提交put请求的方法,对应于HTML的put;requests. patch():向HTML网页提交局部修改的请求,对应于HTML的patch;

requests. delete():向HTML网页提交删除请求,对应于HTML的delete;request库中的get()方法也是比较常用的,通常通过r=request.get(url)来构造一个向服务器请求资源的URL(URL是http协议存取资源的一个路径)对象。这个对象是request库内部生成的。此时r返回的是一个包含服务器资源的response对象。包含从服务器返回的所有的相关资源。

2.1.2  ui设计

界面采用Qt Designer来进行设计:Qt Designer是交互式可视化GUI设计工具,能够快速开发pyqt程序,它生成的UI界面是一个后缀为.ui的文件,我们可以通过pyiuc转换为.py文件,后期,如果我们还想做类似界面的软件,我们可以直接使用这个已转换的.py文件,并在此基础上进行更改,从而减轻开发人员的工作量并提高效率。图1 天气查询界面

2.1.3网络爬虫网络爬虫是一种按照一定的规则,自动地爬抓万维网信息的程序或脚本,可以自动采集所需要访问页面的内容,及时更新内容。例如,我们查询的天气具体情况,就是通过爬虫的方式来获取天气预报网站的HTML的内容,然后解析HTML界面的内容,以此获取我们需要的信息并及时更新呈现给用户。爬虫的基本流程:1.发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,然后等待服务器响应。2.获取响应内容:如果服务器能正常响应,我们会得到一个Response,Response的内容便是所要获取的内容(可能是HTML、Json、二进制数据等类型)。3.解析内容:如果得到的内容可能是HTML,那么就可以使用正则表达式,网页解析库进行解析。如果得到的内容是Json,可以直接转为Json对象解析。如果得到的内容是二进制数据,就可以做保存或者进一步处理。4.保存数据:我们可以把数据存为文本,也可以把数据保存到数据库,或者保存为特定的jpg,mp4 等格式的文件。拓展:使用Python来获得天气数据,方式有两种:一种是通过爬虫的方式获取天气网站的HTML页面,然后使用xpath或者bs4解析HTML页面的内容;另一种是根据天气预报网站提供的API(全称application programing interface ,即应用程序编程接口),直接获取结构化数据,省去了解析HTML页面的这一步骤。2.2相关模块介绍此应用主要有三部分组成:输入城市名称部分:用户根据自身需求,输入要查询城市的名称;查看今天部分:用户输入城市名称后,该部分只显示所要查询城市当天的天气情况;查看未来五天部分:用户输入城市名称后,该部分将会显示,所要查询城市未来五天的天气情况;2.3实现功能的原理2.3.1功能实现过程图2 功能间的关系2.3.2原理根据输入城市名从城市代码文件中提取相对于的城市代码,向目的网站发送请求并得到相应网站页面信息,根据所求对网页返回信息进行筛选。3. 实现代码3.1导入的模块:from PyQt5 import QtCore, QtGui, QtWidgets  //导入PyQt5模块的QtCore, QtGui, QtWidgets成员import requests3.2查看今天:def get_data_2(self, Dialog): // 输入城市,点击查询当天的天气,就调用get_data_2的方法    citycode = city.get(self.lineEdit_2.text())//根据输入的城市查询city表,找到对应城市的代码,用这个代码加入到第三行的路径中  url = ('http://wthrcdn.etouch.cn/weather_mini?citykey=%s'% citycode) //第三行    self.textEdit.setText('\n'+str(url))    response = requests.request("GET", url) //根据路径查询城市天气数据    a = eval(response.content) //获得整个返回数据    forecast = a.get('data').get('forecast') //从返回数据中筛选出未来五天的数据    self.textEdit.setText(            '                  '+a.get('data').get('city')+'\n'            '日期:'+forecast[0].get('date')+'\n'            '天气:'+forecast[0].get('type')+'\n'            '温度:'+forecast[0].get('low')+'~'+forecast[0].get('high')+'℃\n'            '风向:'+forecast[0].get('fengxiang')+'\n'            '风级:'+forecast[0].get('fengli')+'\n'            '感冒:'+a.get('data').get('ganmao')+'\n\n') //显示未来五天天气数据3.3查看未来5天:def get_data_3(self, Dialog): // 输入城市,点击查询未来五天的天气,就调用get_data_3的方法    citycode = city.get(self.lineEdit_2.text())  //根据输入的城市查询city表,找到对应城市的代码,用这个代码加入到第三行的路径中  url = ('http://wthrcdn.etouch.cn/weather_mini?citykey=%s'% citycode)//第三行    self.textEdit.setText('\n'+str(url))      response = requests.request("GET", url) //根据路径查询城市天气数据    a = eval(response.content) //获得整个返回数据    forecast = a.get('data').get('forecast') //从返回数据中筛选出未来五天的数据    self.textEdit.setText(                            '              '+a.get('data').get('city')+'未来五天天气\n'            +forecast[0].get('date')+'\n'            '      天气:'+forecast[0].get('type')+'\n'            '      温度:'+forecast[0].get('low')+'~'+forecast[0].get('high')+'℃\n'            '      风向:'+forecast[0].get('fengxiang')+'\n'            '      风级:'+forecast[0].get('fengli')+'\n\n'                        +forecast[1].get('date')+'\n'            '      天气:'+forecast[1].get('type')+'\n'            '      温度:'+forecast[1].get('low')+'~'+forecast[0].get('high')+'℃\n'            '      风向:'+forecast[1].get('fengxiang')+'\n'            '      风级:'+forecast[1].get('fengli')+'\n\n'                        +forecast[2].get('date')+'\n'            '      天气:'+forecast[2].get('type')+'\n'            '      温度:'+forecast[2].get('low')+'~'+forecast[0].get('high')+'℃\n'            '      风向:'+forecast[2].get('fengxiang')+'\n'            '      风级:'+forecast[2].get('fengli')+'\n\n'                        +forecast[3].get('d

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