资讯详情

用Python爬取小红书笔记:服饰趋势分析与热度指数实战全流程

📅 2026/10/15 23:35:59 | 华诺云谱 👁 阅读
用Python爬取小红书笔记:服饰趋势分析与热度指数实战全流程
做服饰行业的小红书数据分析最难的不是写代码而是想明白“要分析什么”和“数据从哪里来”。这几年我一直在做内容电商相关的数据项目其中一个反复被问到的需求就是能不能用Python抓一批小红书服饰笔记看看今年流行什么、什么品类在涨、什么风格在退。这个项目就是围绕这个需求展开的最后形成了一套从数据采集、清洗、趋势计算到可视化展示的完整流程。这篇文章就把整个过程拆开讲清楚从方案选型到具体代码、再到我踩过的坑一次性交代完整。这个项目适合谁参考如果你是做电商选品、内容运营、品牌市场调研的可以直接抄作业如果你是刚入门Python数据分析想找一个完整项目练手也能从中看到真实项目里数据是怎么一步步变成结论的。整个过程大概分四块数据怎么抓、抓完怎么洗、趋势怎么算、图表怎么画。1. 整体设计与方案选型1.1 为什么选小红书做服饰趋势数据源做趋势分析数据源的选择直接决定结论的可靠性。我对比过微博、抖音、淘宝这几个平台最终选了小红书原因有三个。第一小红书是典型的内容种草社区用户发笔记的动机是“分享穿搭真实感受”而不是销售转化。小红书服饰类笔记里大量出现“今日穿搭”“通勤穿搭”标题和正文天然带有趋势特征词比如“复古风回潮”“今年流行辣妹风”这类表述。淘宝上也有类似内容但更多是商品标题充满“爆款”“加绒加厚”这类运营词趋势信号被稀释得很严重。微博内容量大但噪音高短文本里信息密度低。小红书的笔记密度和表达方式最适合做趋势词频分析。第二笔记自带的元数据非常完整。每篇笔记都有发布时间、评论数、点赞数、收藏数这些是计算热度指数的基础。我之前做某宝数据分析时销量数据不公开只能靠爬到的评论数做近似。小红书至少把互动数据公开在页面上了能让趋势衡量从“纯词频”上升到“词频加权热度”这个差别非常关键。第三服饰内容在小红书上的标签体系比较成熟。用户发笔记时会打tag比如#连衣裙 #春季穿搭 #法式风格天然做好了粗分类。直接按标签聚合统计省去了很多文本分类工作。所以数据链路就是小红书搜索页→按关键词采集笔记列表→抓取标题、正文摘要、发布时间、互动数据、标签列表→存到本地表格→进入清洗和分析流程。1.2 技术栈选型技术上用了比较常规的一套组合Python 3.10 requests pandas jieba wordcloud matplotlib/seaborn。没有上Scrapy也没有上可视化大屏框架。有人可能会问为什么不用Scrapy我这个项目的采集量级撑死几千条笔记而且是小批量、多关键词、需要灵活调整参数的情况。用requests写循环是四五十行代码的事用Scrapy要建项目结构、配置中间件反而是杀鸡用牛刀。当然如果你计划长期采集、增量更新Scrapy更合适。这属于项目规模决定工具选型。可视化没选Tableau或Power BI是因为这个项目要和采集、分析代码跑在同一个环境里matplotlib和seaborn画出来的图直接出PNG方便复用和批量生成。另外后续如果要扩展成动态图表pyecharts可以和现有代码无缝衔接。保持Python生态闭环维护成本是最低的。整个流程是采集脚本输出CSV→pandas清洗和特征工程→生成趋势指标→可视化输出三张核心图表词云、时序折线图、品类风格热力图。这套流程跑一次大概十几分钟完全可以做成周级自动更新。2. 数据采集与字段设计的核心细节2.1 采集字段和样本规划采集字段直接决定了后面能做什么分析。很多人抓数据先抓了再说结果发现自己想算“收藏比”的时候发现收藏数没抓这就很尴尬。我在这个项目里规划了以下核心字段笔记ID唯一标识用于去重和关联标题核心文本信息承载大量趋势词正文摘要补充文本信息发布时间趋势时间序列的基础点赞数、收藏数、评论数热度计算的三个维度标签列表品类/风格粗分类的来源图片数可选有些品类如穿搭合集的逻辑是图片越多信息量越大关键词规划是另一个关键点。直接搜“连衣裙”只能拿到一锅炖的结果我用的是“品类词场景/季节词”的组合策略比如“春季 连衣裙”“夏季 T恤”“通勤 西装”等。一个组合给一个子任务爬完后按组合打标签存进统一表里。样本量上我的经验是每个组合抓100-150条有效笔记6个组合抓下来差不多能到700到900条做趋势分析足够了。这里还要注意一个点平台搜索结果的排序是多样化的推荐用“按时间排序”或“综合排序”各跑一次避免某一种排序下内容同质化严重。关于合规性这个项目只采集网页公开可见的内容采集频率做了限速处理单次请求间隔控制在3到5秒数据仅用于内部学习和趋势参考不用于商业转化也不涉及任何用户个人敏感信息。2.2 数据清洗的几道工序原始数据到手第一件事永远是洗数据。我总结下来有三道工序必须做扎实。第一道是去重。同一个笔记可能从多个关键词下被重复捕获这时候不能简单按笔记ID去重就完了因为如果我给“春季 连衣裙”和“夏季 连衣裙”两个关键词在不同时间跑了采集同一篇笔记可能在不同批次里出现但热度数据已经变了。更稳妥的做法是保留最新采集批次的数据或者干脆预设时间窗口让不同关键词的采集时间尽量接近。第二道是时间规范化。小红书页面上的时间格式五花八门有的时间是“2小时前”、有的是“昨天”、有的是“03-24”、有的是具体日期。我在清洗脚本里写了一个时间转换函数把相对时间全部换算成actual_date字段。这一步如果漏了后面所有月度聚合都会出问题。第三道是文本标准化。这一块主要是为后续分词做铺垫。要注意的是去表情符号和URL这两类噪声如果不处理会被jieba切成一堆没有意义的碎片。其次是同义词归一化小红书用户对同一品类有无数种叫法“小裙子”“裙装”“连衣裙”“one piece”必须在分词前先统一映射到标准词。不然后面做词频统计的时候“连衣裙”的真实热度会被碎片化趋势判断自然不准。2.3 三级标签体系设计标签体系是我在这个项目里比较花心思的一环。直接对文本做无监督聚类在服饰领域很不可控我的做法是建一套轻量级三级标签体系然后靠关键词映射去匹配。一级标签是服饰大类上装、下装、外套、裙装、鞋靴、配饰。二级标签是具体品类比如上装下面分T恤、衬衫、卫衣、针织衫下装下面分牛仔裤、休闲裤、半身裙裙装下面再分连衣裙、半身裙等等。三级标签是风格词和场景词比如法式、复古、极简、辣妹、通勤、约会、度假。每个标签定义一组关键词映射表清洗时用正则或词典匹配。这套体系的优势一目了然后续的统计维度是可控的不用面对几千个无规则词汇无从下手效果也比纯词频好因为词频反映的是“大家都在写什么词”标签匹配反映的是“这些词背后代表什么品类/风格”。标签匹配这一步做完原始文本数据就变成了可以按时间、品类、风格三个维度切分的数据结构这为后面所有的趋势计算打好了底子。3. 趋势指标计算与可视化实现3.1 热度指数怎么算才靠谱热度指数是这个项目的核心指标。直接统计笔记数量其实是最粗糙的做法因为笔记量大不等于热度高平台算法下很多低质笔记本身就是低互动的。我用的是一个加权热度公式热度指数 0.3 × 点赞数 0.5 × 收藏数 0.2 × 评论数这里权重不是拍脑袋定的主要考虑的是服饰领域的互动特点。收藏权重最高因为服饰笔记有一个核心场景——“先收藏以后照着买”高收藏意味着用户有购买意向是“趋势即将转化为销售”的信号。点赞的互动成本最低权重次之。评论能带来长尾讨论但评论数受随机性影响较大给到0.2就够。计算“品类月度热度”时我取当月该品类下所有笔记的热度指数之和再除以当月的有效笔记数得到“平均单篇热度”。平均值比总和更合理因为不同月份采集到的笔记数量有波动总和会把“发帖量变多”和“单品变火”混为一谈。有了月度热度之后增速的计算用环比。环比增速 (本月热度 - 上月热度) / 上月热度。环比看短期趋势很灵敏但要提醒一句服饰季节性极强3月环比2月大涨可能只是季节轮换不代表某品类真正崛起。更好的做法是同时看同比但小红书数据最多往回滚动一年受限于数据量同比通常只能做一个弱参考。3.2 图表组合趋势分析的三类主视图这个项目的可视化部分我最终沉淀了三类图表分别回答三个不同层面的问题。第一类是词云回答“当下大家在聊什么”。词云我单独生成了一张全量词云和一张分风格词云。分风格词云很有用比如把法式风格相关的笔记单独抽出来看词频能明显看到“碎花”“波点”“茶歇裙”这类特征词而极简风格里出来的则是“剪裁”“质感”“黑白灰”这就是风格差异化最直观的体现。第二类是月度时序折线图回答“趋势是涨是跌”。以月份为横轴某一品类或风格的平均热度指数为纵轴画折线。图上叠加了整体笔记量的柱状图这样可以看到“该品类讨论量”和“该品类单篇爆发力”两个维度。这里有一个值得说的经验原始折线如果波动太大可以先做三期移动平均再绘图趋势会更清晰但报告里要保留原始曲线避免被质疑“数据被过度平滑”。第三类是热力图回答“品类和风格如何交叉”。横轴是二级品类连衣裙、西装、T恤等纵轴是风格词法式、复古、极简、通勤色块深浅表示热度指数大小。这张图是整个分析里信息量最大的因为它能直接看出“法式连衣裙”是红海“复古西装”可能还有机会这种交叉洞察是单一维度的图给不了的。下面给一个简化版的数据处理和可视化核心代码完整的采集脚本篇幅太长就不贴了重点看处理思路。import pandas as pd import jieba # 停用词表自行补充 stopwords set(open(stopwords.txt, encodingutf-8).read().split()) # 同义词映射表 synonyms {小裙子: 连衣裙, 裙装: 连衣裙, onepiece: 连衣裙, 短外套: 西装外套, 小西装: 西装外套} def clean_text(text): # 去除URL和emoji text re.sub(rhttp\S, , text) text re.sub(r\[.*?\], , text) # 同义词归一化 for k, v in synonyms.items(): text text.replace(k, v) return text # jieba自定义词库确保服饰词汇被正确切分 jieba.load_userdict(fashion_words.txt) def word_freq(text_series, top_n50): counter {} for t in text_series: words jieba.lcut(clean_text(t)) for w in words: w w.strip() if w and len(w) 2 and w not in stopwords: counter[w] counter.get(w, 0) 1 return sorted(counter.items(), keylambda x: x[1], reverseTrue)[:top_n]# 热度指数计算和月度聚合 df[hot_score] 0.3 * df[like_count] 0.5 * df[collect_count] 0.2 * df[comment_count] df[month] pd.to_datetime(df[publish_date]).dt.to_period(M) monthly df.groupby([month, category]).apply( lambda g: pd.Series({ avg_hot: g[hot_score].mean(), note_count: len(g) }) ).reset_index()词云的生成我单独强调一句直接调wordcloud库很容易踩中文乱码的坑必须指定中文字体路径例如C:\Windows\Fonts\msyh.ttc不指定的话画出来就是一堆方块。还有wordcloud默认会把“穿搭”“今日”这类高频词画得特别大几乎占满整张图所以停用词表一定要下狠手把这类无信息量的词全部滤掉。4. 实战中的高频问题与排查技巧4.1 反爬策略与请求异常这个项目里遇到最多的问题在网络请求阶段。最常见的现象是采集跑到一半连续出现空结果或请求被重定向通常是因为短时间请求太频繁触发了平台限制。我的处理方案是单次请求强制随机延时3到5秒随机切换User-Agent每个关键词采集完成后停60秒再开始下一个。这套策略实测下来非常稳但不保证永远有效平台策略随时会变。另外要做好什么日志。每个批次采集要在控制台输出当前进度、已获取条数、异常信息同时把这些写进本地日志文件。一旦中途中断至少知道断在哪个关键词不用从头跑。用try-except包裹请求捕获异常后先记录再休眠重试重试两次还不行就跳过千万别让单条请求失败拖垮整个批次。4.2 分词结果不符合预期jieba分词在服饰领域表现确实一般主要问题是专业词汇切分错误。比如“茶歇裙”会被切成“茶歇”和“裙”“法式复古”会被切成“法式”和“复古”这其实还好但“泡泡袖”切成“泡”“泡袖”就很麻烦了。解决方法分两步第一步加载自定义词典把所有服饰特征词按词写入fashion_words.txt第二步分完词之后跑一遍结果抽样检查随机抽200条文本看分词结果把切错的词补进词典。这一步手动操作大概要跑两三轮效果比任何调参都明显。4.3 图表错乱和中文字体问题可视化阶段的经典问题是中文字体缺失。默认字体渲染中文会出现方框或乱码在所有plt绘制前加两行代码plt.rcParams[font.sans-serif] [Microsoft YaHei] plt.rcParams[axes.unicode_minus] False在macOS上把Microsoft YaHei换成PingFang SC或Arial Unicode MS就行。另一个要注意的是seaborn在绘制热力图时默认显示的数值位数太多可以用annot_kws控制字号再用fmt.0f把数据格式化成整数图面会干净很多。4.4 数据质量问题注意“爆款偏差”最后说一个数据质量上的大坑。小红书上的笔记互动数据是长尾分布少数爆款笔记贡献了绝大多数点赞大多数笔记的点赞也就几十几百。如果直接用平均热度这一刻的月均值会往爆款方向严重偏移而爆款的偶然性往往很大。所以我在计算月度趋势时同时统计了中位数并把中位数作为辅助参考。如果均值和中位数走向一致说明趋势是整体性的如果两者背离说明只是个别爆款带动的波动这两者反映的内容挖掘价值差异很大。我在实际做报告时会把“均值-中位数是否存在剧烈分化”直接作为数据可信度评估的一条标准。4.5 分析结论的置信度判断做这种外部平台趋势分析必须时刻提醒自己分析的是“公开可见笔记”的样本不是平台全量数据。被算法推荐到前排的笔记本身就有曝光偏见同时搜索结果还会受排序策略影响。所以我给结论加了一条规则某个趋势要被确认为有效至少满足两个条件——连续两个周期同向变化同时品类笔记量不少于30篇。单一月份、小样本量下的波动不算趋势只是噪声。这个置信度判断规则在项目落地之后帮了大忙避免了好几次被偶然波动带偏的判断。5. 从数据到商业结论的落地方法5.1 趋势数据到底怎么指导业务分析做完了图表也出了一堆但很多人卡在最后一步怎么从数据里读出结论并指导决策。我习惯把结论用三句话规定下来什么品类在涨、什么风格在退、什么组合是新出现的。“什么品类在涨”看环比增速排名找连续两期排名上升的品类“什么风格在退”看风格词的词频和热度变化比如“复古风”连续三个月占比下滑“什么组合是新出现的”这个最有趣去看标签共现里新出现的组合。我之前某个模拟项目里就发现“山系”和“通勤”两个风格词在某两个月里共现次数急速增多而人群逻辑确实是“都市人群开始把户外元素融入日常穿搭”这就能支撑一个内容选题的立项。还有个容易被忽略的分析维度是互动结构。同样热度指数下某品类的收藏率明显高于点赞率说明这个品类是“被种草”型内容用户看完会存下来以备后用这类品类的商业转化潜力更大。反之评论占比高的品类更多是话题讨论型话题热度来得快去得也快。这个互动结构指标在选品决策中有很强的参考价值。5.2 后续可以扩展的方向这个项目跑通之后扩展空间其实很大。最直接的扩展是把数据接入价格信息小红书笔记文本里经常提到“百元内”“千元质感”如果能抽取出价格带就能分析不同热度品类对应的价格区间。另一个方向是做时间序列的预测基于Facebook Prophet或者简单的ARIMA对品类热度做近月预测给供应链备货做参考。还有一个方向是做词频的语义网络分析用共现关系画出风格特征词的关联图这样能看到完整风格趋势背后的词群演化过程而不仅仅是单独的几个词。最后的经验总结项目跑完之后我自己最大的体会是趋势分析的瓶颈从来不在代码而在对数据的理解。同样的数据直接统计词频和做了标签映射之后统计热度指数结果可能完全不一样。上个月我还用这套流程把一个模拟服饰品牌的选品报告完整跑了一遍前前后后也就用了一个晚上。工具只是工具真正值钱的是你定义指标的方式和对数据的敏感度。最后分享两个小技巧。第一个是采集脚本一定要加断点续跑能力把“已抓取ID列表”存下来每次启动时读取这个集合做过滤不然中途断了一命呜呼从头再来非常崩溃。第二个是数据可视化时保存图片统一用高DPI格式也就是dpi300不然放在PPT里一看全是锯齿。这些细节单个看都不起眼但在真实项目里正是这些细节决定了你的分析结果能不能真正被人信任。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑