基于 DrissionPage 实现小红书搜索笔记批量采集

前言

做内容分析、竞品调研、选题挖掘经常需要批量获取小红书笔记数据,手动复制粘贴效率极低。之前试过 selenium 配置繁琐、容易被检测,后来改用DrissionPage(基于 Chromium 的轻量化自动化工具),搭配 pyautogui 页面滚动、pandas 导出表格,写了一套稳定的小红书搜索爬虫。

该脚本无需复杂逆向,模拟真人浏览器操作,支持自定义搜索关键词、自定义采集页数,自动提取笔记标题、作者、发布时间、点赞、笔记链接、封面图、作者主页,自带链接去重,最后一键导出 CSV 表格,适合新媒体运营、专业做数据分析、课程项目使用。

温馨提示:本代码仅用于个人学习、学术研究,请勿大规模高频采集、商用爬取,遵守小红书用户协议,合理控制采集间隔,避免账号风控。

一、环境依赖安装

运行前先安装所需第三方库,打开 cmd 执行:

bash

运行

复制代码
pip install DrissionPage pandas pyautogui

各库作用说明:

  1. DrissionPage:驱动 Chromium 浏览器,自动化打开网页、定位元素,相比 Selenium 更轻量,自带免驱动浏览器;
  2. pandas:数据整理,最终导出 csv 文件,方便 Excel 打开分析;
  3. pyautogui:模拟鼠标滚动,实现页面下滑加载更多笔记;
  4. 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 列完整数据,满足绝大多数调研需求:

  1. 标题:小红书笔记完整标题
  2. 作者:笔记发布博主昵称
  3. 发布时间:笔记标注发布时长(几天前 / 几小时前)
  4. 点赞数:笔记当前点赞数据
  5. 笔记链接:可直接打开的笔记详情完整 URL
  6. 封面图:笔记首图网络地址,可批量下载
  7. 作者主页:博主个人主页直达链接

五、常见问题优化与注意事项

  1. 页面采集不到笔记

    • 未登录小红书,游客模式大量节点无法加载;
    • 滚动次数不足,可修改scroll_to_bottom循环次数;
    • 网络加载慢,可增加代码中time.sleep()等待时长。
  2. pyautogui 滚动失效 多显示器、窗口未置顶会导致鼠标坐标偏移,缩小浏览器窗口,保证浏览器窗口在主屏幕中心区域运行。

  3. 风控与账号限制 不要一次性采集几十上百页,每页延长 sleep 等待时间;不要短时间多次频繁运行脚本,容易触发小红书验证码限制。

  4. 法律与使用边界 代码仅用于个人学习、课程作业、非商业竞品分析;禁止爬取数据用于售卖、批量营销、恶意引流,遵守平台爬虫规则与网络安全相关法规。

六、拓展优化思路(可自行二次开发)

  1. 增加多线程 / 异步批量下载封面图片,本地保存图片素材;
  2. 增加笔记详情页进入逻辑,采集正文内容、收藏、评论数据;
  3. 增加自动换关键词批量采集,循环多组搜索词;
  4. 接入代理 IP 池,降低单 IP 采集风控概率;
  5. 增加数据清洗功能,统一点赞单位(万 / 千转换数字)、时间标准化;
  6. 导出 Excel 文件(安装 openpyxl 库即可),适配更多办公场景。

总结

这套 DrissionPage 小红书采集脚本轻量化易上手,无需复杂抓包逆向,新手也能快速部署运行。对于新媒体选题分析、行业数据调研、在校学生课程项目都十分实用。代码做了容错、去重、编码兼容处理,运行稳定性优于简易 selenium 爬虫,按需调整滚动次数、等待时间即可适配不同网络环境。使用过程中务必适度采集,保护账号,仅用于合规学习场景。

相关推荐
hssfscv2 小时前
QT的学习笔记4——QMainWindow、资源文件以及主要控件的介绍
笔记·qt·学习
克里斯蒂亚诺更新2 小时前
电脑关闭密码的操作
笔记
小小的代码里面挖呀挖呀挖2 小时前
杰理蓝牙耳机开发--LE Audio与游戏耳机应用
笔记·单片机·物联网·学习
xiaomici3 小时前
SAC中的Dataset/Model/Planning model
笔记
学数学的口心贝3 小时前
从零搭建并维护个人主页
经验分享·笔记
一个人旅程~4 小时前
欧文·亚隆的《当尼采哭泣》(When Nietzsche Wept)精简总结
经验分享·笔记·新浪微博
u0143781084 小时前
小红书发布api发送笔记
笔记
灵性(๑>ڡ<)☆5 小时前
Java学习笔记 --面向对象进阶
java·笔记·学习
weigangwin5 小时前
DSPy 采用笔记:先证明 LLM 程序合同,再谈 Prompt 优化
笔记·prompt