Flask开发天气查询软件

Python Flask 天气查询 一直觉得自己的博客太简单了,今天想加点功能上去,说干就干,准备加个最常用的,天气预报功能。 看了几个例子,觉得也不是很难,网上找个接口就是了,不过,这百度的apistore里面。。。死活不让我获取手机验证码,所以转向JUHE里面去,还送500次的免费次数,绝对够用了 进入正题 首先,这个功能的主旨是:通过其他网站提供的api接口取回数据,一般是JSON格式的,然后自己渲染在前 阅读详情
天气预报

获取天气预报数据,离不开中国天气网

5847426-b69791693d198dd9.png
天气预报网

登陆网站,在搜索栏中输入城市名称点击搜索,即可获取该地区的天气预报。比如我搜索西安,完成后会跳转至下面的网址:


5847426-fe40852c0690e968.png
西安天气

其他的都好说,但是这个地区编码怎么搞?F12看看网络请求....

爬虫思路

5847426-20bbb684594a1120.png
网络请求

我们可以看到网站先通过get请求,访问url http://toy1.weather.com.cn/search?cityname=%E8%A5%BF%E5%AE%89并传参 cityname,获取到城市编码,再进行了相关跳转。有些young man 会问这个cityname怎么是这种格式...其实很简单:

from urllib.parse import quote
quote('西安', encoding='utf-8')
'%E8%A5%BF%E5%AE%89'

知道了这些,我们就可以有针对性的获取每个城市最近7天的天气预报了,当然少不了一堆beautifulsoup的元素定位操作:


5847426-9edf1cd22a483358.png
城市近期天气
# 元素定位思路:
id=7d --> class='clearfix' -->ul --> findAll(li)
# 参数获取
h1标签为日期
class=wea 为天气
class=tem 为温度
爬虫代码

确定了这些内容,我们的爬虫代码基本就OK了,但这个不是今天的重点,所以简单看下吧:

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @公众号    : 清风Python
# @Date     : 2019/11/21 05:56
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : weather.py


import requests
from urllib.parse import quote
import re
from bs4 import BeautifulSoup


class WeatherReport:
    def __init__(self, city):
        self.quote_city = quote(city, encoding='utf-8')
        self.result_info = []

    def get_city_code(self):
        r = requests.get('http://toy1.weather.com.cn/search?cityname=%s' % self.quote_city)
        response = eval(r.text)[0].get('ref')
        try:
            return re.search('[0-9]+', response).group()
        except AttributeError:
            return None

    def get_weather(self, code):
        r = requests.get('http://www.weather.com.cn/weather/%s.shtml' % code)
        r.encoding = 'utf-8'
        bs4 = BeautifulSoup(r.text, 'lxml')
        days = bs4.find('div', {'id': '7d'}).find('ul', {"class": "clearfix"}).findAll('li')
        for day in days:
            date = day.h1.text
            weather = day.find('p', {"class": "wea"}).text
            tmp = day.find('p', {"class": 'tem'}).text.strip()
            self.result_info.append("%s: %s %s" %(date,weather, tmp))
        return self.result_info
Web界面

有了后台的数据,我们前台实现也就比较简单了,只需要提供一个城市的输入框体和提交按钮,剩下就是城市天气的内容展示了。简单引入Bootstrap+jQuery即可完成,前台界面大概这样子,原谅屌丝的审美,哈哈...


5847426-056f544ae00dfa50.png
Web界面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1 ,user-scalable=no">
    <title>清风python</title>
    <link rel="icon" href="{{ url_for('static',filename='favicon.ico') }}">
    <link rel="stylesheet" href="{{ url_for('static',filename='css/bootstrap.min.css') }}">
    <link rel="stylesheet" href="{{ url_for('static',filename='css/main.css') }}">
    <script src="{{ url_for('static',filename='js/jquery.min.js') }}"></script>
</head>
<body>

<div class="container container-small">
    <div class="content">
        <div class="header">
            天气查询软件
        </div>
        <div class="block-info">
            <div class="form-group has-success">
                <div class="input-group">
                    <div class="input-group-addon">
                        城市:
                    </div>
                    <input id='name' class="form-control"/>

                </div>

            </div>
            <div class="form-group ">
                <button class="form-control btn-primary" id="load">查询</button>
            </div>
            <p class="result"></p>
            <script type="text/javascript">
                $(function () {
                    $('#load').click(function () {
                        let city = $('#name').val();
                        if (city.length > 0) {
                            $.ajax({
                                url: '/weather/' + city,
                                type: 'get',
                                success: function (data) {
                                    $('.result').html(data);
                                }
                            })
                        } else {
                            $('.result').html("请填写正确的城市名称...");
                        }
                    })
                })
            </script>
        </div>
    </div>
    <div class="footer">
        ©2019-欢迎关注我的公众号:<a href="https://www.jianshu.com/u/d23fd5012bed">清风Python</a>
    </div>
</div>

</body>
</html>
Flask路由

Flask的路由比较简单,一个用来呈现首页,另外一个负责动态获取Ajax数据进行回传即可

from flask import Flask, render_template
from weather import WeatherReport as wr

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/weather/<city>')
def weather(city):
    main_func = wr(city)
    city_code = main_func.get_city_code()
    if city_code:
        info = main_func.get_weather(city_code)
        return '<br>'.join(info)
    else:
        return "城市名称无效,请核查..."

!最终实现](https://upload-images.jianshu.io/upload_images/5847426-2596a980ef4077e3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

pipenv部署

代码我们已经开发完了,那么如何在手机上部署呢?让我们看看项目目录:


5847426-2cbcf14781da7529.png
项目目录

我将代码提交到github...


5847426-205e0b79cc0c9020.png
Github

由于采用pipenv虚拟环境开发,所以使用起来更为方便,只需如下操作:

# 如果为安装pipenv,需要先进行安装操作
pip install pipenv
# 克隆代码
git clone https://github.com/KingUranus/WeatherForecast.git
# 进入代码目录
cd WeatherForecast
# 安装虚拟机及依赖模块
pipenv install
# 进入虚拟机
pipenv shell
# 启动flask
flask run
5847426-c712ec72aa17abde.png
pipenv导入项目

最后来看看软件实现吧:


5847426-397330ecb41c2a5d.png
北京天气
天气爬虫网站(flask+sqlite3+selenium+echarts) 项目介绍: 项目名称:动态爬虫天气网站 一、项目核心: 通过动态爬虫,根据用户关键词即时检索并爬取天气网站的相关天气数据, 进行相应的数据处理,最后绘制相应统计图进行数据展示。 二、任务要求 1)主要城市的天气情况(七天),(天气状况(比如晴天、多云)、风级、相对湿度、空气质量)。 2)统计分析全国各大省会当天天气情况,并作出相应的统计数据,在网页上渲染统计图。 3)天气记忆。第三点分析的数据需要记录,实现能够查看以前的天气状况。 技术介绍: 1、使用flask连接python代码和前端 2、因为天气网站的 阅读详情

相关推荐

《用 Flask 构建天气查询 API:从基础搭建到实战优化》

这篇文章介绍了如何用Flask框架构建一个天气查询API。首先阐述了Flask作为轻量级Python框架的优势,然后详细讲解了项目准备、环境搭建和目录结构设计。核心部分展示了通过OpenWeatherMap API获取天气数据并设计接口的完整过程,包括参数配置、服务模块编写和路由设置。文章还提供了测试用例,并分享进阶优化技巧,如错误处理、文档生成和部署建议。最后探讨了应用场景扩展和未来发展方向,鼓励读者思考不同框架的选择。全文以实践为导向,适合想学习Flask API开发的Python程序员。

铭渊老黄 668

python3.6 简单爬虫爬取天气,flask在线查询接口制作

据说以后是API的天下,不如弄个天气查询的API玩玩看~首先,需要解决天气数据源的问题,第一个想法就是弄个小爬虫,去比较权威的气象网站爬下来,存到自己的库里,当日,配上个定时器,定时发动爬虫技能自动完成就好咯。(大神略过,本人只是自学的小白)中央气象台:http://www.nmc.cn/  就是他了,开始网页分析进入城市页面页面上的内容还是很多的,一种选择是直接爬取页面上的参数,不过内容较多,如...

weixin_39133476的博客 2592

构建基于Flask的天气查询Web应用

本文还有配套的精品资源,点击获取 简介:"flaskWeatherApp"是一个基于Python的Web应用,利用轻量级Flask框架实现一个天气查询服务。项目涵盖Flask基础、Web应用结构、路由和视图函数、API调用、模板引擎、错误处理、应用部署、环境变量管理、测试以及版本控制等关键知识点。该项目不仅适合学习Flask框架的使用,也涉及了Web应用开发的全面实践。 ...

weixin_29215509的博客 1205

结合bs4, 在flask应用中查询天气

使用bs4爬取中国天气网天气信息,应用在在flask应用中。

丰伟磊的博客 681

flask-web实现天气预报.zip

在树莓派上用flask模拟调用接口写一个天气数据的可视化web页面显示数据

树莓派Flask+DTH11传感器做Web界面显示温湿度

树莓派Flask+DTH11传感器做Web界面显示温湿度 小白一枚 刚刚接触编程 树莓派和python 打算开启代码之旅。做了个小玩意打算记录下来。大佬们勿喷。 DTH11传感器实现参照别人的,这里主要学了一点Flask框架知识,将DTH11得到的数值传送给模板html文件中的变量{{A}}(占位符)实现web端的显示。

【记录爬虫实战过程】进阶学习·详细过程·爬取天气信息1(python+flask+pyecharts)

主要内容: 简单地搭建了一个flask页面,自己输入要查找的城市和年份,返回该城市这一年的平均天气情况。 用pyecharts做了一个时间轴的可视化展示,感觉比较美观。 (这次的内容是在以前代码的基础上进行扩展的,这是之前做出来的项目 爬取天气信息,在他的基础上可以自己输入要找的城市和年份,并且用了flask搭建网页) 使用环境: vscode; 各种python库(如何在vscode中安装python库请参照这篇链接在vscode环境里导入python库(三种方法) | 详细过程) 详细步骤: 一、 将

Rover95的博客 1512

WeatherForecast:这是一个使用Flask实现的小型天气预报网络应用

天气预报 这是一个使用Flask实现的小型天气预报网络应用。

【案例】如何使用Flask构建天气预报

一个适合初学者学习 Flask、API 和 Google App Engine 的小型教程

weixin_39915649的博客 1282

flask_weather:Flask应用程序可基于用户的IP地址自动检测本地天气

Flask Weather App :sun: :umbrella_with_rain_drops: 这是一个Flask(Python)应用程序,可以根据用户的外部IP地址自动检测本地天气。 flask_weather应用程序的示例屏幕截图 建立 安装依赖 pip install -r requirements.txt 添加环境变量 weather_key="###############"; 。 weather_key是在注册时收到的API密钥。 添加secret_key="********" 。 它应该是一个很难猜测的随机字符串。 跑python app.py 运行测试 python flask_weather_tests.p

Weather-App:使用Flutter前端和Python Flask后端创建的全栈移动天气应用程序,可从OpenWeatherMap API(https

全栈天气应用 使用Flutter前端和Python Flask后端创建的全栈移动天气应用程序,可从OpenWeatherMap API( )中获取预报数据,并从WeatherBit( )中获取空气质量数据 )。 入门 项目仍在开发中...后续的完整文档。敬请关注! 致谢 HUA在Dribbble( )上出色的UI设计

Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署

假装很努力 也许是最近经常熬夜的原因,导致有时莫名的发愣,然后一晃眼半个小时过去了...每天晚上坐在电脑前,看着很辛苦但觉得效率不高。除了搞公众号,其余貌似学到的东西很少。所以,之后周末的时间需要用来学一些更贴近自身的知识,然后...就一周五更喽。每天写原创的东西,说实话最近开始有些卡文了。看来得找个系列再来一波.... 关于pipenv 昨天介绍了pipenv这个相比于virtu...

清风Python 483

在树莓派上部署训练好的YOLO模型

.pt.模型转换为onnx格式的模型,树莓派上部署模型

pai_da_xing8的博客 3887

寒冬袭来,带你使用Flask开发一款天气查询软件吧

天气预报 获取天气预报数据,离不开中国天气网http://www.weather.com.cn 天气预报网 登陆网站,在搜索栏中输入城市名称点击搜索,即可获取该地区的天气预报。比如我搜索西安,完成后会跳转至下面的网址: 西安天气 其他的都好说,但是这个地区编码怎么搞?F12看看网络请求… 爬虫思路 网络请求 我们可以看到网站先通过get请求,访问urlhttp://t...

华为云官方博客 2413

深入解析UEFI PEI阶段:PeiCore的三次调用与内存管理机制

本文深入解析UEFI启动流程中的PEI阶段,重点探讨PeiCore的三次调用与内存管理机制。详细介绍了PeiCore在临时内存中的初始化、堆栈切换至永久内存的过程,以及最终交接给DXE阶段的关键步骤,为开发者提供调试技巧与实战案例,助力解决UEFI启动问题。

weixin_28452161的博客 650

[AbutionGraph] 报表制作-使用Grafana动态可视化知识图谱指标

使用开源报表可视化工具Grafana实时监控时序知识图谱数据仓库AbutionGraph中的数据,实时性报表查询, 满足单次百万千万级的数据查询,毫秒级查询延迟,亚秒级对千亿数据量汇总统计,每日过亿报表查询/多维分析/日志分析等数据指标...

图特摩斯科技-博客 4278

Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署 #华为云·寻找黑马程序员#

文章目录假装很努力关于pipenv天气预报爬虫思路爬虫代码Web界面Flask路由pipenv部署The End 假装很努力 也许是最近经常熬夜的原因,导致有时莫名的发愣,然后一晃眼半个小时过去了…每天晚上坐在电脑前,看着很辛苦但觉得效率不高。除了搞公众号,其余貌似学到的东西很少。所以,之后周末的时间需要用来学一些更贴近自身的知识,然后…就一周五更喽。每天写原创的东西,说实话最近开始有些卡文了。看...

SlaughterDevil的博客 709

SystemVerilog实战:AXI Stream协议从零搭建(附完整代码解析)

本文详细介绍了如何使用SystemVerilog从零搭建AXI Stream协议,包括核心信号解析、接口设计、主从设备实现及验证环境构建。通过完整的代码示例和工程实践技巧,帮助开发者掌握AXI Stream在FPGA/ASIC设计中的高效数据传输方法,特别适合视频处理和网络数据传输等应用场景。

weixin_29207439的博客 360

Python项目开发:Flask基于Python的天气数据可视化平台

随着社会多元化的不断发展,天气数据问题不可被简单的理解为是科学问题,更多的是环境问题,可以直接影响到人民的日常生活,甚至对一个国家的政治经济带来影响,由此可见,天气预测是一项非常重要的行业。基于此,我们就需要开发一个可视化的、综合的、方便人们查看的项目。基于Python的天气数据可视化设计与实现,通过使用基于Python的网络爬虫技术,能在短时内提取有价值的信息数据。

QQ1694456187的博客 3253

cartographer运行错误集合

播放bag的时候错误 Check failed: sensor_to_tracking->translation().norm() < 1e-5 The IMU frame must be colocated with the tracking frame. Transforming linear acceleration into the tracking frame will otherwise be imprecise tracking frame不是imu的link 修改lua文件中的.

Studying…… 2020
上一篇: 将安卓手机打造成你的python全栈开发利器
下一篇: Python开发还在用virtualenv?是时候了解下pipenv了
清风Python
博客等级 码龄7年 406粉丝 267原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值