在信息爆炸的时代,微博热搜是捕捉热点、传递信息的核心渠道。如果能实现自动爬取热搜并发布相关微博,不仅能节省手动操作时间,还能快速跟进热点流量。本文将手把手教你搭建一套完整的 “热搜爬取 + 自动发博” 机器人,附可直接运行的源码和详细说明。

一、准备工作:环境与工具

1. 开发环境

  • 编程语言:Python 3.8+(兼容性更稳定)
  • 核心库:requests(爬取数据)、selenium(模拟登录 / 备选方案)、weibo-sdk(官方 API 交互)、schedule(定时任务)、json(数据解析)

2. 关键配置

  • 微博开发者账号:登录微博开放平台,创建 “网页应用”,获取 App Key、App Secret 和授权回调地址(需完成实名认证)。
  • 依赖安装:执行命令快速安装所需库

bash

pip install requests weibo-sdk schedule selenium

二、核心功能实现:分模块拆解

1. 爬取微博热搜数据

微博热搜有公开的接口可直接调用(无需登录),核心是解析返回的 JSON 数据,提取关键信息。

  • 接口选择:使用微博热搜公开接口(https://weibo.com/ajax/statuses/hot_band),返回数据包含热搜标题、热度、链接等。
  • 爬取逻辑:设置请求头模拟浏览器访问,避免被拦截;解析 JSON 数据,筛选前 N 条热搜(可自定义数量)。

2. 自动发布微博

优先使用微博官方 SDK(稳定且不易封号),替代模拟登录(易触发反爬)。

  • 授权流程:通过 App Key 和 App Secret 获取访问令牌(Access Token),实现账号授权。
  • 发博逻辑:将爬取的热搜数据拼接成文案(可自定义格式,如 “今日热搜 TOP3:1. XXX 2. XXX 3. XXX #微博热搜 #”),调用 SDK 的发博接口完成发布。

3. 定时任务调度

使用 schedule 库设置固定时间触发爬取和发博(如每小时一次、每日固定时段),实现全自动化运行。


三、完整源码(可直接运行)

python

运行

import requests
import json
from weibo import APIClient
import schedule
import time

# ---------------------- 配置参数(需替换为自己的信息)----------------------
APP_KEY = "你的App Key"
APP_SECRET = "你的App Secret"
REDIRECT_URI = "你的授权回调地址"  # 需与开发者平台配置一致
ACCESS_TOKEN = "你的访问令牌"  # 需通过授权流程获取
HOT_SEARCH_NUM = 3  # 爬取前N条热搜
POST_INTERVAL = 60  # 定时发博间隔(单位:分钟)

# ---------------------- 爬取微博热搜 ----------------------
def crawl_hot_search():
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "Referer": "https://weibo.com/"
    }
    url = "https://weibo.com/ajax/statuses/hot_band"
    try:
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()  # 抛出请求异常
        data = json.loads(response.text)
        hot_list = data["data"]["band_list"]
        
        # 筛选有效热搜(排除广告、推广)
        result = []
        for item in hot_list[:HOT_SEARCH_NUM]:
            if item.get("is_ad") == 0:  # 非广告
                title = item["note"]  # 热搜标题
                hot_value = item["hot_value"]  # 热度值
                result.append(f"{title}(热度:{hot_value})")
        return result
    except Exception as e:
        print(f"爬取热搜失败:{str(e)}")
        return []

# ---------------------- 自动发布微博 ----------------------
def auto_post_weibo():
    # 初始化微博API客户端
    client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URI)
    client.set_access_token(ACCESS_TOKEN, expires_in=3600*24*30)  # 令牌有效期(默认30天)
    
    # 获取热搜数据
    hot_search_list = crawl_hot_search()
    if not hot_search_list:
        print("无有效热搜数据,跳过发博")
        return
    
    # 拼接发博文案
    content = "今日热搜TOP{}:\n".format(HOT_SEARCH_NUM)
    for i, hot in enumerate(hot_search_list, 1):
        content += f"{i}. {hot}\n"
    content += "#微博热搜# #自动更新#"  # 话题标签(增加曝光)
    
    # 发布微博
    try:
        client.statuses.update.post(status=content)
        print(f"发博成功!内容:\n{content}")
    except Exception as e:
        print(f"发博失败:{str(e)}")

# ---------------------- 定时任务 ----------------------
def run_schedule():
    # 每隔POST_INTERVAL分钟执行一次
    schedule.every(POST_INTERVAL).minutes.do(auto_post_weibo)
    print(f"机器人已启动,每{POST_INTERVAL}分钟自动爬取热搜并发博...")
    
    # 持续运行
    while True:
        schedule.run_pending()
        time.sleep(1)

# ---------------------- 程序入口 ----------------------
if __name__ == "__main__":
    # 首次运行可先测试发博功能
    # auto_post_weibo()
    # 启动定时任务
    run_schedule()

四、关键说明与避坑指南

1. Access Token 获取方法

  1. 访问微博开放平台的 “应用管理”,找到自己的应用。
  2. 进入 “测试授权” 页面,点击 “获取授权码”,登录微博账号后得到 code。
  3. 用 code 调用接口换取 Access Token(可写临时脚本获取,代码如下):

python

运行

from weibo import APIClient
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URI)
url = client.get_authorize_url()
print("授权链接:", url)  # 打开链接登录后获取code
code = "你的授权code"
r = client.request_access_token(code)
print("Access Token:", r.access_token)  # 复制保存,用于主程序

2. 避坑要点

  • 避免高频请求:设置至少 30 分钟的发博间隔,否则可能被微博限制账号。
  • 请求头不能少:爬取热搜时必须携带 User-Agent,模拟浏览器访问。
  • 排查接口失效:若热搜接口无法访问,可替换为网页端爬取(使用 selenium 模拟打开weibo.com/hot,解析页面元素)。

3. 功能扩展方向

  • 关键词筛选:只爬取包含指定关键词(如 “科技”“娱乐”)的热搜。
  • 带图发博:爬取热搜对应的图片,结合文案一起发布。
  • 异常通知:添加邮件 / 微信通知功能,当发博失败时及时提醒。
Logo

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

更多推荐