目录

前言

一、环境配置与依赖准备

1.1 安装依赖库

1.2 导入所需模块

二、核心功能模块说明

三、基础工具类 wbTool 详解

3.1 UID提取

3.2 文本清洗

3.3 微博时间格式转换

3.4 时间分段函数(核心反限制机制)

四、微博内容爬取核心逻辑

4.1 保存数据函数

五、博主信息抓取

六、评论抓取(一级评论)

七、转发数据抓取

八、主程序执行逻辑

8.1 设置保存路径

8.2 填写 COOKIE

8.3 设置爬取时间范围

8.4 设置关键词

8.5 是否抓取附加数据

九、输出文件结构

十、反爬机制设计

十一、运行注意事项

十二、总结

结语


前言

本文详细介绍如何使用 Python 实现微博搜索页数据爬取,并支持:

  • ✅ 微博内容抓取

  • ✅ 博主信息抓取

  • ✅ 一级评论抓取

  • ✅ 转发数据抓取

  • ✅ 按时间分段采集(突破 50 页限制)

  • ✅ 自动生成 CSV 数据文件

本程序通过模拟浏览器请求微博搜索页面,结合 AJAX 接口获取评论与转发数据,并将结果结构化保存为 CSV 文件,便于后续数据分析或文本挖掘。

一、环境配置与依赖准备

1.1 安装依赖库

首先确保已经安装所需第三方库:

pip install requests beautifulsoup4 lxml pandas

说明:

  • requests:发送网络请求

  • beautifulsoup4:解析 HTML 页面

  • lxml:HTML 解析器核心

  • pandas:时间处理与数据辅助

1.2 导入所需模块

import requests
from bs4 import BeautifulSoup
import json
import csv
import pandas as pd
import math
import time
import random
import datetime
from datetime import date
import os

说明:

  • json:解析接口返回数据

  • csv:写入 CSV 文件

  • math:计算粉丝数 log10

  • random + time:反爬延迟机制

  • datetime:时间转换

二、核心功能模块说明

本程序采用 工具类 + 爬虫类继承结构设计

wbTool         → 基础工具方法
weibo_spider   → 具体爬虫逻辑

三、基础工具类 wbTool 详解

3.1 UID提取

def extractUid(self,url):
    ids = str(url).split('/')[-1].split('?')[0]
    return ids

作用:从微博主页链接中提取 UID。


3.2 文本清洗

def cleaningContent(self,text):
    content = str(text).replace('\n','').replace(' ','')
    return content

用途:去除换行、去除空格、去除特殊符号。

3.3 微博时间格式转换

微博时间格式存在多种形式:3分钟前/今天 12:30/6月18日/2025年6月18日

函数:

def weiboTime(self,timestr):
  • 统一转换为 YYYY-MM-DD HH:MM:SS 格式,方便后续数据分析

3.4 时间分段函数(核心反限制机制)

def get_time_ranges(self,from_time, to_time, frequency):

微博搜索页最多显示 50 页,如果时间跨度过大,数据会被截断。

解决方式——将时间拆分为小区间,例如:

00:00-02:00
02:00-04:00
...

通过频率参数控制分段时间。

四、微博内容爬取核心逻辑

核心方法:

def analysisContent(self):

流程:

  1. 请求微博搜索页面

  2. 使用 BeautifulSoup 解析 HTML

  3. 提取:

  • UID  MID  发布时间  微博内容  微博链接  发布来源  转发数  评论数  点赞数
    最后保存至 CSV

4.1 保存数据函数

def saveCsv(self,filename, content):

说明:

  • 采用追加写入

  • UTF-8-SIG 编码

  • 每抓取一条即写入

五、博主信息抓取

接口:

https://weibo.com/ajax/profile/info?uid=xxxx

方法:

def GetBloggerinfo(self,uid):

抓取内容包括:

博主昵称  性别  个性签名  粉丝数  关注数  所属IP  微博数 

是否认证  头像链接  媒体类型  认证类型

并根据粉丝数:

if followers_count > 10000:
    publicMedia = '公共媒体'

同时计算:

log10 = math.log10(int(followers_count))

六、评论抓取(一级评论)

接口:

https://weibo.com/ajax/statuses/buildComments

方法:

def getComment(self,mid,uid,max_id,page=0):

特点:

  • 仅抓取一级评论

  • 支持翻页

  • 自动延迟 6-20 秒

  • 自动递归翻页

保存字段:

  • 评论时间

  • 评论内容

  • 评论人UID

  • 评论人昵称

  • 粉丝数

  • 点赞数

七、转发数据抓取

接口:

https://weibo.com/ajax/statuses/repostTimeline

方法:

def getRepost(self, mid, uid, next_cursor,page=1):

特点:

  • 自动分页

  • 自动延迟

  • 保存转发时间与内容

八、主程序执行逻辑

核心流程:

if __name__ == '__main__':

8.1 设置保存路径

save_path = r"D:\微博"
os.makedirs(save_path, exist_ok=True)

8.2 填写 COOKIE

COOKIES = '浏览器复制自己的cookies'

在这里,必须填入浏览器登录后的 Cookie,否则无法访问。


8.3 设置爬取时间范围

from_time = '2025-06-12 00:00:00'
to_time = '2026-01-18 23:59:59'
frequency = 60*1

说明:

  • frequency 控制时间分段(单位分钟)

  • 建议控制在 1-2 小时间隔内

8.4 设置关键词

支持多关键词批量抓取

keywords = ["比赛", "其他"]

8.5 是否抓取附加数据

程序运行时会询问,可灵活控制数据量。

是否抓取博主信息 [y/n]
是否抓取评论数据 [y/n]
是否抓取转发数据 [y/n]

九、输出文件结构

程序会自动生成 4 个文件:

关键词.csv
关键词_博主信息.csv
关键词_评论.csv
关键词_转发.csv

说明:

  • 博主信息需通过 UID 匹配

  • 评论需通过 MID 匹配

  • 转发需通过 MID 匹配

  • 十、反爬机制设计

    程序内置:

  • 随机休眠

  • 分段时间查询

  • 每 6 次循环随机延迟

  • 评论/转发翻页随机延迟

time.sleep(random.randint(6,20))

十一、运行注意事项

  1. 必须填写 COOKIE

  2. 安装 lxml

  3. 不要频率过快

  4. 评论与转发数量受微博限制

  5. 仅抓一级评论

十二、总结

本程序实现了:

时间分段突破 50 页限制
内容 + 博主 + 评论 + 转发完整数据结构
自动分页
自动反爬延迟
CSV 结构化输出

适用于:

  • 舆情分析

  • 文本情感分析

  • 传播路径研究

  • 博主影响力分析

  • 评论内容挖掘

结语

如果大家觉得有帮助,请多多点赞收藏支持一下,谢谢大家。如果遇到什么问题,也非常欢迎大家私信。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐