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

共 4226字,需浏览 9分钟

 ·

2020-09-20 15:33


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

先上视频看看效果:

教程主要有2部分:

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

下面给大家详细介绍一下

一、爬取微博热搜内容

微博热搜网址为:

https://s.weibo.com/top/summary

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

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

完整代码如下:

for i, item in enumerate(items[1:11]):
    result = []
    rank = '第{0}名'.format(i+1)     # 微博排名
    num = str(item.find('span')).replace('''').replace('''')  # 微博热度
    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 分钟更新一次,所以再给代码加个定时器:

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

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

二、开始画动态图

1.pandas 读取数据

import pandas as pd
data=pd.read_csv('微博热搜.csv',encoding='gbk')

2.基本动态图画法

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(20152020):
    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.将图形反转,导入横坐标(排名)、纵坐标(热度)

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.将标签放置在图形右边,将图形整体右移

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 组件,设置自动播放

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.设置主题,增加时间标签

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()


-完-

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


推荐阅读


带你用 Python 实现自动化群控(入门篇)

Python 如何使用 HttpRunner 做接口自动化测试

Python 自动化,Helium 凭什么取代 Selenium?



浏览 65
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报