API获取微博数据的准备工作
在开始通过API获取微博数据前,需完成以下准备工作,确保流程合规且高效。

申请开发者权限
微博数据需通过其开放平台API获取,首先需注册为微博开发者账号,访问微博开放平台(https://open.weibo.com/),选择“立即注册”完成个人或企业开发者认证,企业认证需提供营业执照等材料,个人认证需实名认证,审核通过后,在“控制台”创建应用,选择应用类型(如网站、移动端等),获取App Key和App Secret,这是调用API的身份凭证。
了解API接口与权限
微博开放平台提供多条数据接口,需根据需求选择合适接口:
- 用户接口:获取用户基本信息(如
users/show)、关注列表(friendships/followers)等; - 微博接口:获取单条微博详情(
statuses/show)、用户微博列表(statuses/user_timeline)、热门微博(statuses/hot)等; - 话题接口:获取话题详情(
topics/show)、相关微博(topics/search)等。
部分接口需申请高级权限(如读取用户私信、获取历史微博等),需在控制台提交申请说明用途,审核通过后方可使用。
环境配置
准备开发环境,推荐使用Python语言,安装必要库:
pip install requests # 发送HTTP请求 pip install pandas # 数据处理与存储
配置基础代码,设置App Key和Secret,获取Access Token(调用API的临时令牌,有效期通常为2小时,需定期刷新或使用长效刷新令牌)。

API调用实战:获取用户微博数据
以获取用户微博列表(statuses/user_timeline)为例,演示完整流程。
获取Access Token
通过App Key和Secret获取Access Token,需发送POST请求至授权接口:
import requests
app_key = "你的App Key"
app_secret = "你的App Secret"
redirect_uri = "回调地址(需在应用中配置)"
# 获取Authorization Code
auth_url = f"https://api.weibo.com/oauth2/authorize?client_id={app_key}&redirect_uri={redirect_uri}&response_type=code"
# 用户授权后,从回调URL中获取code
# 通过code获取Access Token
token_url = "https://api.weibo.com/oauth2/access_token"
data = {
"client_id": app_key,
"client_secret": app_secret,
"grant_type": "authorization_code",
"code": "授权码",
"redirect_uri": redirect_uri
}
response = requests.post(token_url, data=data)
access_token = response.json()["access_token"]
调用微博列表接口
使用Access Token调用statuses/user_timeline接口,获取指定用户的微博内容:
uid = "目标用户ID(可通过用户名查询获取)"
api_url = "https://api.weibo.com/2/statuses/user_timeline.json"
params = {
"access_token": access_token,
"uid": uid,
"count": 50, # 单次获取条数(最大50)
"page": 1 # 页码
}
response = requests.get(api_url, params=params)
weibo_data = response.json()["statuses"] # 获取微博列表
数据解析与存储
微博数据为JSON格式,提取关键字段(如文本、发布时间、点赞数等)并存储为CSV表格:

import pandas as pd
data_list = []
for weibo in weibo_data:
data_list.append({
"微博ID": weibo["id"],
"文本": weibo["text"],
"发布时间": weibo["created_at"],
"点赞数": weibo["attitudes_count"],
"转发数": weibo["reposts_count"],
"评论数": weibo["comments_count"]
})
df = pd.DataFrame(data_list)
df.to_csv("weibo_data.csv", index=False, encoding="utf-8-sig")
分页与批量获取
若需获取大量数据,需处理分页逻辑(通过page参数递增),并注意API调用频率限制(微博普通接口限制为每分钟200次)。
数据获取的注意事项
合规性与隐私保护
- 遵守微博开放平台规则,禁止爬取敏感数据(如用户私信、手机号等);
- 数据仅可用于研究或合规用途,不得用于商业牟利或侵犯用户隐私;
- 若需公开数据,需对用户信息进行脱敏处理(如隐藏用户ID、昵称等)。
接口调用限制
- 频率限制:普通接口每分钟200次,高级接口可能更低,需合理设置请求间隔(如
time.sleep(1)); - 配额管理:部分接口有调用次数配额,需在控制台监控剩余配额,避免超限。
数据清洗与优化
获取的原始数据可能包含HTML标签(如微博文本中的<a>链接)、特殊字符等,需使用正则表达式或字符串方法清洗:
import re
def clean_text(text):
text = re.sub(r"<.*?>", "", text) # 去除HTML标签
text = re.sub(r" |<|>", "", text) # 去除HTML实体
return text.strip()
df["文本"] = df["文本"].apply(clean_text)
常见问题与解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 返回“401 Unauthorized” | Access Token无效或过期 | 重新获取Access Token |
| 返回“418 API Rate Limit” | 调用频率超限 | 增加请求间隔,降低单次请求数量 |
| 获取数据为空 | 用户隐私设置或接口权限不足 | 检查用户隐私设置,申请高级权限 |
| 数据乱码 | 编码格式不匹配 | 使用encoding="utf-8-sig"保存CSV |
通过以上步骤,可合法、高效地获取微博数据并用于分析,实际操作中需根据具体需求调整接口参数和数据清洗逻辑,确保数据质量与合规性。


















