zoukankan      html  css  js  c++  java
  • 自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图

    秋词—刘禹锡

    自古逢秋悲寂寥,
    我言秋日胜春朝。
    晴空一鹤排云上,
    便引诗情到碧霄。

    古人谈及秋天,都是悲凉寂寥,那么….我好想回到古代的秋天啊!明明到了秋天,为什么最近的气温比夏天还热。
    之前做天气预报自动推送小工具的时候,爬过中国天气网 

    http://www.weather.com.cn/forecast/,今天就再盘它一次,来看看全国天气吧
    首先进入中国天气网,有一个国内天气预报的栏目:

    如上图所示,网站将中国分为:
    华为、东北、华南、西北、西南、华东、华中,西安属于西北,进去看看:

    网站有一个设置,只要过了当天的6点,那么当天的白天温度就清空了…所以我们就来看看,明天全国天气Top10吧!

    看到这温度,我就想说,三伏天的温度也不过如此吧….
    咱们来分析下这张图,每个省的第一个城市都是省会城市,省内的温度差别不大,那我们就把全国每个省会城市的温度进行比较吧,至于港澳台…暂且不分析。

    网站分析

    网站html分析

    每日天气

    • <div class="conMidtab">
      conMidtab一共有7个,后6个添加了隐藏样式style="display:none;",是后6天的天气预报,既然咱们看的是明天天气,就选择第二个吧…

    • 各省天气
      <div class="conMidtab2">
      每个省份的数据都包过在这个div中,只要findAll即可

    • 省会城市
      <tr style="background-color: rgb(255, 255, 255);">
      表格中的前两个tr应该用th做标题的,所以从第三个tr就是省会城市的温度信息了

    • 数据获取
      省会城市名称、最高温度、最低温度 分别在1、4、7的td中,findALL后,这么规律的排序直接使用列表切片[1:8:3]即可获取

    数据汇总分析

    刚才分析了西北地区的数据获取,然后再看看西南。
    西北地域的数据url为:
    http://www.weather.com.cn/textFC/xb.shtml
    再看看西南地域的url:
    http://www.weather.com.cn/textFC/xn.shtml
    简直不要太欢乐,url只有最后的地域拼音头不一样,可以开启for循环模式了!
    遍历7个地域,然后获取每个地域下的省会城市,最终保存到一个列表中,样式大致如下

    数据展示

    数据趴好了,返回一串数组?这怎么符合处女座追求完美的行事风格!
    python绘图的模块很多,多数人都用Matplotlib,但是…

    渣男锡纸烫,渣女大波浪,而我不一样,积极又向上。

    所以不一样的我使用pyecharts….
    今天用pyecharts绘图,让大家看看python集成echarts后的绘图效果如何。

    代码实现

    模块准备

    如果你是首次使用爬虫和echarts绘图,需要关注一下模块的安装:

    pip install requests
    install beautifulsoup4
    pip install lxml # bs4的解析依赖库
    pip install pyecharts

    关于pyecharts的更新

    网上铺天盖地的pycharts都是来回转来转去的0.3.x、0.5.x的版本
    pyecharts 19年4月份已经更新到1.1.0了,其中不管是模块导入还是插件的使用,变更都比较大。
    所以网上的那列介绍,如果是python3.6+你就别看了,不适合你,连代码引入都会报错。
    有人说可以指定旧版本啊,可既然出了新版本,你又何必杠精的去学习旧的版本?
    看看pyecharts的github:https://github.com/pyecharts/pyechart

    网站底部有专门的中、英文文档,喜欢的朋友可以去仔细瞧瞧…

    代码实现

    # -*- coding: utf-8 -*-
    # @Author   : 王翔
    # @JianShu  : 清风Python
    # @Date     : 2019/8/15 21:39
    # @Software : PyCharm
    # @version  :Python 3.7.3
    # @File     : TempComparison.py
    
    import requests
    from bs4 import BeautifulSoup
    from pyecharts.charts import Line
    import datetime
    
    
    class TempComparison:
        def __init__(self):
            self.cityInfoList = []
    
        def get_request(self):
            areas_list = ['hb', 'db', 'hd', 'hz', 'hn', 'xb', 'xn']
            headers = {
                'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) '
                              'AppleWebKit/537.36 (KHTML, like Gecko) '
                              'Chrome/70.0.3538.67 Safari/537.36',
                'Referer': 'http://www.weather.com.cn/textFC/xn.shtml'
            }
            for area in areas_list:
                req = requests.get("http://www.weather.com.cn/textFC/%s.shtml" % area,
                                   headers=headers)
                content = req.content.decode('utf-8')
                soup = BeautifulSoup(content, 'lxml')
                for line in soup.findAll('div', {'class': 'conMidtab'})[1].findAll('div', {'class': 'conMidtab2'}):
                    td_list = line.findAll('tr')[2].findAll('td')[1:8:3]
                    self.cityInfoList.append(list(map(lambda x: x.text.strip(), td_list)))
            print(self.cityInfoList)
    
        def filter_result(self):
            top_city_info = sorted(self.cityInfoList, key=lambda x: x[1], reverse=True)[:10]
            city, high_temp, low_temp = list(zip(*top_city_info))
            now = datetime.datetime.now()
            tommorrow = (now + datetime.timedelta(days=1)).strftime("%Y-%m-%d")
            charts_bar = (
                Line()
                    .set_global_opts(
                    title_opts={"text": "省会城市温度Top10 清风Python",
                                "subtext": tommorrow})
                    .add_xaxis(city)
                    .add_yaxis("高温", high_temp, color='#C3322D')  # is_symbol_show=True, is_smooth=True,
                    .add_yaxis("低温", low_temp, color='#399EFF')
            )
            charts_bar.render('TempComparison.html')
    
    
    if __name__ == '__main__':
        main = TempComparison()
        main.get_request()
        main.filter_result()
    

    代码执行完成后,会生成一个TempComparison.html的文件

    效果展示:

    The End

    OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。
    期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。

    作者:清风Python

  • 相关阅读:
    Qt计算器开发(三):执行效果及项目总结
    [HNOI2019]校园旅行
    How to fix nuget Unrecognized license type MIT when pack
    How to fix nuget Unrecognized license type MIT when pack
    git 通过 SublimeMerge 处理冲突
    git 通过 SublimeMerge 处理冲突
    git 上传当前分支
    git 上传当前分支
    gif 格式
    gif 格式
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13165605.html
Copyright © 2011-2022 走看看