小编给大家分享一下python如何爬取微博热搜并实现数据可视化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
先上视频看看效果:
微博热搜网址为:
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('<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分钟更新一次,所以再给代码加个定时器:
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()
2.将图形反转,导入横坐标(排名)、纵坐标(热度)
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()` </pre>
3.将标签放置在图形右边,将图形整体右移
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()
4.设置播放速度,隐藏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()
5.设置主题,增加时间标签
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如何爬取微博热搜并实现数据可视化”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4848094/blog/4745739