爬取后的数据可视化Flask框架、Echarts图表


获取源代码请访问 https://github.com/zhang020801/douban_bookTop250

一、前言

前一篇文章(文章链接)中已经将爬取到的数据导入到Sqlist数据库中,接下来是将数据库中的数据可视化,(用到html、css、Flask框架、Echarts图表)
选择合适的网页模板进行修改,模板选择下载地址:模板链接

二、工程介绍

1、工程创建

(1)将下载好的模板导入到包含数据库文件(.db文件)的目录下,或者是将数据库文件复制到该网页模板的文件夹中。
在这里插入图片描述
(2)新建app.py工程,进行Flask框架的编写

from flask import Flask,render_template
import sqlite3
app = Flask(__name__)

@app.route("/index")
def index():
    datalist = []
    conn = sqlite3.connect("book.db") #链接数据库
    cur = conn.cursor()
    sql = "select id,title,score,book_link,Img_link,author,press,time,money,num,jieshao from book250"
    data = cur.execute(sql)   #执行sql语句
    for item in data:
        datalist.append(item)
    score = []
    num = []
    conn = sqlite3.connect("book.db")
    cur = conn.cursor()
    sql = "select score,count(score) from book250 group by score"
    data = cur.execute(sql)
    for item in data:
        score.append(item[0])
        num.append(item[1])
    cur.close()
    conn.close()
    #将图书列表数据传递到index网页中
    return render_template("index.html",books = datalist,score = score,num = num)


if __name__ == '__main__':
    app.run(debug=True)

2、网页修改

对导入的模板进行适当的删改,对数据库中的数据进行分析,并可视化。
网页文件(.html文件) 中使用传入的数据要用双大括号括起来“{ {}}"。
网页文件(.html文件) 中编写循环时要使用下列格式

{% for book in books %}
...
...
{% endfor %}

3、数据可视化

【数据可视化1】

<h2 class="tm-block-title">Top250书单</h2>
<table class="table table-striped">
	<thead>
		<tr>
			<th scope="col">排名</th>
			<th scope="col">图书名称</th>
			<th scope="col">评分</th>
            <th scope="col">图书链接</th>
			<th scope="col">作者/译者</th>
			<th scope="col">出版社</th>
			<th scope="col">出版时间</th>
			<th scope="col">售价</th>
			<th scope="col">评论人数</th>
			<th scope="col">简要介绍</th>
		</tr>
	 </thead>
	<tbody>
	{% for book in books %}
		<tr>
			<td>
				<div class="tm-status-circle moving">
                                    </div>{
   
   {book[0]}}
            </td>
			<td>{
   
   {book[1]}}</td>
			<td>{
   
   {book[2]}}</td>
			<td>{
   
   {book[3]}}</td>
			<td>{
   
   {book[5]}}</td>
			<td>{
   
   {book[6]}}</td>
			<td>{
   
   {book[7]}}</td>
			<td>{
   
   {book[8]}}</td>
			<td>{
   
   {book[9]}}</td>
			<td>{
   
   {book[10]}}</td>
		</tr>
	{% endfor %}
	</tbody>
</table>

【可视化展示1】
在这里插入图片描述
【数据可视化2】

<h2 class="tm-block-title">Top250 List</h2>
<div class="tm-notification-items">
	{% for book in books %}
	<div class="media tm-notification-item">
		<div class="media-body">
			<p class="mb-2"><b>《{
   
   {book[1]}}》</b>
			<a href="{
     
     {book[3]}}" class="tm-notification-link">图书链接</a></p>
			<p>{
   
   {book[10]}}</p>
			<span class="tm-small tm-text-color-secondary">{
   
   {book[6]}} &nbsp;&nbsp;&nbsp;{
   
   {book[7]}}</span>
		</div>
	</div>
	{% endfor %}
</div>

【可视化展示2】
在这里插入图片描述
【数据可视化3】
使用Echarts图表时,注意在网页头部标签声明

<script src="/static/js/echarts.min.js"></script>

此js文件需要到Echarts官网下载到该工程的js文件夹下。

<h2 class="tm-block-title">Top250 Score List</h2>
<div id="main" style="width: 100%;height:300px;"></div>
	<script type="text/javascript">
	// 基于准备好的dom,初始化echarts实例
	var myChart = echarts.init(document.getElementById('main'));
	// 指定图表的配置项和数据
	var option = {
     
     
				color: ['#a957a9'],
				tooltip: {
     
     
				trigger: 'axis',
				axisPointer: {
     
                 // 坐标轴指示器,坐标轴触发有效
				type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
				}
			},
                grid: {
     
     
                       eft: '3%',
                       right: '4%',
                       bottom: '3%',
                       containLabel: true
                       },
                xAxis: [
                     {
     
     
                        type: 'category',
                        data: {
     
     {
     
     score}},
                        axisTick: {
     
     
                              alignWithLabel: true
                        }
                      }	
                    ],
                yAxis: [
                     {
     
     
                        type: 'value'
                     }
                	],
                series: [
                      {
     
     
                         type: 'bar',
                         barWidth: '60%',
                         data:{
     
     {
     
     num}}
                      }
                     ]
                   };
       // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
	</script>

【可视化展示3】
在这里插入图片描述
【数据可视化4】

 <h2 class="tm-block-title">Score List</h2>
                         <div id="main1" style="width: 100%;height:300px;"></div>
                        <script type="text/javascript">
                        var chartDom = document.getElementById('main1');
                        var myChart = echarts.init(chartDom);
                        var option;

                        option = {
     
     
                            title: {
     
     
                                text: '评分分析',
                                subtext: '数据来源于网络',
                                left: 'center'
                            },
                            tooltip: {
     
     
                                trigger: 'item'
                            },
                            legend: {
     
     
                                orient: 'vertical',
                                left: 'left',
                            },
                            series: [
                                {
     
     
                                    name: '评分及对应数量',
                                    type: 'pie',
                                    radius: '50%',
                                    data: [
                                        {
     
     value: {
     
     {
     
     num[0]}}, name:{
     
     {
     
     score[0]}}},
                                        {
     
     value: {
     
     {
     
     num[1]}}, name:{
     
     {
     
     score[1]}}},
                                        {
     
     value: {
     
     {
     
     num[2]}}, name:{
     
     {
     
     score[2]}}},
                                        {
     
     value: {
     
     {
     
     num[3]}}, name:{
     
     {
     
     score[3]}}},
                                        {
     
     value: {
     
     {
     
     num[4]}}, name:{
     
     {
     
     score[4]}}},
                                        {
     
     value: {
     
     {
     
     num[5]}}, name:{
     
     {
     
     score[5]}}},
                                        {
     
     value: {
     
     {
     
     num[6]}}, name:{
     
     {
     
     score[6]}}},
                                        {
     
     value: {
     
     {
     
     num[7]}}, name:{
     
     {
     
     score[7]}}},
                                        {
     
     value: {
     
     {
     
     num[8]}}, name:{
     
     {
     
     score[8]}}},
                                        {
     
     value: {
     
     {
     
     num[9]}}, name:{
     
     {
     
     score[9]}}},
                                        {
     
     value: {
     
     {
     
     num[10]}}, name:{
     
     {
     
     score[10]}}},
                                        {
     
     value: {
     
     {
     
     num[11]}}, name:{
     
     {
     
     score[11]}}},
                                        {
     
     value: {
     
     {
     
     num[12]}}, name:{
     
     {
     
     score[12]}}},
                                        {
     
     value: {
     
     {
     
     num[13]}}, name:{
     
     {
     
     score[13]}}}

                                    ],
                                    emphasis: {
     
     
                                        itemStyle: {
     
     
                                            shadowBlur: 10,
                                            shadowOffsetX: 0,
                                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                                        }
                                    }
                                }
                            ]
                        };
                         myChart.setOption(option);
                    </script>

【可视化展示4】
在这里插入图片描述

三、页面展示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/gets_s/article/details/113097816