微博热搜数据爬取与可视化分析

写在开头

本项目中中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

在当今社交媒体时代,微博作为中国最主要的社交媒体平台之一,每天都会产生大量的热点话题和热搜内容。这些热搜数据不仅反映了公众的关注焦点,也蕴含着丰富的舆情信息和市场趋势。本项目介绍如何通过Python脚本爬取微博热搜数据,并生成美观的可视化图表。

一、项目背景

微博热搜榜是根据微博平台用户的搜索和讨论热度实时生成的榜单,它能够快速反映出当前关注的热点话题。通过自动化爬取这些数据并进行可视化分析,我们可以:

  1. 实时监控社会热点和舆情动向
  2. 分析公众关注焦点的变化趋势
  3. 为内容创作和营销策略提供数据支持
  4. 构建舆情监控和分析系统

本项目旨在通过API接口获取微博热搜数据,将数据保存为CSV格式,并生成具有科技感的可视化图表,便于进一步分析和展示。

二、技术栈

本项目主要使用了以下技术和工具:

  • Python 3.x - 核心编程语言
  • requests - 用于发送HTTP请求获取数据
  • pandas - 数据处理和CSV文件操作
  • matplotlib - 数据可视化库,用于生成图表
  • numpy - 数值计算库,辅助数据处理

三、项目实现

关键爬取逻辑

项目主要实现逻辑如下:

  1. 数据获取:发送GET请求获取JSON格式的热搜数据
  2. 数据处理:解析返回的JSON数据,提取关键字段
  3. 数据保存:将数据保存为CSV格式文件
  4. 数据可视化:生成美观的玫瑰图展示热搜热度
# 核心爬取函数
def fetch_weibo_hot_data():
    """
    获取微博热搜数据
    :return: 热搜数据列表
    """
    print("正在获取微博热搜数据...")
    
    try:
        response = requests.get(API_URL, params=params, timeout=10)
        response.raise_for_status()
        data = response.json()
        
        if data.get('code') == 200:
            print("数据获取成功!")
            return data.get('data', [])
        else:
            print(f"API返回错误: {data.get('msg', '未知错误')}")
            return []
    except Exception as e:
        print(f"获取数据时出错: {e}")
        return []

数据处理与保存

获取到原始数据后,我们只保留热搜标题和链接地址两个关键字段,并将列名设置为中文,提高可读性:

def save_to_csv(data):
    """
    将数据保存到CSV文件
    :param data: 热搜数据列表
    """
    if not data:
        print("没有数据可保存")
        return
    
    # 创建DataFrame
    df = pd.DataFrame(data)
    
    # 只保留title和scheme两列
    if 'title' in df.columns and 'scheme' in df.columns:
        df = df[['title', 'scheme']]
    
    # 将列名设置为中文
    df.columns = ['热搜标题', '链接地址']
    
    # 生成带时间戳的文件名
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"weibohot-{timestamp}.csv"
    
    # 保存到CSV文件
    df.to_csv(filename, index=False, encoding='utf-8-sig')
    print(f"数据已保存到 {filename}")
    return filename

数据可视化

为了更直观地展示热搜数据的热度差异,我们使用了美观的玫瑰图进行可视化:

def create_tech_visualization(data):
    """
    :param data: 热搜数据列表
    """
    if not data:
        print("没有数据可绘制图表")
        return
    
    # 取前10条数据进行可视化
    top_data = data[:10]
    
    # 提取标题和热度值
    titles = [item['title'] for item in top_data]
    hot_values = []
    
    # 处理热度值,有些可能为空或非数字
    for item in top_data:
        desc = item.get('desc_extr')
        if desc:
            # 如果是"分类 123456"格式,只取数字部分
            if ' ' in str(desc):
                desc = str(desc).split(' ')[-1]
            try:
                hot_values.append(int(desc))
            except:
                hot_values.append(0)
        else:
            hot_values.append(0)
    
    # 使用玫瑰图展示
    fig, ax = plt.subplots(figsize=(8, 5), subplot_kw=dict(projection='polar'))
    fig.patch.set_facecolor('#f0f0f0')  
    
    # 角度设置
    angles = np.linspace(0, 2 * np.pi, len(titles), endpoint=False).tolist()
    
    # 设置颜色
    colors = plt.cm.viridis(np.linspace(0.2, 0.8, len(titles)))
    
    # 绘制玫瑰图
    bars = ax.bar(angles, hot_values, width=2*np.pi/len(titles), color=colors, alpha=0.8)
    
    # 添加标签(缩小文字比例)
    ax.set_xticks(angles)
    ax.set_xticklabels(titles, color='#333333', fontsize=7)
    
    # 设置标题(缩小文字比例)
    ax.set_title('微博热搜榜 Top 10 玫瑰图', color='#2c3e50', fontsize=12, pad=15, weight='bold')
    
    # 设置极径标签颜色和字体大小
    ax.tick_params(axis='y', colors='#666666', labelsize=7)
    ax.tick_params(axis='x', colors='#333333')
    
    # 优化布局
    plt.tight_layout()
    
    # 保存图表
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    image_filename = f"weibohot-{timestamp}.png"
    plt.savefig(image_filename, dpi=300, bbox_inches='tight', facecolor='#f0f0f0')
    print(f"图表已保存到 {image_filename}")
    plt.show()

爬取结果展示:

在这里插入图片描述

在这里插入图片描述

运行后将生成两个文件:

  • CSV格式的数据文件,包含热搜标题和链接地址
  • PNG格式的玫瑰图,可视化展示热搜热度

四、总结

本项目通过简单的Python脚本实现了微博热搜数据的自动爬取、存储和可视化展示。通过玫瑰图的形式,我们可以直观地看到各个热搜词条的相对热度,为舆情分析和热点追踪提供了有效的工具。

进一步扩展功能,如:

  1. 定时任务自动化执行
  2. 多平台热搜数据对比分析
  3. 热搜话题的情感分析
  4. 构建Web可视化仪表板
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐