首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >揭秘微博年度热点:Python 爬取热搜关键词并制作词云图

揭秘微博年度热点:Python 爬取热搜关键词并制作词云图

原创
作者头像
小白学大数据
发布2026-03-04 16:44:23
发布2026-03-04 16:44:23
2590
举报

微博作为国内头部的社交媒体平台,其热搜榜堪称 “网络热点晴雨表”,汇聚了一年内大众最关注的社会事件、娱乐热点、行业动态。本文将手把手教你用 Python 爬取微博近一年的热搜关键词,通过数据清洗、关键词提取,最终生成直观的词云图,让你用技术视角读懂年度网络热点。一、技术选型与实现思路在开始编码前,我们先明确核心技术栈和实现逻辑,确保整个流程清晰可控:核心依赖库requests:发送 HTTP 请求,获取微博热搜页面数据;BeautifulSoup4:解析 HTML 页面,提取热搜关键词;pandas:数据清洗与存储,处理爬取到的热搜列表;wordcloud:生成词云图,可视化热搜关键词;matplotlib:展示词云图,调整可视化效果;jieba:中文分词(针对长文本热搜,提取核心关键词)。实现思路分析微博热搜页面结构,确定数据爬取的目标节点;编写爬虫脚本,循环爬取近一年的热搜数据(按日期分段爬取);对爬取的数据进行清洗,去除重复、无效关键词;统计关键词出现频次,生成词频字典;基于词频字典制作个性化词云图,完成可视化。二、环境准备首先需要安装所需依赖库,打开终端执行以下命令:bash运行

注意:若安装 wordcloud 失败,Windows 用户可下载对应版本的 whl 文件手动安装,Mac/Linux 用户可先安装 libpng 和 freetype 依赖。三、完整代码实现步骤 1:爬取微博热搜数据微博热搜分为实时热搜、历史热搜,由于官方未直接提供 “年度热搜” 接口,我们以 “微博历史热搜查询” 平台为例(也可替换为微博官方热搜页),爬取按日期归档的热搜数据。python运行

代码说明:headers 模拟浏览器请求,避免被微博反爬机制拦截;get_weibo_hot_search 函数按日期循环爬取,核心是通过BeautifulSoup解析页面提取关键词;加入异常处理和延迟请求,提升爬虫的稳定性;最终将数据保存为 CSV 文件,方便后续清洗和分析。步骤 2:数据清洗与词频统计爬取的数据可能包含重复关键词、无效字符,需先清洗再统计频次:python运行

代码语言:txt
复制
import pandas as pd
import jieba

def clean_and_count_keywords(csv_path):
    """
    清洗热搜数据并统计关键词频次
    :param csv_path: 爬取的热搜数据CSV文件路径
    :return: 词频字典 {关键词: 出现次数}
    """
    # 读取CSV文件
    df = pd.read_csv(csv_path, encoding="utf-8-sig")
    
    # 1. 去重:按关键词和日期去重(避免同一天重复爬取同一热搜)
    df = df.drop_duplicates(subset=["date", "keyword"], keep="first")
    
    # 2. 合并所有关键词为一个字符串,便于分词和统计
    all_keywords = " ".join(df["keyword"].tolist())
    
    # 3. 中文分词(针对长文本热搜,如"XX事件最新进展",提取核心词"XX事件")
    seg_list = jieba.lcut(all_keywords)
    # 过滤停用词和短字符(如单个字、标点)
    stop_words = ["的", "了", "在", "是", "我", "有", "都", "就", "和", "为"]  # 可扩展停用词表
    filtered_seg = [word for word in seg_list if len(word) > 1 and word not in stop_words]
    
    # 4. 统计词频
    word_freq = {}
    for word in filtered_seg:
        word_freq[word] = word_freq.get(word, 0) + 1
    
    # 按词频降序排序
    sorted_word_freq = sorted(word_freq.items(), key=lambda x: x[1], reverse=True)
    print("词频TOP10:")
    for word, freq in sorted_word_freq[:10]:
        print(f"{word}: {freq}次")
    
    return dict(sorted_word_freq)

# 执行数据清洗和词频统计
word_freq_dict = clean_and_count_keywords("weibo_hot_search_2025.csv")

代码说明:先通过drop_duplicates去重,避免同一日期的重复热搜影响统计;使用jieba分词,拆分长文本热搜的核心关键词;过滤停用词和单个字符,提升词频统计的准确性;最终生成按频次降序排列的词频字典,便于制作词云。步骤 3:制作词云图基于词频字典,生成个性化词云图,直观展示年度热搜关键词:python运行

代码语言:txt
复制
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
def generate_wordcloud(word_freq, mask_path=None):
    """
    生成词云图
    :param word_freq: 词频字典
    :param mask_path: 词云形状蒙版图片路径(可选)
    """
    # 设置词云参数
    wc = WordCloud(
        font_path="simhei.ttf",  # 必须指定中文字体,否则乱码(Windows系统simhei.ttf,Mac用Arial Unicode.ttf)
        width=1000,
        height=600,
        background_color="white",  # 背景色
        max_words=200,  # 显示最多200个关键词
        max_font_size=150,  # 最大字体大小
        mask=np.array(Image.open(mask_path)) if mask_path else None,  # 词云形状(可选)
        colormap="viridis"  # 配色方案
    )
    # 生成词云
    wc.generate_from_frequencies(word_freq)
    # 展示词云图
    plt.figure(figsize=(12, 8))
    plt.imshow(wc, interpolation="bilinear")
    plt.axis("off")  # 隐藏坐标轴
    plt.title("2025年微博热搜关键词词云图", fontsize=20, pad=20)
    # 保存词云图
    plt.savefig("weibo_hot_wordcloud_2025.png", dpi=300, bbox_inches="tight")
    plt.show()
# 生成词云图(可替换mask_path为自定义形状图片路径,如微博logo)
generate_wordcloud(word_freq_dict, mask_path="weibo_mask.png")  # 无蒙版则设为None

代码说明:指定中文字体是关键,否则词云会出现乱码(Windows 系统可直接用simhei.ttf,Mac/Linux 需替换为系统自带中文字体路径);mask 参数可自定义词云形状(如微博 logo、心形等),提升可视化效果;最终生成的词云图保存为高清 PNG 文件,便于查看和分享。四、常见问题与优化方案反爬限制:若爬取时出现 403/503 错误,可增加代理 IP 池(推荐亿牛云爬虫代理)、延长请求间隔,或使用selenium模拟浏览器渲染(针对动态加载的热搜页面);数据不全:部分日期的热搜数据缺失,可通过多源爬取(如微博官方热搜、第三方数据平台)补充;词云效果差:可扩展停用词表,或调整max_words、font_size等参数,也可根据关键词类别(如娱乐、社会)生成分类词云;效率优化:爬取全年数据耗时较长,可采用多线程 / 多进程爬取,提升效率。五、技术应用场景这套技术方案不仅适用于微博热搜分析,还可拓展到:自媒体运营:分析年度热点,辅助内容选题;舆情分析:企业监控品牌相关热搜,及时响应舆情;学术研究:研究网络热点的传播规律和大众关注点变化;个人学习:掌握 Python 爬虫、数据可视化的核心技能。六、总结本文从技术选型、代码实现到优化方案,完整讲解了用 Python 爬取微博年度热搜并制作词云图的全过程。通过这套流程,你不仅能获取微博全年热点数据,还能掌握爬虫、数据清洗、可视化等核心 Python 技能。值得注意的是,爬取数据时需遵守平台 robots 协议,避免过度请求给服务器造成压力;同时,词云图仅为可视化手段,结合词频统计、时间维度分析,能更全面地解读年度热点背后的规律。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档