如何用 Python 让微博热搜榜动起来

2020-09-22 15:49:32 浏览数 (3)


今天教大家如何用 Pyecharts 制作微博热搜榜动态展示视频

先上视频看看效果:

教程主要有2部分:

一是 Python 爬取微博热搜内容 二是用 pyecharts 制作动态视频

下面给大家详细介绍一下

一、爬取微博热搜内容

微博热搜网址为:

代码语言:javascript复制
https://s.weibo.com/top/summary

经分析,微博热搜数据就在网页中,可以直接使用 Requests 请求

然后利用 BeautifulSoup 解析获取内容,最后存入表格中

完整代码如下:

代码语言:javascript复制
for i, item in enumerate(items[1:11]):
    result = []
    rank = '第{0}名'.format(i 1)     # 微博排名
    num = str(item.find('span')).replace('<span>', '').replace('</span>', '')  # 微博热度
    title = item.find('a').text  # 微博内容
    result.append(time_stamp)
    result.append(rank)
    result.append(num)
    result.append(title)
    with open('1.csv', 'a ',newline='') as f:
        f_csv = csv.writer(f)
        f_csv.writerow(result)

微博热搜一般是 1 分钟更新一次,所以再给代码加个定时器:

代码语言:javascript复制
schedule.every(1).minutes.do(run)  #run为自定义热搜爬虫函数,设置1分钟爬取1次
while True:
    schedule.run_pending()

让程序跑一会,我们的数据就弄好了

二、开始画动态图

1.pandas 读取数据

代码语言:javascript复制
import pandas as pd
data=pd.read_csv('微博热搜.csv',encoding='gbk')

2.基本动态图画法

代码语言:javascript复制
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker

x = Faker.choose()
tl = Timeline()
for i in range(2015, 2020):
    bar = (
        Bar()
        .add_xaxis(x)
        .add_yaxis("", Faker.values())
        .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
    )
    tl.add(bar, "{}年".format(i))
tl.render_notebook()

3.将图形反转,导入横坐标(排名)、纵坐标(热度)

代码语言:javascript复制
tl = Timeline()
for i in range(20):
    bar = (
        Bar()
        .add_xaxis(list(data['内容'])[i*10:i*10 10][::-1])
        .add_yaxis("微博热搜榜", list(data['热度'])[i*10:i*10 10][::-1])
        .reversal_axis()
        .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
    )
    tl.add(bar, "{}年".format(i))
tl.render_notebook()

4.将标签放置在图形右边,将图形整体右移

代码语言:javascript复制
from pyecharts.charts import Bar, Timeline,Grid
tl = Timeline()
for i in range(20):
    bar = (
        Bar()
        .add_xaxis(list(data['内容'])[i*10:i*10 10][::-1])
        .add_yaxis("微博热搜榜", list(data['热度'])[i*10:i*10 10][::-1])
        .reversal_axis()
        .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
        .set_series_opts(label_opts=opts.LabelOpts(position="right"))  #将标签放置在图形右边
    )
    tl.add(bar, '')
    grid = (
        Grid()
        .add(bar, grid_opts=opts.GridOpts(pos_left="25%",pos_right="0%"))  #将图形整体右移
    )
    tl.add(grid, '')
tl.render_notebook()

5.设置播放速度,隐藏 timeline 组件,设置自动播放

代码语言:javascript复制
tl = Timeline()
for i in range(20):
    bar = (
        Bar()
        .add_xaxis(list(data['内容'])[i*10:i*10 10][::-1])
        .add_yaxis("微博热搜榜", list(data['热度'])[i*10:i*10 10][::-1])
        .reversal_axis()
        .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
        .set_series_opts(label_opts=opts.LabelOpts(position="right"))  #将标签放置在图形右边
    )
    tl.add(bar, "")
    grid = (
        Grid()
        .add(bar, grid_opts=opts.GridOpts(pos_left="25%",pos_right="0%"))  #将图形整体右移
    )
    tl.add(grid, "")
    tl.add_schema(
        play_interval=100,   #播放速度
        is_timeline_show=False,  #是否显示 timeline 组件
        is_auto_play=False,)     #是否自动播放
tl.render_notebook()

6.设置主题,增加时间标签

代码语言:javascript复制
tl = Timeline({"theme": ThemeType.MACARONS})
for i in range(20):
    bar = (
        Bar({"theme": ThemeType.MACARONS})
        .add_xaxis(list(data['内容'])[i*10:i*10 10][::-1])
        .add_yaxis("微博热搜榜", list(data['热度'])[i*10:i*10 10][::-1])
        .reversal_axis()
        .set_global_opts(
            title_opts=opts.TitleOpts("{}".format(list(data['时间'])[i*10]),pos_right='0%',pos_bottom='15%'),
            xaxis_opts=opts.AxisOpts(
                splitline_opts=opts.SplitLineOpts(is_show=True)),
            yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True),
                                     axislabel_opts=opts.LabelOpts(color='#FF7F50')),)
        .set_series_opts(label_opts=opts.LabelOpts(position="right",color='#9400D3'))
    )
    grid = (
        Grid()
        .add(bar, grid_opts=opts.GridOpts(pos_left="25%",pos_right="0%"))
    )
    tl.add(grid, "{}年".format(i))  #设置标签
    tl.add_schema(
        play_interval=100,   #播放速度
        is_timeline_show=False,  #是否显示 timeline 组件
        is_auto_play=True,
    )
tl.render_notebook()

-完-

完整代码请扫码关注公众号并回复 热搜图 获取

0 人点赞