Back to skills
extension
Category: Data & AnalyticsNo API key required

微博话题统计

统计微博话题热度数据,包括话题数量、讨论数和阅读数。 使用场景: - 用户想要了解某个关键词在微博上的话题热度 - 需要统计特定话题的讨论量和阅读量 - 分析微博话题的传播效果和社会关注度 - 监控品牌或事件在微博上的舆论热度 脚本选择: - Windows 平台: 使用 scripts/scrape_weibo_topic_windows.py (专用优化版) - Linux/macOS 平台: 使用 scripts/scrape_weibo_topic.py (通用版) 触发关键词: - "统计微博话题"、"微博话题热度"、"微博话题数据" - "微博搜索"、"微博话题数"、"微博讨论数" - 提到微博话题相关的统计数据请求

personAuthor: user_112463c6hubcommunity

微博话题统计

快速开始

环境要求

  1. Python 3.7+
  2. Node.js 和 npm(用于安装 agent-browser)
  3. agent-browser(脚本会自动检查并安装)

基本使用

脚本会自动检查 agent-browser 是否已安装,如果未安装会自动尝试安装。

重要: Windows 平台请使用专用的 scrape_weibo_topic_windows.py 脚本,该版本针对 Windows 做了深度优化,解决了多行 JS 命令行传参截断、双重 JSON 编码等兼容性问题,性能也更优(执行时间从 1+ 分钟降至 30-40 秒)。

Linux/macOS:

python3 scripts/scrape_weibo_topic.py <关键词>

Windows:

python scripts\scrape_weibo_topic_windows.py <关键词>

示例:

# Linux/macOS
python3 scripts/scrape_weibo_topic.py 刘亦菲有风的地方

# Windows (PowerShell)
python scripts\scrape_weibo_topic_windows.py 刘亦菲有风的地方

自动安装说明

首次运行时,脚本会:

  1. 检查 agent-browser 是否已安装
  2. 如果未安装,自动执行 npm install -g agent-browser
  3. 验证安装是否成功

如果自动安装失败,请手动安装:

npm install -g agent-browser

工作流程

  1. 打开搜索页面: 使用agent-browser打开微博搜索页面(带搜索参数)
  2. 切换到话题页签: 自动点击"话题"页签进入话题搜索结果
  3. 提取话题数据: 使用JavaScript提取所有话题及其讨论数、阅读数
  4. 统计分析: 计算话题总数、总讨论数、总阅读数
  5. 生成报告: 输出格式化的统计结果

跨平台兼容性

支持的平台

  • Linux: 完全支持,使用 scrape_weibo_topic.py
  • macOS: 完全支持,使用 scrape_weibo_topic.py
  • Windows: 完全支持,使用专用优化脚本 scrape_weibo_topic_windows.py

脚本说明

| 脚本文件 | 适用平台 | 说明 | |---------|---------|------| | scripts/scrape_weibo_topic.py | Linux / macOS | 通用版本 | | scripts/scrape_weibo_topic_windows.py | Windows | Windows 专用优化版 |

Windows 优化版的核心改进:

  • 将多行 JavaScript 压缩为单行传递,避免 Windows 命令行参数截断问题
  • 处理 agent-browser eval 返回的双重 JSON 编码
  • 减少进程启动次数,将多个操作合并为单个 JavaScript 调用
  • 减少 shell=True 使用,Windows 下直接执行命令
  • 优化等待时间和滚动策略,执行时间从 1+ 分钟降至 30-40 秒

Windows特殊说明

系统要求

  • Windows 10/11
  • Python 3.7+ (安装时需勾选"Add Python to PATH")
  • Node.js (用于安装agent-browser)

快速安装

  1. 安装Python: https://www.python.org/downloads/
  2. 安装Node.js: https://nodejs.org/
  3. 安装agent-browser:
    npm install -g agent-browser
    agent-browser install
    
  4. 运行安装脚本:
    cd C:\Users\你的用户名\.workbuddy\skills\weibo-topic-statistics
    install_windows.bat
    

Windows使用提示

  • 使用PowerShell代替CMD以获得更好的编码支持
  • 遇到中文乱码时运行: chcp 65001
  • 以管理员身份运行以避免权限问题
  • 查看详细Windows指南: WINDOWS_GUIDE.md

编码问题解决

# 方法1: 设置代码页 (CMD)
chcp 65001
python scripts\scrape_weibo_topic_windows.py 关键词

# 方法2: 设置环境变量 (PowerShell,推荐)
$env:PYTHONIOENCODING='utf-8'; python scripts\scrape_weibo_topic_windows.py 关键词

路径分隔符

脚本已自动处理路径分隔符:

  • Linux/macOS: 使用 /
  • Windows: 自动使用 \

防火墙设置

确保防火墙允许以下程序访问网络:

  • Python.exe
  • Node.js
  • agent-browser相关进程

输出格式

控制台输出

=== 微博话题热度统计 ===

关键词: 刘亦菲有风的地方

统计结果:
- 话题数量: 10
- 总讨论数: 2.8万 (28,084)
- 总阅读数: 1.5亿 (146,802,000)

热门话题TOP 10:
1. #刘亦菲有风的地方#
2. #有风的地方刘亦菲#
3. #去有风的地方追刘亦菲#
...

JSON输出

{
  "success": true,
  "keyword": "刘亦菲有风的地方",
  "topic_count": 10,
  "total_discussions": 28084,
  "total_reads": 146802000,
  "topics": [
    "#刘亦菲有风的地方#",
    "#有风的地方刘亦菲#",
    "#去有风的地方追刘亦菲#",
    ...
  ],
  "formatted_discussions": "2.8万",
  "formatted_reads": "1.5亿"
}

技术实现

核心依赖

  • agent-browser: 浏览器自动化工具
  • Python 3.7+: 脚本运行环境

数据提取方法

脚本使用以下技术提取数据:

  1. DOM遍历: 使用JavaScript查询选择器定位话题元素
  2. 正则表达式: 匹配"XX讨论 XX阅读"格式提取数字
  3. 数字解析: 将"1.2万"、"500"等文本转换为数值

关键函数

通用版 (scrape_weibo_topic.py):

  • scrape_weibo_topic(keyword): 主函数,执行完整的统计流程
  • open_browser(url): 打开浏览器并访问指定URL
  • click_topic_tab(): 点击话题页签
  • extract_topics(): 提取话题数据和统计数据
  • format_number(num): 格式化数字为易读形式

Windows 优化版 (scrape_weibo_topic_windows.py):

  • scrape_weibo_topic(keyword): 主函数,执行完整的统计流程
  • minify_js(js_code): 将多行 JS 压缩为单行,解决 Windows 命令行参数截断
  • click_topic_tab_and_wait(): 合并点击和等待为单次 JS 调用
  • scroll_and_collect_topics(): 一次性滚动收集所有话题数据
  • format_number(num): 格式化数字为易读形式

数据说明

统计范围

  • 统计微博搜索结果中显示的所有话题
  • 通常包含前10-20个热门话题
  • 数据为实时数据,随时间动态变化

字段含义

  • 话题数量: 搜索结果中包含的话题总数
  • 总讨论数: 所有话题的讨论次数总和
  • 总阅读数: 所有话题的阅读次数总和

数据格式

  • 讨论数和阅读数支持格式: "399"、"1.4万"、"62.3万"
  • 自动转换为数值进行统计
  • 输出时保留原始格式和转换后的数值

注意事项

反爬机制

  • 微博有严格的反爬机制,但搜索话题页签无需登录即可访问
  • 如遇到访问限制,建议增加等待时间或手动处理验证

数据准确性

  • 数据为实时抓取,可能与实际显示有微小差异
  • 建议多次运行取平均值以提高准确性
  • 对于重要决策,建议直接在微博平台验证

性能优化

  • 脚本默认等待时间为3秒,可根据网络状况调整
  • 批量统计多个关键词时,建议间隔运行避免触发限制
  • 可添加代理或headers配置以应对IP限制

错误处理

常见错误

  1. "无法打开搜索页面"

    • 检查网络连接
    • 确认agent-browser已正确安装
    • 检查URL是否正确
  2. "页面加载超时"

    • 增加等待时间
    • 检查网络速度
    • 尝试使用不同的网络环境
  3. "无法切换到话题页签"

    • 确认搜索结果包含话题
    • 检查页面元素结构是否变化
    • 使用--headed模式查看浏览器窗口调试
  4. Windows特定错误

    中文显示乱码:

    # 方法1: 设置编码 (CMD)
    chcp 65001
    python scripts\scrape_weibo_topic_windows.py 关键词
    
    # 方法2: 使用PowerShell (推荐)
    $env:PYTHONIOENCODING='utf-8'; python scripts\scrape_weibo_topic_windows.py 关键词
    

    命令未找到:

    # 检查Python是否在PATH中
    python --version
    
    # 检查agent-browser是否安装
    npm list -g agent-browser
    

    权限错误:

    • 以管理员身份运行命令提示符
    • 或检查杀毒软件是否阻止了脚本执行
  5. "未能提取到话题数据"

    • 确认话题数据存在于页面中
    • 检查JavaScript执行是否成功
    • 查看浏览器console是否有错误

调试技巧

使用--headed模式查看浏览器窗口:

agent-browser --headed open <url>

查看页面结构:

agent-browser snapshot

查看JavaScript错误:

agent-browser errors

扩展功能

保存为文件

可以在脚本中添加文件保存功能,将结果保存为Markdown或JSON格式:

def save_to_markdown(result: Dict, filename: str):
    """将结果保存为Markdown格式"""
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(f"# 微博话题热度统计\n\n")
        f.write(f"关键词: {result['keyword']}\n\n")
        # ... 更多内容

批量统计

修改main函数支持批量统计多个关键词:

def main():
    keywords = ["刘亦菲有风的地方", "AI", "区块链"]
    for keyword in keywords:
        result = scrape_weibo_topic(keyword)
        # 处理结果

数据可视化

可以集成matplotlib等库生成图表:

  • 话题热度柱状图
  • 讨论数vs阅读数散点图
  • 时间趋势折线图

使用示例

示例1: 基本统计

# Linux/macOS
python3 scripts/scrape_weibo_topic.py "刘亦菲有风的地方"

# Windows (PowerShell)
python scripts\scrape_weibo_topic_windows.py "刘亦菲有风的地方"

示例2: 批量统计

import subprocess
import platform

keywords = ["刘亦菲有风的地方", "AI", "区块链"]
results = []

# 根据平台选择脚本
script = "scripts/scrape_weibo_topic_windows.py" if platform.system() == "Windows" else "scripts/scrape_weibo_topic.py"
python_cmd = "python" if platform.system() == "Windows" else "python3"

for keyword in keywords:
    result = subprocess.run(
        [python_cmd, script, keyword],
        capture_output=True,
        text=True
    )
    results.append(result.stdout)

示例3: 集成到其他脚本

# Linux/macOS
from scripts.scrape_weibo_topic import scrape_weibo_topic

# Windows
# from scripts.scrape_weibo_topic_windows import scrape_weibo_topic

result = scrape_weibo_topic("刘亦菲有风的地方")
if result['success']:
    print(f"话题数: {result['topic_count']}")
    print(f"总讨论数: {result['formatted_discussions']}")
    print(f"总阅读数: {result['formatted_reads']}")

最佳实践

  1. 合理使用频率: 避免短时间内频繁访问同一页面
  2. 数据验证: 重要决策前建议在微博平台验证数据
  3. 错误重试: 遇到临时错误时可以自动重试2-3次
  4. 日志记录: 记录每次运行的参数和结果便于调试
  5. 结果备份: 将重要统计结果保存到文件

限制和约束

  • 仅统计搜索结果中显示的话题,可能不完全覆盖
  • 数据为实时数据,不同时间结果可能不同
  • 依赖agent-browser工具,需要正确安装和配置
  • 微博页面结构变化可能影响数据提取,需要维护