获取大屏第一列信息数据, 并写入my_database数据库的info表中, 如若表已存在, 删除覆盖
df_info = get_info()
print(df_info)
df_info.to_sql(“info”, con=engine, if_exists=‘replace’, index=False)
获取大屏第二、三列信息数据, 并写入my_database数据库的日期表中, 如若表已存在, 删除覆盖
df_article = get_blog()
print(df_article)
df_article.to_sql(today, con=engine, if_exists=‘replace’, index=True)
运行成功后,就可以去数据库查询信息了。
info表,包含日期、头图、博客名、文章数、粉丝数、点赞数、评论数、等级数、访问数、积分数、排名数。
日期表,包含文章地址、标题、日期、阅读数、评论数、类型。
其中爬虫代码可设置定时运行,info表为60秒,日期表为60分钟。
尽量不要太频繁,容易被封IP,或者选择使用代理池。
这样便可以做到数据实时更新。
既然数据已经有了,下面就可以来编写页面了。
02. 大屏搭建
导入相关的Python库,同样可以通过pip进行安装。
from spider_py import get_info, get_blog
from dash import dcc
import dash
from dash import html
import pandas as pd
import plotly.graph_objs as go
from dash.dependencies import Input, Output
import datetime as dt
from sqlalchemy import create_engine
from flask_caching import Cache
import numpy as np
设置一些基本的配置参数,如数据库连接、网页样式、Dash实例、图表颜色。
今天的时间
today = dt.datetime.today().strftime(“%Y-%m-%d”)
连接数据库
engine = create_engine(‘mysql+pymysql://root:123456@localhost/my_database?charset=utf8’)
导入css样式
external_css = [
“https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css”,
“https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css”
]
创建一个实例
app = dash.Dash(name, external_stylesheets=external_css)
server = app.server
可以选择使用缓存, 减少频繁的数据请求
cache = Cache(app.server, config={
‘CACHE_TYPE’: ‘filesystem’,
‘CACHE_DIR’: ‘cache-directory’
})
读取info表的数据
info = pd.read_sql(‘info’, con=engine)
图表颜色
color_scale = [‘#2c0772’, ‘#3d208e’, ‘#8D7DFF’, ‘#CDCCFF’, ‘#C7FFFB’, ‘#ff2c6d’, ‘#564b43’, ‘#161d33’]
这里将缓存代码注释掉了,如有频繁的页面刷新请求,就可以选择使用。
def indicator(text, id_value):
“”“第一列的文字及数字信息显示”“”
return html.Div([
html.P(text, className=“twelve columns indicator_text”),
html.P(id=id_value, className=“indicator_value”),
], className=“col indicator”)
def get_news_table(data):
“”“获取文章列表, 根据阅读排序”“”
df = data.copy()
df.so