前言
微博作为中国最活跃的社交平台之一,拥有丰富的实时热点、用户动态和评论信息。但由于其强大的反爬策略,抓取微博数据并不像抓取一般静态页面那么容易。本文将介绍如何使用 Python 抓取微博数据,包括使用 API 接口、处理 Cookie 和模拟登录等。
抓取微博数据的常见方式
| 抓取方式 | 是否推荐 | 说明 |
|---|---|---|
| 使用微博开放 API | 推荐 | 需注册开发者账号,接口稳定,适合合规抓取 |
| 分析网页接口(XHR) | 可用 | 需要处理 Cookie 和签名,有一定难度 |
| 使用 Selenium 模拟浏览器 | 稳定 | 对抗 JS 渲染和反爬,适合评论、滚动数据 |
本文主要介绍第 2 和第 3 种方法,更灵活、可控性强。
环境准备
pip install requests beautifulsoup4 selenium pandas fake-useragent
浏览器驱动推荐使用 ChromeDriver,对应你的 Chrome 版本,下载地址: https://chromedriver.chromium.org/downloads
实战目标
抓取指定关键词(如'高考')的微博搜索结果,包括:微博内容、发布时间、用户昵称、微博链接。
方法一:Requests + 浏览器抓包 获取接口数据
第一步:打开微博搜索页面
前往:
https://s.weibo.com/weibo?q=高考
F12 打开开发者工具 → Network → XHR,查看接口,如:
https://s.weibo.com/ajax/...
这些接口返回 JSON 数据,但需要携带 Cookie 和 User-Agent,否则返回为空或提示'请登录'。
第二步:抓取数据代码示例
import requests
import pandas as pd
from fake_useragent import UserAgent
# 浏览器登录后手动复制 Cookie
cookies = {"SUB": "你的 SUB 值"} # 可添加其他关键 cookie
headers = {
"User-Agent": UserAgent().random,
"Referer": "https://s.weibo.com",
}
query = "高考"
url = f"https://s.weibo.com/ajax/statuses/search?keyword={query}&page=1"
res = requests.get(url, headers=headers, cookies=cookies)
data = res.json()
results = []
card data[][]:
text = card.get(, )
user = card[][]
created_at = card[]
mid = card[]
link =
results.append([user, created_at, text, link])
df = pd.DataFrame(results, columns=[, , , ])
df.to_csv(, index=, encoding=)


