利用pyrchart绘制实时微博热点时间轮播图
1.获取数据
import schedule
import pandas as pd
from datetime import datetime
count = 0
def get_content():
global count
url = 'https://s.weibo.com/top/summary?cate=realtimehot&sudaref=s.weibo.com&display=0&retcode=6102'
time_ = datetime.now().strftime("%Y-%m-%d %H:%M") # 获取当前时间
df = pd.read_html(url)[0][1:11][['序号', '关键词']] # 快速获取在html中页面中table格式的数据
df['序号'] = df['序号'].apply(int)
df['热度'] = df['关键词'].str.split(' ',expand=True)[1]
df['关键词'] = df['关键词'].str.split(' ',expand=True)[0]
df['时间'] = [time_]*len(df['关键词'])
if count == 0:
df.to_csv('data.csv',mode='a+',index=False)
count += 1
else:
df.to_csv('data.csv',mode='a+',index=False,header=False)
schedule.every(1).minutes.do(get_content)
while True:
schedule.run_pending()
2.绘制时间轮播图
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline, Grid
from pyecharts.globals import ThemeType
df = pd.read_csv('data.csv')
print(df)
t = Timeline()
for i in range(59):
bar = (
Bar()
.add_xaxis(list(df['关键词'][i*10:i*10+10][::-1]))
.add_yaxis('热度',list(df['热度'][i*10:i*10+10][::-1]))
.reversal_axis()
.set_global_opts(title_opts=opts.TitleOpts(title=f"{list(df['时间'])[i*10]}"))
.set_series_opts(label_opts=opts.LabelOpts(position='right'))
)
grid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_left="24%"))
)
t.add(grid, "")
t.add_schema(
play_interval=250, # 轮播速度
is_timeline_show=False, # 是否显示 timeline 组件
is_auto_play=True # 是否自动播放
)
t.render('时间轮播图.html')
3.效果如下:
具体的动态图形可到资源下载哦!