绝了!Python定时爬取微博热搜+pyecharts动态图展示

叶庭云 凹凸数据

作者:叶庭云
来源:凹凸数据

本文介绍了可以实现定时执行任务的schedule模块,利用它实现定时爬取微博热搜数据,保存到CSV文件里。
讲解pyehcarts绘制基本时间轮播图,最后利用pyehcarts实现数据的动态图可视化。

微博热搜
以下开始干货实战之旅 ↓

schedule模块定时执行任务

python中有一个轻量级的定时任务调度的库:schedule。他可以完成每分钟,每小时,每天,周几,特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。

# 安装pip install schedule -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import scheduleimport timedef run():    print("I'm doing something...")schedule.every(10).minutes.do(run)    # 每隔十分钟执行一次任务schedule.every().hour.do(run)         # 每隔一小时执行一次任务schedule.every().day.at("10:30").do(run)  # 每天的10:30执行一次任务schedule.every().monday.do(run)  # 每周一的这个时候执行一次任务schedule.every().wednesday.at("13:15").do(run) # 每周三13:15执行一次任务while True:    schedule.run_pending()  # run_pending:运行所有可以运行的任务

爬取微博热搜数据



这样的网页结构可以用 pd.read_html() 方法来爬取数据

# -*- coding: UTF-8 -*-"""@File    :微博热搜榜.py@Author  :叶庭云@Date    :2020/9/18 15:01"""import scheduleimport pandas as pdfrom datetime import datetimeimport logginglogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')count = 0def get_content():    global count   # 全局变量count    print('----------- 正在爬取数据 -------------')    url = 'https://s.weibo.com/top/summary?cate=realtimehot&sudaref=s.weibo.com&display=0&retcode=6102'    df = pd.read_html(url)[0][1:11][['序号', '关键词']]   # 获取热搜前10    time_ = datetime.now().strftime("%Y/%m/%d %H:%M")     # 获取当前时间    df['序号'] = df['序号'].apply(int)    df['热度'] = df['关键词'].str.split('  ', expand=True)[1]    df['关键词'] = df['关键词'].str.split('  ', expand=True)[0]    df['时间'] = [time_] * len(df['序号'])    if count == 0:        df.to_csv('datas.csv', mode='a+', index=False)        count += 1    else:        df.to_csv('datas.csv', mode='a+', index=False, header=False)# 定时爬虫schedule.every(1).minutes.do(get_content)while True:    schedule.run_pending()

微博热搜一般是1分钟更新一次,所以再给代码加个定时器即可。让程序跑一会儿,微博热搜变动数据就保存到了CSV文件里。

pyehcarts动态图可视化

基本时间轮播图

from pyecharts import options as optsfrom pyecharts.charts import Bar, Timelinefrom pyecharts.faker import Fakerfrom pyecharts.globals import CurrentConfig, ThemeTypeCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'tl = Timeline(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))for i in range(2015, 2020):    bar = (        Bar()        .add_xaxis(Faker.choose())        .add_yaxis("商家A", Faker.values())        .add_yaxis("商家B", Faker.values())        .set_global_opts(title_opts=opts.TitleOpts("商店{}年商品销售额".format(i)))    )    tl.add(bar, "{}年".format(i))tl.render("timeline_multi_axis.html")

运行效果如下:

from pyecharts import options as optsfrom pyecharts.charts import Bar, Timelinefrom pyecharts.faker import Fakerfrom pyecharts.globals import ThemeType, CurrentConfigCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'tl = Timeline(init_opts=opts.InitOpts(theme=ThemeType.DARK))for i in range(2015, 2020):    bar = (        Bar()        .add_xaxis(Faker.choose())        .add_yaxis("商家A", Faker.values(), label_opts=opts.LabelOpts(position="right"))        .add_yaxis("商家B", Faker.values(), label_opts=opts.LabelOpts(position="right"))        .reversal_axis()        .set_global_opts(            title_opts=opts.TitleOpts("Timeline-Bar-Reversal (时间: {} 年)".format(i))        )    )    tl.add(bar, "{}年".format(i))tl.render("timeline_bar_reversal.html")

运行效果如下:

微博热搜动态图

import pandas as pdfrom pyecharts import options as optsfrom pyecharts.charts import Bar, Timeline, Gridfrom pyecharts.globals import ThemeType, CurrentConfigCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_csv('datas.csv')# print(df.info())t = Timeline(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))  # 定制主题for i in range(34):    bar = (        Bar()        .add_xaxis(list(df['关键词'][i*10: i*10+10][::-1]))         # x轴数据        .add_yaxis('热度', list(df['热度'][i*10: i*10+10][::-1]))   # y轴数据        .reversal_axis()     # 翻转        .set_global_opts(    # 全局配置项            title_opts=opts.TitleOpts(  # 标题配置项                title=f"{list(df['时间'])[i*10]}",                pos_right="5%", pos_bottom="15%",                title_textstyle_opts=opts.TextStyleOpts(                    font_family='KaiTi', font_size=24, color='#FF1493'                )            ),            xaxis_opts=opts.AxisOpts(   # x轴配置项                splitline_opts=opts.SplitLineOpts(is_show=True),            ),            yaxis_opts=opts.AxisOpts(   # y轴配置项                splitline_opts=opts.SplitLineOpts(is_show=True),                axislabel_opts=opts.LabelOpts(color='#DC143C')            )        )        .set_series_opts(    # 系列配置项            label_opts=opts.LabelOpts(  # 标签配置                position="right", color='#9400D3')        )    )    grid = (        Grid()            .add(bar, grid_opts=opts.GridOpts(pos_left="24%"))    )    t.add(grid, "")    t.add_schema(        play_interval=100,          # 轮播速度        is_timeline_show=False,     # 是否显示 timeline 组件        is_auto_play=True,          # 是否自动播放    )t.render('时间轮播图.html')

运行结果如下:


↑ 演示图
如果大家对我分享的 Python定时爬虫-爬取微博热搜数据 -pyecharts动态图展示 感兴趣,欢迎转发、在看、点赞三连!

对了,

本文的数据或源码可以网页打开下方链接下载 ↓

https://alltodata.cowtransfer.com/s/53ee73a6c16b4c

也欢迎关注叶庭云的博客:

https://blog.csdn.net/fyfugoyfa/article/details/108667169

©著作权归作者所有:来自51CTO博客作者mb5fe18e5a55d8d的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 小伙子不讲武德,竟用Python爬取了B站上1.4w条马老师视频数据来分
  2. 数据分析师必知必会:AB测试项目复盘(附PPT、python源码)
  3. Python实现数据写入 Excel 的三种模块!
  4. 华为无线网络的配置——AP上的业务数据采用直接转发模式
  5. 昨晚试试 数据行转列,差点翻了车
  6. Python探索性数据分析,这样才容易掌握
  7. 用 Python 读取巴菲特最近的持仓数据
  8. 全息金融行业数据安全解决方案
  9. 不会时间序列预测?不要紧,大神来教你

随机推荐

  1. 如何获得MySQL中某一行的偏移量?
  2. mysql-5.7.10-winx64 绿色版安装办法
  3. mysql主从复制配置操作以及主主配置宕机
  4. 如何使用PDO从MySQL获取正确的数据类型?
  5. MySQL基本操作汇总
  6. linux运维必会MySQL企业面试题
  7. mysql 中使用聚合函数sum()后出现很长的
  8. mysql学习--1.事务
  9. 获取喜欢和评论的帖子 - 一个查询?
  10. MySQL修改表结构操作命令总结