采用python爬虫爬取数据然后采用echarts数据可视化分析

 前言:采用python爬虫爬取天气数据然后采用echarts数据可视化画图分析未来天气变化趋势 

从获取数据到可视化的流程

(熟悉爬虫爬取数据然后数据可视化这个过程)

一、python爬取未来8-15天的天气数据

1、导入用到的一些python第三方库

import requests
import re
from bs4 import BeautifulSoup
import json
import pandas as pd

2、爬取网页源码,经过utf-8的转换得到网页的源码

url='http://www.weather.com.cn/weather15d/101290101.shtml'
rqg=requests.get(url)
html=rqg.content.decode('utf-8')
soup=BeautifulSoup(html,'lxml')
print(soup.prettify())

3、采用BeautifulSoup库提取时间信息

tt=soup.find_all("span",class_="time")
tt

4、利用列表推导式进行时间的过滤提取

time=[i.string for i in tt]
time

 

5、采用BeautifulSoup库提取天气信息

hh=soup.find_all("span",class_="tem")
hh

 

 6、利用列表推导式进行天气的过滤提取

tem=[i.get_text() for i in hh]
tem

 

7、采用re库进行“/”分隔符来划分温度

tem1=[re.split('/',i) for i in tem]
tem1

 

8、利用列表推导式提取最高温与最低温

h=[i[0] for i in tem1]
h

l=[i[1] for i in tem1]
l

 

9、利用列表推导式把摄氏度的符号去除

[int(re.sub('℃','',i)) for i in h]

[int(re.sub('℃','',i)) for i in l]

 

 二、采用echarts数据可视化分析

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>气温变化分析</title>
    <script src="js/echarts.js"></script>
</head>

<body>
    <div id="main" style="width: 800px; height: 600px"></div>
    <script type="text/javascript">
        var myChart = echarts.init(document.getElementById("main"));
        mytextStyle = {
            color: 'blue',
            fontStyle: 'normal',
            fontWeight: 1,
            fontFamily: '黑体',
            fontSize: 20,
        };
        var option = {
            grid: {
                show: true,
                x: 50, y: 66,
                borderColor: '#FA8072',
            },
            title: {
                show: true,
                text: '未来8-15天气温变化',
                subtext: '折线图',
                target: 'blank',
                subtarget: 'blank',
                textAlign: 'center',
                textBaseline: 'top',
                textStyle: mytextStyle,
                padding: 5,
                itemGap: 10,
                zlevel: 0,
                z: 2,
                left: '20%',
                top: '10',
                right: 'auto',
                bottom: 'anto',
                backgroundColor: 'yellow',
                borderColor: '#ccc',
                borderWidth: 2,
                shadowColor: 'red',
                showOffsetX: 0,
                showOffsetY: 0,
                shadowBlur: 10,
            },
            tooltip: { trigger: 'axis' },
            legend: { data: ['最高气温', '最低气温'] },
            toolbox: {
                show: true,
                feature: {
                    mark: { show: true },
                    dataView: { show: true, readOnly: false },
                    magicType: { show: true, type: ['line', 'bar'] },
                    restore: { show: true },
                    saveAsImage: { show: true }
                }
            },
            calculable: true,
            xAxis: [
                {
                    show: true, type: 'category',
                    boundaryGap: false,
                    data: ['周六(30日)', '周日(1日)', '周一(2日)', '周二(3日)', '周三(4日)', '周四(5日)', '周五(6日)']
                }
            ],
            yAxis: [
                {
                    show: true, type: 'value',
                    axisLabel: { formatter: '{value} °C' }
                }
            ],
            series: [
                {
                    name: '最高气温',
                    smooth: true, type: 'line',
                    data: [28, 28, 19, 16, 23, 29, 27, 20],
                    markPoint: {
                        data: [
                            {
                                type: 'max', name: '最大值', symbol: 'diamond', symbolSize: 25,
                                itemStyle: {
                                    normal: { color: 'red' }
                                },
                            },
                        ]
                    },
                    markLine: {
                        data: [
                            {
                                type: 'average', name: '平均值',
                                itemStyle:
                                {
                                    normal: { borderType: 'dotted', color: 'darkred' }
                                },
                            }],
                        },
                    },
                {
                    name: '最低气温',
                    smooth: true, type: 'line', data: [15, 11, 8, 8, 12, 13, 13, 13],
                    markPoint: {
                        data: [
                            {
                                type: 'max', name: '最大值', symbol: 'diamond', symbolSize: 25,
                                itemStyle: {
                                    normal: { color: 'red' }
                                },
                            },
                        ]
                    },
                    markLine: {
                        data: [
                            {
                                type: 'average', name: '平均值',
                                itemStyle:
                                {
                                    normal: { borderType: 'dotted', color: 'darkred' }
                                },
                            }],
                    },
                },
            ],
        };
        myChart.setOption(option);
    </script>
</body>

</html>

实现的功能比较简单,处理流程还是比较完善的已经尽量实现数据分析的自动化 

猜你喜欢

转载自blog.csdn.net/weixin_56814370/article/details/124355207