学习笔记(39):21天通关Python(仅视频课)-案例实操:使用Pygal分析天气数据(下)...

立即学习:https://edu.csdn.net/course/play/24797/282245?utm_source=blogtoedu

import urllib.request, re
import datetime, pygal

city = input('请输入一个城市的拼音_____')
# year = input('请输入一个年份______')
getmonth = input('请输入一个月份____')
getday = input('请输入一个日期____')


def get_tianqi(cit, yea, mon, da):
    url = 'https://m.tianqi.com/tianqi/%s/%s%s%s.html' % (cit, yea, mon, da)
    print(url)
    request = urllib.request.Request(url)
    # 伪造浏览器访问头
    request.add_header('User-Agent', 'Mozilla/5.0')
    return urllib.request.urlopen(request).read().decode('UTF-8')


# print(get_tianqi('qingdao', '2020', '04', '07'))

# 日期,最高气温,最低气温
dates, high_t, low_t = [], [], []
# city = 'qingdao'
year = '2020'

# months = ['%02d' % i for i in range(1, 13)]
months = []
# print(months)
# 定义一个开始的时间
# startT = datetime.datetime(2019,12,31)
months.append('%02d' % int(getmonth))
try:

    for month in months:
        html = get_tianqi(city, year, month, '%02d' % int(getday))
        # 去掉内容中的空格
        htmlText = ''.join(html.split())
        # print(htmlText)
        pattern = re.compile('<ulclass="w100listjump">(.* ?)</ul>')
        find_ul = re.findall(pattern, htmlText)
        # print(find_ul[0])
        pattern1 = re.compile('<li><atitle="(.*?)</a></li>')
        find_child = re.findall(pattern1, find_ul[0])
        # print(find_child)
        for dayval in find_child:
            week_pattern = re.compile('<divclass="futuredaysfl">(.*?)</div><divclass')
            week_val = re.findall(week_pattern, dayval)
            # print(week_val[0])
            # 获取时间和星期
            dates.append(week_val[0][18:23] + '/' + week_val[0][5:7])
            # 获取温度最大和最小
            tem_pattern = re.compile('<divclass="futuredescfl"><div>(.* ?)</div><div>')
            tem_val = re.findall(tem_pattern, dayval)
            # print (tem_val[0].split('~'))
            # print((''.join((tem_val[0].split('~'))[0]).split('°'))[0])
            low_t.append(int((''.join((tem_val[0].split('~'))[0]).split('°'))[0]))
            high_t.append(int((''.join((tem_val[0].split('~'))[1]).split('°'))[0]))

    print(dates)
    print(low_t)
    print(high_t)

    dm = pygal.Bar()
    dm.add('最低温度', low_t)
    dm.add('最高温度', high_t)

    dm.title = '%s之后7天天气' % (getmonth + '月' + getday + '日')
    dm.x_labels = dates
    dm.x_title = '日期和星期'
    dm.y_title = '温度(摄氏度)'
    dm.legend_at_bottom = True
    dm.render_to_file('test65.svg')
except OSError as e:
    print(e)
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello-Rock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值