爬取微博热搜并自动发微博机器人(附源码)
·
在信息爆炸的时代,微博热搜是捕捉热点、传递信息的核心渠道。如果能实现自动爬取热搜并发布相关微博,不仅能节省手动操作时间,还能快速跟进热点流量。本文将手把手教你搭建一套完整的 “热搜爬取 + 自动发博” 机器人,附可直接运行的源码和详细说明。
一、准备工作:环境与工具
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 获取方法
- 访问微博开放平台的 “应用管理”,找到自己的应用。
- 进入 “测试授权” 页面,点击 “获取授权码”,登录微博账号后得到 code。
- 用 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. 功能扩展方向
- 关键词筛选:只爬取包含指定关键词(如 “科技”“娱乐”)的热搜。
- 带图发博:爬取热搜对应的图片,结合文案一起发布。
- 异常通知:添加邮件 / 微信通知功能,当发博失败时及时提醒。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)