requests请求丁香园数据绘制echarts图像

1.新建index.js

npm init -y

执行上述命令,极简初始化一个package.json文件。

2.安装cheerio

npm install --save cheerio

3.爬取网页源码中数据

//网络请求包requests
let requests = require('requests')
//文件操作包fs
let fs = require('fs')
//路径辅助
let path = require('path')
//js中通过div的id获取网页源码
const cheerio = require('cheerio')

requests('https://ncov.dxy.cn/ncovh5/view/pneumonia')
    .on('data', function (chunk) {
        //无window,初始化一个
        let window = {}
        //加载HTML,传入的chunk为请求网页源码
        const $ = cheerio.load(chunk)
        //eval(string),将string作为js代码执行
        //$( selector, [context], [root] )
        //运行id为getAreaStat这段html代码
        eval($('#getAreaStat').html())
        //__dirname当前目录,data.json文件名
        fs.writeFile(path.resolve(__dirname, 'data.json'),
            //写入内容为转化为json对象的window.getAreaStat
            JSON.stringify(window.getAreaStat),
            () => {
                console.log('成功');
            }
        )
    })

node index.js

执行完上述命令,index.html同级目录下会出现一个data.json,备用

4.解析数据,交echarts显示

npm install --save echarts

安装后到node_modules中找到新安装好的echarts包,把echarts.min.js拿出来,在index.html中引入使用。还要拿其中map文件夹下的china.js,作为地图源。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>疫情</title>
    <script src="js/echarts.min.js"></script>
    <script src="map/china.js"></script>
</head>

<body>
    <div id="main" style="width: 1800px;height:1200px;"></div>
    <script type="text/javascript">
        var myChart = echarts.init(document.getElementById('main'));
        //从json中map出自己需要的信息数组,交给data
        fetch('data.json').then(res => res.json()).then(res => {
            let data = res.map(r => {
                return {
                    name: r.provinceShortName,
                    value: [r.currentConfirmedCount, r.confirmedCount, r.deadCount]
                }
            })

            var option = {
                title: {
                    text: 'ECharts'
                },
                //视觉映射显示
                visualMap: {
                    //以value[0]为显示依据
                    dimension: 0
                },
                //提示
                tooltip: {
                    //提示框内容
                    //当鼠标放上去时,会得到该省份对应的对象
                    formatter(data) {

                        return `
                        ${data.data.name}<br>
                        当前确诊:${data.data.value[0]}<br>
                        累计确诊:${data.data.value[1]}<br>
                        累计死亡:${data.data.value[2]}<br>
                        `
                    },
                    //提示框背景颜色
                    backgroundColor: 'rgba(0,0,0,1)',
                },
                legend: {},
                series: [{
                    name: '疫情地图',
                    type: 'map',
                    //对应引入的地图名
                    map: 'china',
                    //数据对象
                    data,
                    //地图上的小红点
                    showLegendSymbol: false
                }]
            };
            myChart.setOption(option);
        })
    </script>

</body>

</html>

至此完成。

猜你喜欢

转载自www.cnblogs.com/beibingji/p/12459492.html