Python爬取微博移动端评论完整教程(基础+常见问题)

在数据采集领域,微博作为国内主流的社交媒体平台,其评论数据蕴含着丰富的用户观点和舆论倾向。相较于PC端,微博移动端接口更简洁、反爬措施相对宽松,是获取评论数据的优选方案。本文将以Python为工具,从环境搭建到代码实现,手把手教你爬取微博移动端评论,并解答过程中可能遇到的常见问题。


一、基础教程:从零实现微博评论爬取

1.1 环境准备

首先需要搭建Python爬虫环境,核心依赖库如下:

  • requests:发送HTTP请求,获取接口数据

  • json:解析接口返回的JSON数据(Python内置,无需安装)

  • pandas:数据存储与导出(可选,用于生成Excel文件)

  • time:设置请求间隔,避免被反爬(Python内置)

安装命令:

1
2

pip install requests pandas

1.2 核心原理:找到评论接口

微博移动端评论通过AJAX异步加载,我们需要先找到真实的评论接口。步骤如下:

  1. 打开手机浏览器(或电脑浏览器切换到移动端模式),登录微博账号,找到目标微博(例如:https://m.weibo.cn/detail/4900000000000000

  2. 按F12打开开发者工具,切换到Network标签,勾选XHR(筛选AJAX请求)

  3. 下拉页面加载评论,此时会看到名为comment的请求,点击该请求查看详情

  4. Request URL中可以看到评论接口地址,在Response中可以看到JSON格式的评论数据

典型的微博评论接口格式:

1
2

https://m.weibo.cn/comments/hotflow?id=微博ID&mid=微博ID&max_id=下一页标识&max_id_type=0

参数说明:

  • id/mid:目标微博的ID(从微博详情页URL中获取,例如URL末尾的数字串)

  • max_id:分页标识,初始为0,后续页面的max_id从当前响应中获取

  • max_id_type:固定为0即可

1.3 代码实现步骤

步骤1:获取请求头(Headers)

为了模拟真实用户请求,需要在请求中添加Headers,核心参数包括User-AgentCookie

  • User-Agent:标识浏览器类型,移动端UA示例:Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1

  • Cookie:包含登录状态信息,从浏览器开发者工具的Request Headers中复制(登录后才能获取更多评论)

步骤2:发送请求并解析数据

编写代码发送GET请求,解析JSON响应中的评论内容(用户名、评论时间、评论内容等):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

import requests
import json
import time
import pandas as pd

# 配置信息
weibo_id = "4900000000000000" # 目标微博ID
headers = {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1",
"Cookie": "你的Cookie信息" # 替换为自己的Cookie
}
comments = [] # 存储评论数据
max_id = 0 # 初始分页标识

while True:
# 构建请求URL
url = f"https://m.weibo.cn/comments/hotflow?id={weibo_id}&mid={weibo_id}&max_id={max_id}&max_id_type=0"
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 若状态码不是200,抛出异常
data = json.loads(response.text)

# 提取评论列表
comment_list = data.get("data", {}).get("data", [])
if not comment_list: # 没有更多评论时退出循环
print("已获取所有评论")
break

# 解析每条评论
for comment in comment_list:
item = {
"用户名": comment.get("user", {}).get("screen_name", ""),
"用户ID": comment.get("user", {}).get("id", ""),
"评论时间": comment.get("created_at", ""),
"评论内容": comment.get("text", ""),
"点赞数": comment.get("like_count", 0),
"回复数": comment.get("reply_count", 0)
}
comments.append(item)
print(f"已获取{len(comments)}条评论")

# 更新下一页的max_id
max_id = data.get("data", {}).get("max_id", 0)
if max_id == 0: # 没有下一页时退出
break

# 设置请求间隔,避免被封IP
time.sleep(2)

except Exception as e:
print(f"请求出错:{e}")
break

步骤3:数据存储

将爬取到的评论数据导出为Excel文件,方便后续分析:

1
2
3
4
5

# 转换为DataFrame并导出
df = pd.DataFrame(comments)
df.to_excel("微博评论.xlsx", index=False, engine="openpyxl")
print("评论数据已保存到微博评论.xlsx")

二、常见问题及解决方案

2.1 问题1:请求返回403/401错误

原因:Headers参数不完整或Cookie失效,服务器识别为爬虫请求。

解决方案

  • 检查Cookie是否正确,重新登录微博后复制最新的Cookie

  • 补充Headers中的其他参数(如Referer:设置为目标微博详情页URL)

  • 确保User-Agent是移动端格式,避免使用PC端UA

2.2 问题2:只能爬取前20条评论

原因:未正确处理分页参数max_id,或未登录导致只能获取公开评论。

解决方案

  • 确保登录状态(Cookie有效),登录后可获取更多评论

  • 检查max_id是否正确从响应中提取,避免手动设置固定值

  • 部分微博可能限制评论查看权限,属于正常情况

2.3 问题3:IP被封禁,无法发送请求

原因:请求频率过高,触发微博反爬机制。

解决方案

  • 增加请求间隔时间(如time.sleep(3-5秒)),避免高频请求

  • 使用代理IP池,轮换IP地址发送请求(推荐使用高匿代理)

  • 暂停爬取1-2小时,IP封禁通常是临时的

2.4 问题4:评论内容含HTML标签

原因:接口返回的text字段包含HTML格式(如表情、话题链接等)。

解决方案:使用BeautifulSoup清理HTML标签:

1
2
3
4
5
6
7
8
9
10

from bs4 import BeautifulSoup

# 清理评论内容中的HTML标签
def clean_html(text):
soup = BeautifulSoup(text, "html.parser")
return soup.get_text()

# 在解析评论时调用
"评论内容": clean_html(comment.get("text", "")),

2.5 问题5:响应数据格式异常

原因:接口参数变化或微博更新反爬策略。

解决方案

  • 重新通过浏览器开发者工具抓取最新的评论接口,确认参数是否变化

  • 打印response.text查看原始响应,分析数据格式是否与预期一致

  • 关注微博接口的官方变化(若有),及时调整代码

2.6 问题6:请求第一页之后的数据响应ok{0}

原因:请求的Cookie已失效,需要重新登录获取Cookie。(因为微博需要登录才能查看更多评论)

解决方案

  • 登录微博账号,打开浏览器开发者工具,选择Network选项卡,点击刷新按钮。
  • 在Network选项卡中,找到对应的请求,查看响应头,找到Cookie字段,复制Cookie值。
  • 将Cookie值替换为配置文件中的Cookie字段。
  • 重新运行代码,即可获取最新数据。

三、注意事项

  • 合规性:爬取微博数据需遵守《微博服务使用协议》,不得用于商业用途或恶意攻击,建议仅用于个人学习研究

  • 登录状态:尽量使用小号登录,避免主号因爬虫行为被限制

  • 请求频率:保持低调,避免短时间内发送大量请求,友好对待服务器

  • 数据备份:定期保存爬取到的数据,防止程序异常导致数据丢失

通过以上步骤,你可以成功爬取微博移动端评论数据。如果遇到其他问题,欢迎在评论区留言交流!