python凤凰新闻数据分析(四)整合

python版本:3.5, bootstrap版本:3.3.7, django版本:2.0

通过win+r键进入cmd输入命令:

django-admin.py startproject website
cd website
python manage.py startapp tool
进入website/website/settings.py添加如下代码:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'tool',#此处为添加
]
#最后一行添加如下代码
STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'collectstatic')

STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

在最外层website目录下创建static文件夹,进入static文件夹再创建bootstrap文件夹,相应教程可参考django引入bootstrap模板以及图片显示

进入tool文件夹修改models.py,可参考python凤凰新闻数据分析(一)python爬虫数据爬取 python凤凰新闻数据分析(二)爬虫数据写入django sqlite3数据库

然后进入admin.py修改如下:

from django.contrib import admin

# Register your models here.
from .models import *

class InformationAdmin(admin.ModelAdmin):
    list_display = ('title','time','created')

admin.site.register(Information,InformationAdmin)

进入tool文件夹修改views.py,部分代码如下:

from django.shortcuts import render,render_to_response

# Create your views here.
from django.http import HttpResponse
from tool.models import *
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba

def plot(request):
    Information_news = Information.objects.all()
    Information_news_list = []
    I_num = M_num = S_num = E_num = F_num =0 #点击量总和,为之后饼状图数据
    slices = [] #为之后饼状图数据
    for each_I in Information_news:
        I_num += int(each_I.clicks)
        Information_news_list.append(str(each_I))
    slices.append(I_num)
    str_ = "".join(Information_news_list)
    Information_news_text = ' '.join(jieba.cut(str_))

    path = 'msyh.ttc'
    
    wordcloud = WordCloud(font_path=path).generate(Information_news_text)
    plt.imshow(wordcloud,interpolation='bilinear')
    plt.axis("off")
    plt.savefig("C:/pork/website/static/figure/Information.png")
    # 饼状图为点击量比例,需要单独到控制台生成,即python manage.py shell进入控制台,这里有个问题:生成的饼状图会覆盖词云 
    # activities = ['Information','Military','Sports','Entertainment','Finance']
    # cols = ['tan','cadetblue','y','palegreen','plum']
    # try:
    # plt.pie(slices,
    #         explode=[0,0.2,0,0,0],
    #         labels=activities,
    #         colors=cols,
    #         startangle=90,
    #         shadow=False,
    #         autopct='%1.1f%%')
    # except ValueError as e:
    #     pass
    # plt.savefig("C:/pork/website/static/figure/Total.png")
    
    return render(request,'news_plot.html')

在tool文件夹下新建templates文件夹,在tool/templates/创建news_plot.html,可参考django引入bootstrap模板以及图片显示

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"> 
	<title>新闻网站的数据分析</title>
	<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
	<script src="/static/bootstrap/jquery/jquery.min.js"></script>
	<script src="/static/bootstrap/js/bootstrap.min.js"></script>
	<style>
   	.fakeimg {
       height: 400px;
    }
    .img-thumbnail{
    	height: 400px;
    	width: 800px;
    }
 	</style>
</head>
<body>

<div class="jumbotron text-center" style="margin-bottom:0">
  <h1>新闻网站的数据分析</h1>
</div>

<nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>                        
      </button>
      <a class="navbar-brand" href="#">Python</a>
    </div>
    <div class="collapse navbar-collapse" id="myNavbar">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">主 页</a></li>
        <li><a href="#">词 云</a></li>
        <li><a href="#">关 于</a></li>
      </ul>
    </div>
  </div>
</nav>

{% load static %}

<div class="container">
  <div class="row">
    <div class="col-sm-4">
      <h2>新闻链接</h2>
      <ul class="nav nav-pills nav-stacked">
        <li class="active"><a href="#">资讯</a></li>
        <li><a href="#">军事</a></li>
        <li><a href="#">体育</a></li>
        <li><a href="#">娱乐</a></li>
        <li><a href="#">财经</a></li>
      </ul>
      <h2>新闻点击量比例</h2>
      <div class="fakeimg"><img src="{% static "figure/Total.png" %}" height="400px" width="360px"></div>
      <hr class="hidden-sm hidden-md hidden-lg">
    </div>
    <div class="col-sm-8">
      <h2 class="I">资讯</h2>
      <div class="fakeimg"><img src="{% static "figure/Information.png" %}" class="img-thumbnail"></div>
      <br>
      <h2 class="M">军事</h2>
      <div class="fakeimg"><img src="{% static "figure/Military.png" %}" class="img-thumbnail"></div>
      <h2 class="S">体育</h2>
      <div class="fakeimg"><img src="{% static "figure/Sports.png" %}" class="img-thumbnail"></div>
      <h2 class="E">娱乐</h2>
      <div class="fakeimg"><img src="{% static "figure/Entertainment.png" %}" class="img-thumbnail"></div>
      <h2 class="F">财经</h2>
      <div class="fakeimg"><img src="{% static "figure/Finance.png" %}" class="img-thumbnail"></div>
    </div>
  </div>
</div>

<div class="jumbotron text-center" style="margin-bottom:0">
  <p><span class="glyphicon glyphicon-copyright-mark" aria-hidden="true"></span> 河北金融学院版权所有</p>
</div>

</body>
</html>
修改website/website/urls.py如下:
from django.contrib import admin
from django.urls import path
from tool.views import *

urlpatterns = [
    path('index/',plot),
    path('admin/', admin.site.urls),
]
然后cmd输入:
python manage.py runserver 0.0.0.0:8000
浏览器输入127.0.0.1:8000/index即可看到:

完整代码可下载查看:

https://download.csdn.net/download/css_aaa/10530705

猜你喜欢

转载自blog.csdn.net/css_aaa/article/details/80973106
今日推荐