博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结合bs4, 在flask应用中查询天气
阅读量:4099 次
发布时间:2019-05-25

本文共 1915 字,大约阅读时间需要 6 分钟。

网上好多查询天气的API接口,使用简单,页面还好看。

自己写一遍代码,会收获多一些。


暂时不考虑页面和查询结果的美观,大概如下。

这里写图片描述

这里写图片描述


上面的天气结果来自:

这里写图片描述

对应的网页源代码:

  • 14日白天

    多云

    34°C

    微风

    日出 05:53

  • 14日夜间

    多云

    26°C

    微风

    日落 18:13


先用爬虫来抓取需要的数据。

首先,要根据输入城市名找到对应的城市ID。(用python中的字典,中国天气网提供了,使用Excel、记事本就可以批量完成)

写了一个单独的文件citycode.py:


然后,根据不同的城市,用不同的URL得到查询结果。

from urllib.request import urlopenfrom bs4 import BeautifulSoupfrom citycode import citycode#写在了函数里,需要传递城市名参数def get_weather(cityname):    prefix = 'http://www.weather.com.cn/weather1d/'    suffix = '.shtml'    # 根据用户输入城市名找到对应的城市编码id    city_id = citycode[cityname]    #完整的URL    url = prefix + str(city_id) + suffix    htmldoc = urlopen(url)    soup = BeautifulSoup(htmldoc,"html.parser")    soup1 = soup.find('div','t')    # 这是今天的天气信息    result_almost = soup1.ul    # 这样直接当最后结果,调用函数后返回这个结果    result = result_almost.get_text()    return result

然后在flask 应用中调用这个get_weather函数。

from flask import Flask, render_template,requestfrom flask_wtf import FlaskFormfrom wtforms import StringField, validatorsfrom weather import get_weatherapp = Flask(__name__)#使用了wtforms,虽然web form内容很少class WeatherForm(FlaskForm):    city = StringField('City', [validators.Length(min=0, max=10)])@app.route("/weather",methods=['GET','POST'])def weather():    form = WeatherForm(request.form)    if request.method == 'POST':        city = form.city.data        result = get_weather(city) # 调用get_weather函数来抓取天气信息,同时将结果传递到weather.html模板中。        return render_template('weather.html',form=form,result=result)    return render_template('weather.html',form=form)if __name__ == '__main__':    app.secret_key="It doesn't matter"    app.run(debug=True)

然后,weather.html:

      
flaskapp
{
{ form.csrf_token }} {
{
form.city}}

{
{
form.city.data}}

{

{
result}}


能改进的还有好多,先这样啊。

好想有份工作,结合着工作来学习。

不然学习成本太高了,而且这都毕业两个多月了,还没有工作,真的说不过去。

你可能感兴趣的文章
字符编码:ASCII,Unicode 和 UTF-8
查看>>
QT跨MinGW和MSVC两种编译器的解决办法
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
i2c-tools
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>