Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署
关于pipenv
昨天介绍了pipenv这个相比于virtualenv更高端大气上档次的虚拟环境管理软件,但看了下流量貌似不是很受欢迎,也许是我介绍的不够好吧。那么今天就拿它做一个例子,开发一款天气预报查询软件,然后打包部署到手机的Termux下。
天气预报
获取天气预报数据,离不开中国天气网
登陆网站,在搜索栏中输入城市名称点击搜索,即可获取该地区的天气预报。比如我搜索西安,完成后会跳转至下面的网址:
其他的都好说,但是这个地区编码怎么搞?F12看看网络请求….
爬虫思路
我们可以看到网站先通过get请求,访问urlhttp://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的元素定位操作:
# 元素定位思路:
id=7d --> class='clearfix' -->ul --> findAll(li)
# 参数获取
h1标签为日期
class=wea 为天气
class=tem 为温度
爬虫代码
确定了这些内容,我们的爬虫代码基本就OK了,但这个不是今天的重点,所以简单看下吧:
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清风Python
# @Date : 2019/7/19 1: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即可完成,前台界面大概这样子,原谅屌丝的审美,哈哈…
<!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 "城市名称无效,请核查..."
pipenv部署
代码我们已经开发完了,那么如何在手机上部署呢?让我们看看项目目录:
我将代码提交到github…
现在我们从手机上下载代码,进行安装…
# 如果为安装pipenv,需要先进行安装操作
pip instlal pipenv
# 克隆代码
git clone https://github.com/KingUranus/WeatherForecast.git
# 进入代码目录
cd WeatherForecast
# 安装虚拟机及依赖模块
pipenv install
# 进入虚拟机
pipenv shell
# 启动flask
flask run
从安装到使用,你无需关注虚拟环境到底涉及什么模块,需要怎么安装,没错pipenv就是这么简单粗暴+无脑!放几张图吧:
别说,安装的这个小蛇还挺可爱的….
最终看看手机运行是否正常吧:
通过今天的练习,你们是否对pipenv有更深的理解了?简单方便又好用,是我对它中肯的评价,哈哈….
The End
明后两天,作为周末进行作息的调整,再学一些本人更关注的内容,就不更新了,提前祝大家周末快乐…
今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的在看
。
期待你关注我的公众号清风Python
,如果觉得不错,希望能动动手指转发给你身边的朋友们。
作者:清风Python
Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署的更多相关文章
- Flask开发成语接龙游戏,闲来无事手机玩玩自己写的游戏吧!
英语单词学习应用 周五发布的文章Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署发布后,看到喜欢的人比较多.本来周末打算照着扇贝/极光单词,写一个英语单词自测工具.但苦 ...
- 个人永久性免费-Excel催化剂功能第96波-地图数据挖宝之全国天气查询(区域最细可到区县,最长预报4天)
天气预报的信息,是很普通的大家习以为常的信息,但如果不进行采集,在日常数据分析过程中,就少了非常重要的一个分析维度,如果人手采集整理,工作量巨大.此篇给广大数据分析工作者再次减负,只需简单一键,即可批 ...
- 工具武装的前端开发工程师 Mac 软件清单
Awesome Mac 这个仓库主要是收集非常好用的Mac应用程序.软件以及工具,主要面向开发者和设计师.有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章<工具武装的前端开发工程 ...
- 05_天气查询_JAX-WS方式_客户端
[客户端特点] 支持面向对象开发. 客户端功能调用webService,首先得知道WebService的地址. 一般情况下,只要知道了wsdl的地址,就可以知道WebService的地址. 我们上一篇 ...
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php.java等就是调用存储过程". ...
- Flask开发系列之快速入门
Flask开发系列之快速入门 文档 一个最小的应用 调试模式 路由 变量规则 构造 URL HTTP 方法 静态文件 模板渲染 访问请求数据 环境局部变量 请求对象 文件上传 Cookies 重定向和 ...
- Flask开发技巧之参数校验
Flask开发技巧之参数校验 目录 Flask开发技巧之参数校验 1.请求参数分类 2.解决方案使用到的库 3.针对url查询参数与一般json格式 4.针对复杂json格式数据 本人平时开发中使用的 ...
- 基于nodejs的终端天气查询
国际惯例,先上效果图 前天,突然想到,怎么直接在命令行查询天气呢?好的,那就写一个吧.然后就开始找城市.天气的api接口,最终做出来这么一个东西. 安装方法:$ npm install tianqi ...
- atitit.提升开发效率---mda 软件开发方式的革命
atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...
随机推荐
- visit:组合数学,ex_Lucas
没做过ex_Lucas的同学可以先看看这个:组合数学专题<礼物>题解.顺便把那道题水了. 有一个公式蛮重要的,竟然还有人不知道? 有一共n种共k个物品,每一种有a1,a2,a3...an个 ...
- 20190820 Tue 集训总结&NOIP模拟 27
低谷度过了? 但是skyh阿卡了,还是反衬出我的辣鸡. T1知道要sort,却忘了判重,正解不如暴力分高,555. T2成功化出正解柿子,然后化过头了,化出了无法DP的柿子. 果然不够强,大神们一眼就 ...
- day3(数论)
总得来说,这是可怕的一天,极其可怕的一天(完) 一.数论 阴影啊! 首先,设ab为两个整数,则存在唯一的q和r,使得a=qb+r 若r=0,则b整除a,记作b|a. (1)同余 若a/m和b/m的余数 ...
- 国际C语言混乱代码大赛优胜作品详解之“A clock in one line”
原文链接:https://blog.csdn.net/herorenme/article/details/8864351 摘要:IOCCC,即国际混乱C语言代码大赛是一项著名的国际编程赛事迄今已举办2 ...
- fcgi-2.4.1.tar.gz 和 spawn-fcgi-1.6.4.tar.gz 百度云
链接:https://pan.baidu.com/s/1nEzOkFC0-rfVMDy_BygLWg 提取码:ty0e 美好的东西都是免费滴
- 201871010114-李岩松《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- Hazel,自动整理文件,让你的 Mac 井井有条
原文地址 https://sspai.com/post/35225 让我们从实际需求出发,看看问题出在哪里,并在此基础上认识和学习使用 Hazel. 电脑随着使用时间的增长,其中的文件也在疯狂的增长, ...
- Linux 解决ntfs文件系统问题,支持外设(U盘等设备)的即插即拔
# rpm -q fuse //查看这个软件有没有安装,一般安装系统都会装(最小安装例外) fuse-2.9.2-10.el7.x86_64 # yum -y install gcc # wget h ...
- 字体图标转base64
如果你在阿里矢量库下载了字体图标在项目引入无法显示时,可以把图标转成base64 在线转换的链接 https://transfonter.org/ css字体图标的制作
- [笔记] HOW2J.CN网站记录的java笔记_第四部分_HTML
1.写一个显示Hello World的网页, <html> <body> <p>Hello World</p> </body> </h ...