自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图

摘要:
网站分析网站html分析每日天气<最后六个添加隐藏样式样式=“显示:让我们选择第二个……只要findAll<即可找到省会城市<表中的前两个tr应使用th作为标题,因此第三个tr是省会城市的温度信息。从第三个tr获得的数据是td分别为1、4和7。

秋词—刘禹锡

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

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

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

自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图第1张

如上图所示,网站将中国分为:
华为、东北、华南、西北、西南、华东、华中,西安属于西北,进去看看:
自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图第2张

网站有一个设置,只要过了当天的6点,那么当天的白天温度就清空了…所以我们就来看看,明天全国天气Top10吧!
自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图第3张

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

网站分析

网站html分析

自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图第4张

每日天气

  • <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使用Pyecharts统计全国温度Top10并绘图第5张

数据展示

数据趴好了,返回一串数组?这怎么符合处女座追求完美的行事风格!
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

自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图第6张

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

代码实现

# -*- 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的文件
自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图第7张

效果展示:
自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图第8张

The End

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

作者:清风Python

免责声明:文章转载自《自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS 7安装WordPress使用调试器脚本增强断点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql中处理1970年前的日期(unixtime为负数的情况)负数时间戳格式化

客户扔过来一个bug,说是一个系统中对42岁以上的人的统计不正确,而41岁以下的人没有问题。眼睛瞟了一下托盘区里的日期,2012年3月26日,嗯,今年42岁的话,那么应该就是出生在1970年左右,马上就把问题锁定在了unixtime上,嗯,重点怀疑! 小贴士:UNIX时间,或称POSIX时间是UNIX或类UNIX系统使用的时间表示方式:从协调世界时1970...

h5页面利用canvas压缩图片并上传

由于现在手机拍摄的照片质量较高,为减轻服务器压力在上传图片时需要压缩后再进行上传。h5页面中压缩图片就需要用canvas来实现,通过固定canvas的宽高重绘图片,来达到压缩的目的。 <div style="margin:0 auto;60%;padding-top:80px;"> <input type="file" ac...

Redis AOF重写

AOF 重写 AOF 持久化是通过保存被执行的写命令来记录数据库状态的,所以AOF文件的大小随着时间的流逝一定会越来越大;影响包括但不限于:对于Redis服务器,计算机的存储压力;AOF还原出数据库状态的时间增加; 为了解决AOF文件体积膨胀的问题,Redis提供了AOF重写功能:Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文...

Dart list add()和addAll方法使用

可变列表可以在运行时动态增长。所述 List.add() 函数将指定值到列表的结尾,并返回修改的列表对象。下面说明了相同的内容。 List l = [1,2,3]; l.add(12); print(l); } 它将产生以下 输出: [1, 2, 3, 12] 所述 List.addAll() 函数接受由逗号分隔的多个值和这些附加到列表。 List...

【mockito】单元测试之mockito简单使用

背景 项目使用的是springmvc+mybatis 开发; mock包为mockito-all;虽然也引用了powermock,但截至目前,还未使用到;如果使用到后续再补相关笔记。 mock,个人理解,有两个场景比较常见吧。一个是在项目初期接口定义好后没有实现逻辑阶段;另一个就是针对已经有的逻辑自测阶段,而又不想(或者依赖的别人接口不想关心)被别人所左右...

Element-ui局部添加loading效果

项目:Vue+element-ui 在一个表格数据加载时,因为需要连接其它东西,所以后台接口返回数据需要较长时间,因此添加局部Loading效果,增加用户体验度, 最开始使用下面代码,直接放到<el-table>中,测试时遇到问题 element-loading-spinner="el-icon-loading" :element-loadin...