前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >粉丝的一个完整的实战项目(爬虫+Pyqt)

粉丝的一个完整的实战项目(爬虫+Pyqt)

作者头像
Python知识大全
发布2020-02-13 15:52:57
2.1K0
发布2020-02-13 15:52:57
举报
文章被收录于专栏:Python 知识大全

利用Python和PyQt5实现天气查询小系统

北京今天温度降得厉害,我就在想,我已经很久没有关注天气了。

咦?天气?刚学了爬虫可以爬一下吗?

果然爬到了某个城市的天气。

前段时间刚学了Pyqt,可以做成可视化界面吗?

果然····

这个小的软件主要结合了两部分知识,第一部分就是爬虫的相关知识,第二部分就是构造一个GUI界面来展示我们获取到的数据。

一、获取到天气的数据

天气查询程序,首先要有天气情况。而我们,利用爬虫,抓包中华万年历得到的接口(JSON):

代码语言:javascript
复制
url = ‘http://wthrcdn.etouch.cn/weather_mini?city={}’.format(city_name)

我们所请求的网址是这个,请求后,会返回city_name的天气情况。

但需要注意的一点是,请求返回的结果是JSON 数据,我们需要调用json.loads()来将JSON数据转换成我们Python中的数据,也就是字典。更加便于我们后续的操作。

爬取天气部分的代码:

代码语言:javascript
复制
import requests
import json

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}

city_name = input()
weather_url = 'http://wthrcdn.etouch.cn/weather_mini?city={}'.format(city_name)
city_response = requests.get(weather_url, headers=headers)
weather_dict = json.loads(city_response.text)
print(type(weather_dict))
print(weather_dict)

我们输入北京运行后的输出结果为:

我们用json.loads()解析请求后的结果的字符串后,返回值为字典类型

在返回值中,有保存三个键的数据。其中:

“data”:数据类型为字典,其中保持着昨天到四天后共六天的天气情况

“desc”:请求结果,ok代表查询成功,invilad-citykey代表没有信息。

在"data"中:

"yesterday"键值对:保存着昨天的天气情况数据

"city"键值对:保存查询城市名数据

"forecast"键值对:是一个列表,存储着今天到四天后共五天的天气情况数据

"ganmao"键值对:一个温馨提示

"wendu"键值对:实时温度

二、构造GUI

我们已经有了天气数据,下一步就要构造GUI界面了。这个界面其实看个人如何构造,使用PyQt5。 我有两个界面,初始界面:

初始界面初始化相关部分代码为:(全部代码请从文末查看原文链接)

代码语言:javascript
复制
super().__init__()
        self.lb = QLabel(self)
        self.lb.setGeometry(70, 25, 80, 40)
        self.lb.setText('请输入城市:')
        self.textbox = QLineEdit(self)
        self.textbox.setGeometry(150, 30, 130, 30)
        self.findButton = QPushButton('查询', self)
        self.findButton.setGeometry(60, 85, 100, 40)
        self.quitButton = QPushButton('退出', self)
        self.quitButton.clicked.connect(self.close)
        self.findButton.clicked.connect(self.find_weather)
        self.quitButton.setGeometry(190, 85, 100, 40)
        self.setGeometry(500, 500, 350, 150)
        self.setWindowTitle('Icon')
        self.setWindowTitle('天气查询,目前仅支持单次查询')
        self.setWindowIcon(QIcon('weather.png'))
        self.show()

三、实现效果

初始界面:

查询成功界面:

查询失败界面:

退出界面:

本文作者:KaiSarH。公众号的粉丝,一名从零基础开始学习的Python 编程爱好者,再次感谢!

原文链接:https://blog.csdn.net/KaiSarH/article/details/103056540

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 知识大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、构造GUI
  • 初始界面初始化相关部分代码为:(全部代码请从文末查看原文链接)
  • 三、实现效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档