如何用 Python 让微博热搜榜动起来
AirPython
共 4226字,需浏览 9分钟
· 2020-09-20
今天教大家如何用 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(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.将图形反转,导入横坐标(排名)、纵坐标(热度)
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()
-完-
完整代码请扫码关注公众号并回复 热搜图 获取
评论
【第129期】程序员的新宠:三款终端工具,让你告别Xshell!
概述 WindTerm:跨平台的SSH利器 首先介绍的是WindTerm,这是一款使用C语言开发的跨平台SSH客户端。它不仅完全免费,而且没有商业使用的限制。WindTerm支持SSH v2、Telnet、Raw Tcp等协议,而且性能出色,甚至超过了FinalShell和Electerm。功能
前端微服务
0
Python列表知识应知应会
点击上方“Go语言进阶学习”,进行关注回复“Go语言”即可获赠从入门到进阶共10本电子书今日鸡汤只在此山中,云深不知处。一、前言 在Python程序开发中,列表(List)经常会使用。假设一个班里有50个学生现需要统计每一个学生的总成绩情况,如果不使用列
Go语言进阶学习
0
Python 字符串应该用双引号还是单引号?
转载来源:洪尔摩斯PyCharm升级至 2023.2版本后,经常弹出来一个提示问我要不要试一下Black formatter。试了一下,这个Black formatter 很有个性,特别喜欢换行。我的一个文件用PyCharm自带的代码整理器整理完之后是500行左右,然后再用Black整理就变成600
菜鸟学Python
0
delorean,一个超级实用的 Python 库!
作者通常周更,为了不错过更新,请点击上方“Python碎片”,“星标”公众号大家好,今天为大家分享一个超级实用的 Python 库 - delorean。Github地址:https://github.com/myusuf3/delorean/时间在计算机科学和软件开发中是一个至关重要的概念。Pyt
Python 碎片
0
五一Python抢票神器来了
还在为五一回家抢不到火车票发愁吗?今天介绍一个Python抢票神器,希望对你有帮助。Py12306是一个流行的开源项目,旨在帮助用户更便捷地查询和预订中国铁路12306网站上的火车票。以下是使用Py12306的基本步骤和一些注意事项:安装与环境准备安装Python: 确保你的系统中安装了Python
Python小二
1
PyPy为什么能让Python比C还快?一文了解内在机制
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源:机器之心「如果想让代码运行得更快,您应该使用 PyPy。」—— Python 之父 Guido van Rossum对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Pyth
菜鸟学Python
0
3人运营,不用投流,年翻十倍...这些头部商家如何在得物获得确定性新增长
是新朋友吗?记得先点蓝字关注我哦~这场硬仗一定要打,也一定要打赢。文/靳舒乔珠宝品牌周大生2022年一季报数据显示,2021年周大生营收91.55亿元,门店突破4500家,遂加快线上渠道布局。一次跟得物官方交流,感觉这款App上的年轻人非常活跃,很契合线上发展需求。那时,得物App更名一年有余,正打
调皮电商
2