小红书视频图文提取:采集+CV的实战手记

项目说明:这波视频,值不值得采?

你有没有遇到过这样的场景?老板说:"我们得看看最近小红书上关于'旅行'的视频都说了些什么。"团队做数据分析的,立马傻眼:官网打不开、接口抓不着、视频不能保存。

事实上,小红书短视频内容正逐步成为品牌营销、热点追踪、图像分析等领域的"情绪入口"。尤其是搜索页前几条视频,往往已经代表了这个关键词下用户眼中的"热门答案"。

本项目就是围绕这样一个需求展开的:我们希望通过关键词搜索 ,自动抓取小红书里排在前3名的视频内容,包括:

  • 封面图
  • 视频文件(如果有)
  • 标题、作者、发布时间这些基本信息

你可以把这个脚本当成一个"图文数据下载器",用来收集训练素材、做内容统计,或者单纯保存好看的视频封面图。再配合一些图像识别、文本处理工具,后续的玩法空间就打开了。


重点功能梳理(清单式整理)

功能点 用处说明
搜索关键词 获取你关心的词条的前三条笔记
提取图片/视频链接 拿到视频的原始文件地址,不是截图!
拿到文本数据 包括标题、作者、时间,方便后续分析
使用代理IP 为了稳定访问和防止触发风控
模拟浏览器 模拟真实用户行为,让服务器"误以为"是人类在操作

关键代码段(能直接拿去用)

1、网络配置部分(含代理和请求头)

python 复制代码
import requests

# 爬虫代理加强版(参考亿牛云代理)
proxy_host = "proxy.16yun.cn"
proxy_port = "9020"
proxy_user = "16YUN"
proxy_pass = "16IP"

proxies = {
    "http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
    "https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
}

# 请求头和 Cookie(可通过浏览器复制)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/122.0.0.0 Safari/537.36",
    "Cookie": "这里替换为你自己的cookie字符串",
}

2、分析搜索页接口,获取核心数据

python 复制代码
import json

def search_notes(keyword):
    url = "https://edith.xiaohongshu.com/api/sns/web/v1/search/notes"
    params = {
        "keyword": keyword,
        "sort": "general",
        "page": 1,
        "page_size": 10
    }

    resp = requests.get(url, headers=headers, proxies=proxies, params=params)
    data = json.loads(resp.text)

    results = []
    for i, item in enumerate(data['data']['items'][:3]):
        note = item.get("note_card", {})
        results.append({
            "title": note.get("title", ""),
            "author": note.get("user", {}).get("nickname", ""),
            "time": note.get("time", ""),
            "cover_img": note.get("image_list", [{}])[0].get("url", ""),
            "video_url": note.get("video", {}).get("media", {}).get("url", "")
        })
    return results

2.1下载视频和图片内容

python 复制代码
def download_file(url, filename):
    if not url:
        print(f"跳过空链接:{filename}")
        return
    resp = requests.get(url, headers=headers, proxies=proxies, stream=True)
    with open(filename, 'wb') as f:
        for chunk in resp.iter_content(chunk_size=8192):
            f.write(chunk)
    print(f"下载完成:{filename}")

2.2 主流程(边抓边下)

python 复制代码
if __name__ == "__main__":
    kw = "旅行Vlog"
    results = search_notes(kw)

    for idx, r in enumerate(results):
        print(f"\n第{idx+1}条")
        print("标题:", r["title"])
        print("作者:", r["author"])
        print("时间:", r["time"])

        download_file(r["cover_img"], f"cover_{idx+1}.jpg")
        download_file(r["video_url"], f"video_{idx+1}.mp4")

使用建议

  • 代理推荐:使用类似"亿牛云"这种住宅动态代理,稳定性高一些
  • Cookie处理:自己手动登录小红书网页版后从控制台复制即可
  • 接口变动:小红书接口可能不定期改,建议用抓包工具(如Mitmproxy)定期确认
  • 频率控制:尽量控制访问频率,模拟正常用户节奏

快速试运行指引

  1. 打开浏览器,登录小红书网页版
  2. 用F12打开开发者工具,获取请求头 & cookie
  3. 替换代码里的对应字段
  4. 运行脚本,看是否能成功输出视频标题、作者和时间
  5. 查看脚本目录,是否下载了封面图和视频文件

其他建议:可以加点视觉分析的料

如果你要搞点图像识别,可以用 OpenCV 对封面图做点筛选,例如:

python 复制代码
import cv2

def is_valid_image(path):
    img = cv2.imread(path)
    if img is None:
        return False
    # 这里可以加你自己的图片过滤逻辑
    return True

最后

如果你只是想定期拉取关键词对应的视频内容,这个脚本就足够用了;如果你还想做图像识别、评论情绪分析甚至推荐系统,那就可以在此基础上扩展。

这套逻辑目前在我们用得还挺稳定的(当然接口不能挂),你也可以根据业务做适当裁剪和封装。遇到接口变更或风控升级,建议直接用浏览器工具重新确认数据来源。

相关推荐
TechVoyager_82461 小时前
多形态输入与12 通道音频:IT6615 这颗 HDMI 发射器的接口宽度
音视频·音频芯片·芯片选型·视频发射
Raymond16882 小时前
AI配音工具长文本合成架构技术解析:全局音色锚定与声学状态跟踪
人工智能·架构·实时互动·视觉检测·音视频·语音识别
hflmwl88 小时前
Wise Data Recovery找回误删的文档照片音乐和视频
音视频·datarecovery·找回误删的文档照片音乐和视频·找回误删的文档照片音乐视频
技灵AI8 小时前
AI 视频转场提示词怎么写?让前后画面衔接更自然
人工智能·prompt·aigc·音视频
youandyouyou10 小时前
跨区培训的屏幕共享怎么做才稳?同屏同步与弱网优化实践
音视频·网络通信
开开心心就好10 小时前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
美狐美颜SDK开放平台11 小时前
直播APP集成美颜SDK,如何梳理第三方组件的数据权限?
开发语言·人工智能·深度学习·音视频·第三方美颜sdk
l143723326712 小时前
批量视频硬字幕擦除多少钱?影响报价的关键因素全解析
音视频
重生六道12 小时前
B站视频时长统计:一段JS脚本搞定分P/合集总时长(附倍速计算)
开发语言·javascript·音视频
音视频牛哥12 小时前
不换摄像机,也能接入 WebRTC?SmartMediaKit RTSP/RTMP 转 WHIP 技术实践
音视频·webrtc·smartmediakit·rtsp转whip·rtmp转whip·whip推流·rtsp转webrtc播放