今天教大家如何用pyecharts制作微博热搜榜动态展示视频,先上视频看看效果:
教程主要有2部分:
一是python爬取微博热搜内容 二是用pyecharts制作动态视频
下面给大家详细介绍一下
一、爬取微博热搜内容
微博热搜网址为:
/top/summary
经分析,微博热搜数据就在网页中,可以直接requests请求,然后BeautifulSoup解析获取内容,最后存入表格中,代码如下(完整代码在文末):
fori,iteminenumerate(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)
withopen('1.csv','a+',newline='')asf:
f_csv=csv.writer(f)
f_csv.writerow(result)
微博热搜一般是1分钟更新一次,所以再给代码加个定时器:
schedule.every(1).minutes.do(run)#run为自定义热搜爬虫函数,设置1分钟爬取1次
whileTrue:
schedule.run_pending()
让程序跑一会,我们的数据就弄好了
二、开始画动态图
1.pandas读取数据
importpandasaspd
data=pd.read_csv('微博热搜.csv',encoding='gbk')
2.基本动态图画法
frompyechartsimportoptionsasopts
frompyecharts.chartsimportBar,Timeline
frompyecharts.fakerimportFaker
x=Faker.choose()
tl=Timeline()
foriinrange(,):
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()
foriinrange(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.将标签放置在图形右边,将图形整体右移
frompyecharts.chartsimportBar,Timeline,Grid
tl=Timeline()
foriinrange(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()
foriinrange(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})
foriinrange(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()