基于爬虫和接口的天气系统

项目名称:风和天气

系统介绍:

       这个系统是一个天气应用程序,提供了今日天气、未来天气、历史天气、数据图表、全国实况、设置和关于我们等功能。在代码中,主要使用了Python的Tkinter库和ttkbootstrap库来实现GUI界面的设计和美化。同时,还使用了PIL库来处理图片,threading库来实现多线程,time库来计算启动耗时等。整个系统的启动过程中,首先会显示一个预加载界面,然后再进入主界面。在主界面中,用户可以通过导航栏选择不同的功能,然后在内容框中显示相应的内容。此外,还提供了夜间模式等功能,可以根据用户的喜好进行设置。

功能实现:

     今日天气: 调用腾讯位置服务API来获取当前位置的城市名,通过xlsx文件查询城市名对应的城市编码,通过城市编码传入参数,进而调用高德地图的API来查询今日天气的状况,调用知心天气的API来获取今日天气的各项指标,对数据进行处理,把数据写入界面,实现今日天气的可视化,包含的信息有城市名、天气状况、温度、湿度、风向、风力、刷新时间、各项指标,实现自动定位获取今日天气信息。

    未来天气: 调用高德地图的API获取未来三天的天气数据,对数据进行筛选,把数据写入界面,实现未来天气的可视化,包含的信息有城市名、时间、星期、天气状况、白天温度、夜间温度、白天风向风力、夜晚风向风力、刷新时间。

    历史天气: 爬取天气后报网站本月的天气数据,获取页面源代码,对网页结构进行解析,获取需要的标签内容数据,对数据进行清洗,去掉无需数据,把数据通过列表传递,使用多线程,通过表格框来展示当地历史天气数据,包含的信息有城市、日期,天气状况(夜间/白天)、最低气温/最高气温,风向风力(夜间/白天)。

    数据图表: 将网页中爬取到的数据通过matplotlib进行绘图,将图片嵌入界面,用到的图表有旭日图、雷达图、折线图、条形图、表格等,通过选项卡来切换各图表,折线图用于展示当地每个月每天的最低温度和最高温度,旭日图用于展示当地白天和夜晚的天气状况的天数。

    全国实况: 对中国气象数据中心网站的图片进行爬取,将爬取到的图片嵌入界面,利用选项卡来切换图片,含有刷新、原图、另存功能。

    关于我们: 填写广告语,愿景,创作者,数据来源,联系方式等。

主要工作:

1. 用户界面的绘制和美化。

2. 爬取各网站数据和图片。

3. 后期代码测试与性能调优。

项目运作过程中遇到的难题:

问题1: 点击历史天气按钮导致界面卡顿甚至卡死。

原因1: 由于爬取的目标网站服务器响应速度太慢。

解决方案1: 使用前后端分离并且增加新线程的方法解决该难题,前端用户界面端,后端服务器端,主线程运行用户界面,并增加一个线程来执行爬取数据和处理数据的方法,这样点击历史天气按钮的时候既能出现图形界面又能爬取网站数据,就解决了界面卡顿的问题。

问题2:运行程序后需要很长一段时间才能显示窗体。

原因2:由于爬取数据需要很长一段时间。

解决方案2:新增一个临时窗口,用作预启动界面,运行程序先启动预启动界面,隐藏根窗体,等主窗体完全加载完成后关闭预启动界面,还原根窗体,这样就解决了界面启动缓慢的问题。

用到的库:

tkinter,ttk,ttkbootstrap,time,requests,bs4,threading,matplotlib,numpy,re,PIL

还需改进:

运行速度和性能需要调优,启动速度比较慢,需要做优化,改用爬取响应速度快的网站。

运行截图:

基于爬虫和接口的天气系统_第1张图片

基于爬虫和接口的天气系统_第2张图片

基于爬虫和接口的天气系统_第3张图片

基于爬虫和接口的天气系统_第4张图片

基于爬虫和接口的天气系统_第5张图片

基于爬虫和接口的天气系统_第6张图片

基于爬虫和接口的天气系统_第7张图片

基于爬虫和接口的天气系统_第8张图片

基于爬虫和接口的天气系统_第9张图片

基于爬虫和接口的天气系统_第10张图片

基于爬虫和接口的天气系统_第11张图片

基于爬虫和接口的天气系统_第12张图片

基于爬虫和接口的天气系统_第13张图片

基于爬虫和接口的天气系统_第14张图片

基于爬虫和接口的天气系统_第15张图片

基于爬虫和接口的天气系统_第16张图片

基于爬虫和接口的天气系统_第17张图片

基于爬虫和接口的天气系统_第18张图片

基于爬虫和接口的天气系统_第19张图片

你可能感兴趣的:(爬虫,python,开发语言)