前言
做内容分析、竞品调研、选题挖掘经常需要批量获取小红书笔记数据,手动复制粘贴效率极低。之前试过 selenium 配置繁琐、容易被检测,后来改用DrissionPage(基于 Chromium 的轻量化自动化工具),搭配 pyautogui 页面滚动、pandas 导出表格,写了一套稳定的小红书搜索爬虫。
该脚本无需复杂逆向,模拟真人浏览器操作,支持自定义搜索关键词、自定义采集页数,自动提取笔记标题、作者、发布时间、点赞、笔记链接、封面图、作者主页,自带链接去重,最后一键导出 CSV 表格,适合新媒体运营、专业做数据分析、课程项目使用。
温馨提示:本代码仅用于个人学习、学术研究,请勿大规模高频采集、商用爬取,遵守小红书用户协议,合理控制采集间隔,避免账号风控。
一、环境依赖安装
运行前先安装所需第三方库,打开 cmd 执行:
bash
运行
pip install DrissionPage pandas pyautogui
各库作用说明:
- DrissionPage:驱动 Chromium 浏览器,自动化打开网页、定位元素,相比 Selenium 更轻量,自带免驱动浏览器;
- pandas:数据整理,最终导出 csv 文件,方便 Excel 打开分析;
- pyautogui:模拟鼠标滚动,实现页面下滑加载更多笔记;
- urllib.parse:拼接相对链接为完整可访问网址。
二、完整爬虫源码
python
运行
from DrissionPage import ChromiumPage
import time
import pandas as pd
from urllib.parse import urljoin
import pyautogui
# 初始化Chromium浏览器对象
dp = ChromiumPage()
# 接收用户输入关键词与采集页数
keyword = input('请输入要搜索的关键字:')
page = input('请输入要采集的页数:')
base_domain = "https://www.xiaohongshu.com"
# 小红书搜索结果页链接
url = f'{base_domain}/search_result_ai?keyword={keyword}&source=web_explore_feed'
dp.get(url)
# 手动登录等待,小红书必须登录才能查看完整笔记内容
denglu = input('请在浏览器确认是否登录:确认登录后回车继续')
time.sleep(2)
# 自定义页面滚动函数,模拟鼠标下滑加载更多内容
def scroll_to_bottom():
for i in range(5):
pyautogui.moveTo(2419, 500, duration=0.5)
pyautogui.scroll(-1000)
# 存储全部笔记数据 + 集合去重(防止同一笔记重复采集)
note_data_list = []
exist_links = set()
max_page = int(page)
current_page = 1
# 分页采集主循环
while current_page <= max_page:
print(f"\n===== 正在采集第 {current_page} 页数据 =====")
# 滚动加载页面全部笔记
scroll_to_bottom()
time.sleep(2)
# 获取当前页面所有笔记item节点
note_items = dp.eles('.note-item')
if not note_items:
print("未识别到笔记,页面加载异常或无更多内容")
break
# 遍历单页每一条笔记
for item in note_items:
# 1. 提取笔记标题
title_ele = item.ele('.title', timeout=0)
title = title_ele.text.strip() if title_ele else f"{keyword}"
# 2. 提取作者名称
author_ele = item.ele('.name', timeout=0)
author = author_ele.text if author_ele else "momo"
t=0.8)
if cover_a:
href_raw = cover_a.attr('href')
note_link = urljoin(base_domain, href_raw)
if not note_link:
title_a = item.ele('.title',timeout=0)
if title_a:
href_raw = title_a.attr('href')
note_link = urljoin(base_domain, href_raw)
# 链接去重,重复笔记直接跳过
if note_link in exist_links and note_link != "":
continue
exist_links.add(note_link)
# 6. 提取封面图片地址
img = item.ele('css:a.cover.mask.ld img', timeout=0)
cover_img = img.attr('src') if img else ""
# 7. 拼接作者主页完整链接
author_a = item.ele('css:.author', timeout=0)
author_link = ""
if author_a:
href = author_a.attr('href')
if href:
author_link = urljoin(base_domain, href.split("?")[0])
# 整合单条笔记所有字段
note_info = {
"标题": title,
"作note_link,
"封面图": cover_img,
"作者主页": author_link,
}
note_data_list.append(note_info)
_link}")
print(f"封面:{cover_img}")
print(f"作者主页:{author_link}\n")
# 页数自增,进入下一轮采集
current_page += 1
# 将采集到的列表转为DataFrame,导出CSV文件
df = pd.DataFrame(note_data_list)
df.to_csv(f"小红书_{keyword}_采集结果.csv", index=False, encoding="utf-8-sig")
# 采集完成提示
print(f"\n采集完成!共获取 {len(note_data_list)} 条不重复笔记")
print(f"数据已保存:小红书_{keyword}_采集结果.csv")
三、脚本运行步骤详解
1. 启动浏览器并打开搜索页
代码运行后,控制台会提示输入搜索关键词、需要采集的页数,程序自动拉起 Chromium 浏览器,跳转小红书 AI 搜索结果页面。
2. 手动登录小红书
小红书限制游客浏览完整笔记数据,程序会暂停等待你手动扫码登录,登录完成后回车,程序才会继续执行采集逻辑。
3. 自动下滑加载内容
内置scroll_to_bottom函数调用 pyautogui 模拟鼠标下移,循环滚动 5 次,触发页面懒加载,保证当前页面所有笔记全部渲染完成,避免漏采。
4. 元素定位与数据提取
通过 css 选择器定位页面.note-item笔记卡片,循环解析每条笔记的 7 类核心字段,做兼容判断:元素不存在时填充默认值,不会因节点缺失直接报错中断程序。
5. 链接去重机制
使用集合exist_links存储已采集笔记链接,重复链接直接跳过,解决滚动加载时重复抓取同一条笔记的问题,保证最终数据无重复。
6. 分页循环采集
根据输入页数循环采集,每一页采集完成自动进入下一页逻辑,全部页面采集结束后自动生成 csv 表格。
7. 数据导出
采用utf-8-sig编码保存 CSV,使用 Excel 打开不会出现中文乱码,文件命名格式为小红书_关键词_采集结果.csv,保存在代码同目录下。

四、采集输出字段说明
导出表格包含 7 列完整数据,满足绝大多数调研需求:
- 标题:小红书笔记完整标题
- 作者:笔记发布博主昵称
- 发布时间:笔记标注发布时长(几天前 / 几小时前)
- 点赞数:笔记当前点赞数据
- 笔记链接:可直接打开的笔记详情完整 URL
- 封面图:笔记首图网络地址,可批量下载
- 作者主页:博主个人主页直达链接
五、常见问题优化与注意事项
-
页面采集不到笔记
- 未登录小红书,游客模式大量节点无法加载;
- 滚动次数不足,可修改
scroll_to_bottom循环次数; - 网络加载慢,可增加代码中
time.sleep()等待时长。
-
pyautogui 滚动失效 多显示器、窗口未置顶会导致鼠标坐标偏移,缩小浏览器窗口,保证浏览器窗口在主屏幕中心区域运行。
-
风控与账号限制 不要一次性采集几十上百页,每页延长 sleep 等待时间;不要短时间多次频繁运行脚本,容易触发小红书验证码限制。
-
法律与使用边界 代码仅用于个人学习、课程作业、非商业竞品分析;禁止爬取数据用于售卖、批量营销、恶意引流,遵守平台爬虫规则与网络安全相关法规。
六、拓展优化思路(可自行二次开发)
- 增加多线程 / 异步批量下载封面图片,本地保存图片素材;
- 增加笔记详情页进入逻辑,采集正文内容、收藏、评论数据;
- 增加自动换关键词批量采集,循环多组搜索词;
- 接入代理 IP 池,降低单 IP 采集风控概率;
- 增加数据清洗功能,统一点赞单位(万 / 千转换数字)、时间标准化;
- 导出 Excel 文件(安装 openpyxl 库即可),适配更多办公场景。
总结
这套 DrissionPage 小红书采集脚本轻量化易上手,无需复杂抓包逆向,新手也能快速部署运行。对于新媒体选题分析、行业数据调研、在校学生课程项目都十分实用。代码做了容错、去重、编码兼容处理,运行稳定性优于简易 selenium 爬虫,按需调整滚动次数、等待时间即可适配不同网络环境。使用过程中务必适度采集,保护账号,仅用于合规学习场景。