飞道的博客

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

590人阅读  评论(0)


作者:叶庭云

来源:凹凸数据

本文介绍了可以实现定时执行任务的schedule模块,利用它实现定时爬取微博热搜数据,保存到CSV文件里。

讲解pyehcarts绘制基本时间轮播图,最后利用pyehcarts实现数据的动态图可视化。

微博热搜

以下开始干货实战之旅  ↓

schedule模块定时执行任务

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


   
  1. # 安装
  2. pip install schedule -i http: //pypi.douban.com/simple --trusted-host pypi.douban.com

   
  1. import schedule
  2. import time
  3.  
  4. def run():
  5.      print( "I'm doing something...")
  6.  
  7. schedule.every( 10).minutes.do(run)    # 每隔十分钟执行一次任务
  8. schedule.every().hour.do(run)         # 每隔一小时执行一次任务
  9. schedule.every().day.at( "10:30").do(run)  # 每天的 10: 30执行一次任务
  10. schedule.every().monday.do(run)  # 每周一的这个时候执行一次任务
  11. schedule.every().wednesday.at( "13:15").do(run) # 每周三 13: 15执行一次任务
  12.  
  13. while True:
  14.     schedule.run_pending()  # run_pending:运行所有可以运行的任务

爬取微博热搜数据

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


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

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

pyehcarts动态图可视化

基本时间轮播图


   
  1. from pyecharts  import options as opts
  2. from pyecharts.charts  import Bar, Timeline
  3. from pyecharts.faker  import Faker
  4. from pyecharts.globals  import CurrentConfig, ThemeType
  5. CurrentConfig.ONLINE_HOST =  'D:/python/pyecharts-assets-master/assets/'
  6. tl = Timeline(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
  7. for i in  range( 20152020):
  8.     bar = (
  9.         Bar()
  10.         .add_xaxis(Faker.choose())
  11.         .add_yaxis( "商家A", Faker.values())
  12.         .add_yaxis( "商家B", Faker.values())
  13.         .set_global_opts(title_opts=opts.TitleOpts( "商店{}年商品销售额".format(i)))
  14.     )
  15.     tl.add(bar,  "{}年".format(i))
  16. tl.render( "timeline_multi_axis.html")

运行效果如下:


   
  1. from pyecharts  import options as opts
  2. from pyecharts.charts  import Bar, Timeline
  3. from pyecharts.faker  import Faker
  4. from pyecharts.globals  import ThemeType, CurrentConfig
  5. CurrentConfig.ONLINE_HOST =  'D:/python/pyecharts-assets-master/assets/'
  6. tl = Timeline(init_opts=opts.InitOpts(theme=ThemeType.DARK))
  7. for i in  range( 20152020):
  8.     bar = (
  9.         Bar()
  10.         .add_xaxis(Faker.choose())
  11.         .add_yaxis( "商家A", Faker.values(), label_opts=opts.LabelOpts(position= "right"))
  12.         .add_yaxis( "商家B", Faker.values(), label_opts=opts.LabelOpts(position= "right"))
  13.         .reversal_axis()
  14.         .set_global_opts(
  15.             title_opts=opts.TitleOpts( "Timeline-Bar-Reversal (时间: {} 年)".format(i))
  16.         )
  17.     )
  18.     tl.add(bar,  "{}年".format(i))
  19. tl.render( "timeline_bar_reversal.html")

运行效果如下:

微博热搜动态图


   
  1. import pandas as pd
  2. from pyecharts  import options as opts
  3. from pyecharts.charts  import Bar, Timeline, Grid
  4. from pyecharts.globals  import ThemeType, CurrentConfig
  5. CurrentConfig.ONLINE_HOST =  'D:/python/pyecharts-assets-master/assets/'
  6. df = pd.read_csv( 'datas.csv')
  7. print(df.info())
  8. t = Timeline(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))  # 定制主题
  9. for i in  range( 34):
  10.     bar = (
  11.         Bar()
  12.         .add_xaxis(list(df[ '关键词'][i* 10: i* 10+ 10][:: -1]))         # x轴数据
  13.         .add_yaxis( '热度', list(df[ '热度'][i* 10: i* 10+ 10][:: -1]))   # y轴数据
  14.         .reversal_axis()     # 翻转
  15.         .set_global_opts(    # 全局配置项
  16.             title_opts=opts.TitleOpts(  # 标题配置项
  17.                 title=f "{list(df['时间'])[i*10]}",
  18.                 pos_right= "5%", pos_bottom= "15%",
  19.                 title_textstyle_opts=opts.TextStyleOpts(
  20.                     font_family= 'KaiTi', font_size= 24, color= '#FF1493'
  21.                 )
  22.             ),
  23.             xaxis_opts=opts.AxisOpts(   # x轴配置项
  24.                 splitline_opts=opts.SplitLineOpts(is_show=True),
  25.             ),
  26.             yaxis_opts=opts.AxisOpts(   # y轴配置项
  27.                 splitline_opts=opts.SplitLineOpts(is_show=True),
  28.                 axislabel_opts=opts.LabelOpts(color= '#DC143C')
  29.             )
  30.         )
  31.         .set_series_opts(    # 系列配置项
  32.             label_opts=opts.LabelOpts(  # 标签配置
  33.                 position= "right", color= '#9400D3')
  34.         )
  35.     )
  36.     grid = (
  37.         Grid()
  38.             .add(bar, grid_opts=opts.GridOpts(pos_left= "24%"))
  39.     )
  40.     t.add(grid,  "")
  41.     t.add_schema(
  42.         play_interval= 100,          # 轮播速度
  43.         is_timeline_show=False,     # 是否显示 timeline 组件
  44.         is_auto_play=True,          # 是否自动播放
  45.     )
  46. t.render( '时间轮播图.html')

运行结果如下:

↑ 演示图

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

对了,

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

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


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

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

福利时间

安利一本????:《Python数据分析与可视化》本书以“零基础”为起点,系统地介绍了Python在数据处理与可视化分析方面的应用。我比较感兴趣的章节:使用matplotlib美化和修饰图形\数据可视化之3D图形应用\使用图像和地图绘制图表。点击下图可看详情/购买!????

近期在当当购书的话,可以使用优惠码:7CMY4D,自营图书100-20,有效期:9.7-9.21

感谢北京大学出版社的支持!「凹凸数据」???? 继续300积分免费兑换啦,阅读原文直达


转载:https://blog.csdn.net/zhuxiao5/article/details/108688184
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场