Python定时爬虫 爬取微博热搜数据 pyecharts动态图展示

没什么可抱怨的,现在所有的一切,都是在为之前的每一次选择买单。
人生没有白走的路,每一步都算数。

原文链接:https://yetingyun.blog.csdn.net/article/details/108667169
创作不易,未经作者允许,禁止转载,更勿做其他用途,违者必究。

一、schedule模块定时执行任务

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

# 安装
pip install schedule -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import schedule
import time
 
def 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
@CSDN	 :https://blog.csdn.net/fyfugoyfa
"""
import schedule
import pandas as pd
from datetime import datetime
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
count = 0


def 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动态图可视化

1. 基本时间轮播图

from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker
from pyecharts.globals import CurrentConfig, ThemeType

CurrentConfig.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 opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType, CurrentConfig


CurrentConfig.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")

运行效果如下:

2. 微博热搜动态图

"""
@Author  :叶庭云
@Date    :2020/9/18 15:01
@CSDN	 :https://blog.csdn.net/fyfugoyfa
"""
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline, Grid
from pyecharts.globals import ThemeType, CurrentConfig

CurrentConfig.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')

运行结果如下:

作者:叶庭云
CSDN:https://blog.csdn.net/fyfugoyfa
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star 呀,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习呀。

叶庭云 CSDN认证博客专家 Python 数据可视化 机器学习
微信搜一搜【修炼Python】分享Python爬虫、数据分析、数据可视化、机器学习有关知识和实例;也分享实用的资料教程、软件工具、学习文档和简历模板。发现求知的乐趣,在不断总结和学习中进步。坚持输出优质文章,期待你的关注,一起交流学习,互相成就,与诸君共勉!
已标记关键词 清除标记
相关推荐
这是新浪微博爬虫,采用python+selenium实现。 免费资源,希望对你有所帮助,虽然是傻瓜式爬虫,但是至少能运行。同时rar中包括源码及的示例。 参考我的文章: http://blog.csdn.net/eastmount/article/details/50720436 [python爬虫] Selenium新浪微博内容及用户信息 http://blog.csdn.net/eastmount/article/details/51231852 [Python爬虫] Selenium新浪微博客户端用户信息、点话题及评论 (上) 主要内容包括: 新浪微博手机端用户信息和微博信息。 用户信息:包括用户ID、用户名、微博数、粉丝数、关注数等。 微博信息:包括转发或原创、点赞数、转发数、评论数、发布时间、微博内容等。 安装过程: 1.先安装Python环境,作者是Python 2.7.8 2.再安装PIP或者easy_install 3.通过命令pip install selenium安装selenium,它是自动测试、爬虫的工具 4.然后修改代码中的用户名和密码,填写你自己的用户名和密码 5.运行程序,自动调用Firefox浏览器登陆微博 注意:手机端信息更加精致简单,而且没有动态加载的一些限制,但是如微博或粉丝id只显示20页,这是它的缺点; 而客户端可能存在动态加载,如评论和微博,但是它的信息更加完整。 [源码] 移动端微博信息 spider_selenium_sina_content.py 输入: 明星用户id列表,采用URL+用户id进行访问(这些id可以从一个用户的关注列表里面获) SinaWeibo_List_best_1.txt 输出: 微博信息及用户基本信息 SinaWeibo_Info_best_1.txt Megry_Result_Best.py 该文件用户整理某一天的用户微博信息,如2016年4月23日 [源码] 客户端微博信息 客户端信息,但是评论是动态加载,还在研究中 weibo_spider2.py By:Eastmount 2016-04-24
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页