利用 Python 得到未来七天天气预报

斯人若彩虹,遇上方知有

因为自己平时都不看手机上的天气 app,因此都是出门之后“冷暖自知”,而在秦皇岛晚上总是会被冻得瑟瑟发抖,因此想写一个小脚本可以查询未来几天的天气,让自己选择合适的衣服。

经过查询,选择中国天气网 ,里面有七天的预报。

  • 静态网页

在这里插入图片描述

通过 F12 调用开发者工具,找到未来七天天气预报的位置

在这里插入图片描述

向下打开,看到 ul 标签下有七个 li 标签,应该是对应七天的天气

在这里插入图片描述

不出所料,正是每天的天气情况。下面就开始写代码

import sys
import requests
from lxml import html

导入 requests 库和 html 库,sys 库用来接收要查询的城市名

在这里插入图片描述

观察上面的 url,查询不同的城市对应的后面的数字是不一样的,因此查询不同的城市只要修改对应的数字串就可以了

def get_content(code='101091101'):
    url = 'http://www.weather.com.cn/weather/%s.shtml' % code
    return requests.get(url).content

获取申请访问的内容

# 获取温度
def get_tem(top, index):
    tem_low = top.xpath('li[%d]/p[@class="tem"]/i/text()' % index)[0]
    if len(top.xpath('li[%d]/p[@class="tem"]/span' % index)) != 0:
        tem_high = top.xpath('li[%d]/p[@class="tem"]/span/text()' % index)[0] + '℃'
        return tem_low + ' ~' + tem_high
    else:
        return tem_low

后来我发现到了晚上就没有最高温度和最低温度了,只有当前温度,因此写个函数处理一下温度的获取。当有两个温度的时候,输出最低温度到最高温度,只有当前温度时输出当前温度。

在这里插入图片描述

生活指数的结构在这里

在这里插入图片描述

然后就开始编写代码获取生活建议

# 生活指数
def shzs():
    l = []
    for i in sel.xpath('//ul[@class="clearfix"]'):
        # 防晒指数
        span_intension = i.xpath('li[1]/span/text()')[0]
        span_product = i.xpath('li[1]/p/text()')[0]
        if len(span_intension) == 1:
            span = '紫外线指数:' + span_intension + '      '+ span_product
        else:
            span = '紫外线指数:' + span_intension + '    '+ span_product
        # 穿衣指数 
        dress_intension = i.xpath('li[4]/a/span/text()')[0]
        dress_sug = i.xpath('li[4]/a/p/text()')[0]
        if len(dress_intension) == 2:
            dress = '穿衣指数:' + dress_intension + '      ' + dress_sug
        else:
            dress = '穿衣指数:' + dress_intension + '    ' + dress_sug
        # 空气指数
        air_condition = i.xpath('li[6]/span/text()')[0]
        air = '空气指数:' + air_condition
        t = (span, dress, air)
        l.append(t)
    return l

用 tuple 存储三个指数,用 list 存储七天的生活指数

# 预测未来几天的天气和生活指数
def predict_days(days):
    for i in range(1, days+1):
        # 日期
        date = top.xpath('li[%d]/h1/text()' % i)[0]
        # 天气
        weather = top.xpath('li[%d]/p[@class="wea"]/text()' % i)[0]
        # 温度
        tem = get_tem(top, i)
        # 风力
        wind = top.xpath('li[%d]/p[@class="win"]/i/text()' % i)[0]
        print("日期:%s\n天气:%s\n温度:%s\n风力:%s" % (date, weather, tem, wind))
        
        life_condition = shzs() 
        for index in range(3):
            print(life_condition[i-1][index])
        print('==============================================')

传入预测的天数,输出天气情况和生活指数

在这里插入图片描述

if __name__ == "__main__":

    city = {
        "秦皇岛":'101091101',
        "淄川":'101120302',
        "北京":'101010100'
    }

    if len(sys.argv) == 2:
        city_code = city[sys.argv[1]]
        content = get_content(city_code)
    else:
        content = get_content()
    sel = html.fromstring(content)
    top = sel.xpath('//ul[@class="t clearfix"]')[0] # 忘记写 [0] top 类型为list
    suggestions = sel.xpath('//ul[@class="clearfix"]')[0]

    predict_days(7)

想要查询别的城市的天气,只需要在 city 里添加对应的城市名和代码即可

python weather_predict.py 北京 即可查询北京七天的天气情况

完整代码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值