
前言做内容分析、竞品调研、选题挖掘经常需要批量获取小红书笔记数据手动复制粘贴效率极低。之前试过 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}sourceweb_explore_feed dp.get(url) # 手动登录等待小红书必须登录才能查看完整笔记内容 denglu input(请在浏览器确认是否登录确认登录后回车继续) time.sleep(2) # 自定义页面滚动函数模拟鼠标下滑加载更多内容 def scroll_to_bottom(): for i in range(5): pyautogui.moveTo(2419, 500, duration0.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, timeout0) title title_ele.text.strip() if title_ele else f{keyword} # 2. 提取作者名称 author_ele item.ele(.name, timeout0) author author_ele.text if author_ele else momo t0.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,timeout0) 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, timeout0) cover_img img.attr(src) if img else # 7. 拼接作者主页完整链接 author_a item.ele(css:.author, timeout0) 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, indexFalse, encodingutf-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 爬虫按需调整滚动次数、等待时间即可适配不同网络环境。使用过程中务必适度采集保护账号仅用于合规学习场景。