尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
小红书爬虫源码解析:Python数据采集与反爬避坑指南
简介这套基于Python编写的小红书爬虫源码专为计算机相关专业学生毕业设计及数据采集入门者设计聚焦社交媒体内容挖掘场景。资源压缩包共1080个文件整体仅2.55MB以js、ts、json、md等类型为主js/ts多用于前端自动化或辅助脚本json存放配置与数据样例md为说明文档py文件则承载搜索、首页、用户资料等核心爬虫逻辑。目录中除主要模块外还包含.gitignore、README及若干配置文件结构清晰便于二次开发。已有1873人学习下载。下载后即可直接运行通过实际操作可深入理解网络请求、页面解析、数据存储等关键技术搜索、主页、个人资料等模块拆分明确适合作为课程项目或毕业设计的基础框架也方便在此基础上扩展数据分析、机器学习等研究方向。注意使用时需遵守平台条款与相关法规合理控制请求频率。1. 小红书爬虫源码到底能做什么一个可运行的Python数据采集起点毕业论文想分析小红书上的内容趋势最尴尬的一步往往不是算法而是没有数据。你搜到的小红书爬虫源码一般就是一套用Python写好的采集脚本把分享短链解析成笔记ID抓详情页里嵌着的JSON把标题、正文、点赞数和图片地址提取出来按笔记ID存成CSV或JSON。代码拿到手后装好依赖、填上Cookie就能跑适合做毕业设计的数据采集环节也能用来做小红书图片批量提取、内容选题的量化验证。需要先说清边界它面向公开可见的笔记内容不做登录态自动化、不碰私信和未公开信息它依赖平台页面结构字段或者风控策略一变代码就需要跟着改。这篇笔记就把它的请求链路、运行参数、高频坑和改造方向拆开讲。2. 源码在爬什么公开笔记的请求链路与三个解析入口想读懂一套爬虫源码别急着看代码先把目标站点的一次完整访问路径走通。小红书这套爬虫的典型链路是分享短链 → 重定向到笔记详情页 → 从HTML中抠出JSON → 解析正文与图片列表 → 下载图片并落盘。下面三个入口是这套源码最常出现的解析位置也是你动手改代码时最先碰到的地方。2.1 分享链接解析出笔记ID短链重定向与iOS卡片跳转的同一入口小红书的分享动作有两个形态在iOS里点“复制链接”拿到的是带scheme的卡片跳转地址格式类似xhsdiscover://item/笔记ID发到微信或浏览器里打开的则是https://xhslink.cn/o/xxxxxx这种短链。爬虫源码通常会把这两种输入统一处理最终都还原成那个24位的十六进制笔记ID因为详情页只认这个ID。短链解析在代码里一般长这样import re import requests def resolve_share_url(short_url: str) - str: # 跟随重定向拿到真实地址allow_redirectsTrue 必须保留 resp requests.get( short_url, allow_redirectsTrue, timeout10, headers{User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X)}, ) real_url resp.url # 详情页标准路径: /discovery/item/{笔记ID} match re.search(r/discovery/item/([0-9a-f]), real_url) if not match: raise ValueError(f无法从 {real_url} 中解析笔记ID) return match.group(1)resolve_share_url的核心是allow_redirectsTrue因为短链本身就是一次302跳转关掉重定向就拿不到最终地址。timeout10是给DNS解析和连接阶段兜底避免一个坏链接卡死整个脚本。正则里的[0-9a-f]限定16进制字符比\w更严格能过滤掉URL里其他参数。如果输入的是xhsdiscover://开头的scheme把正则改成xhsdiscover://item/([0-9a-f])即可逻辑完全一样。这里有个细节分享链接有时会带?app_platform之类的尾巴不影响ID提取但会干扰部分按“结尾匹配”写的解析代码。我一般会先用urlparse把query剥掉只保留path段再做正则避免用户从不同端复制粘贴导致解析失败。2.2 详情页里的“黑匣子”从HTML中抠出笔记JSON拿到笔记ID后爬虫要请求https://www.xiaohongshu.com/discovery/item/{note_id}。这个页面在外观上是图文但真正有价值的数据都在一段script标签内通常挂在window.__INITIAL_STATE__这个全局变量下。源码做的事就是“把这段文本抠出来再用json.loads变成Python字典”解析逻辑并不神秘坑全在正则怎么写。import json import re import requests def fetch_note_json(note_id: str, headers: dict) - dict: url fhttps://www.xiaohongshu.com/discovery/item/{note_id} resp requests.get(url, headersheaders, timeout10) resp.encoding utf-8 # 非贪婪匹配 re.S兼容换行符一步到位取出大JSON m re.search(rwindow\.__INITIAL_STATE__\s*\s*({.*?})/script, resp.text, re.S) if not m: return {} state json.loads(m.group(1)) # 笔记详情一般在 note.noteDetailMap 里按 noteId 索引 return state.get(note, {}).get(noteDetailMap, {})正则里的.*?是非贪婪匹配遇到第一个/script就停避免同一个页面里多段script互相污染。re.S让.能匹配换行符否则压缩后的单行HTML可能没事但格式化过的页面直接抓空。取到state之后别急着写死路径先print(list(state.keys()))看顶层有哪些字段因为不同版本页面会把数据放在noteDetailMap、noteData或feed里。源码里写死的路径多半就是作者在当前页面结构下验证过的那个。这层解析只依赖公开页返回的HTML不需要额外接口。只要页面结构不变、Cookie有效这个函数就是整条链路里最稳的一环。2.3 图片批量提取把imageList变成本地文件的关键参数笔记JSON里的note字段下有一个imageList数组每项包含图片地址。字段名常见的两种urlDefault是完整直链直接用就能下载urlPre是前缀需要自己拼接宽高参数比如加?imageView2/2/w/1080控制输出尺寸。小红书图片下载这块源码里最常翻车的地方就是漏带Referer。import os import requests def download_images(image_list: list, note_id: str, out_dir: str) - list: os.makedirs(out_dir, exist_okTrue) saved [] for i, item in enumerate(image_list): url item.get(urlDefault) # urlPre 是前缀需要手动拼上图片处理参数 if not url and item.get(urlPre): url item[urlPre] ?imageView2/2/w/1080 if not url: continue resp requests.get( url, timeout15, headers{ Referer: https://www.xiaohongshu.com/, # 防盗链必带 User-Agent: Mozilla/5.0 ..., }, ) if resp.status_code ! 200: continue # 文件名带上 note_id 和序号避免不同笔记的图片互相覆盖 ext .jpg path os.path.join(out_dir, f{note_id}_{i:02d}{ext}) with open(path, wb) as f: f.write(resp.content) saved.append(path) return savedi:02d用序号补零让图片在文件夹里按顺序排列方便后期人工核对。Referer必须带平台域名图片CDN会校验来源缺失时返回403这段踩坑后面第4章还会展开。视频的逻辑和图片一致只是字段换成了video对象里的url有高清需求时替换urlPre的拼接参数即可。2.4 为什么是requests加正则而不是Scrapy你会看到不少爬虫源码选Scrapy它自带并发、去重、中间件写大规模采集更专业。但这套小红书源码用requests加正则原因也很实在依赖少、链路透明、好调试。毕业设计答辩时你能把每个请求做什么、每段正则为什么这么写讲清楚比甩一个框架抽象层更有说服力。而且Scrapy默认的并发模型拿到小红书这种风控严格的站点上很容易因为请求过快被限流requests单线程配合随机延时反而是长期运行的稳定姿势。后续如果要做搜索词采集或账号维度分析再引入Scrapy也不迟起点越简单越容易排错。3. 让源码在本地跑起来环境、依赖与最小可运行路径“下载即可运行”这句话要拆开看源码不是安装包它不会替你装Python。所谓可运行指装好依赖、填上配置、页面结构没变这三件事都满足。这一章把从空环境到跑出第一份数据的最小路径走一遍步骤缺一不可。3.1 Python版本与依赖安装venv和requests就够了大多数爬虫源码基于Python 3.8到3.11编写如果你为了新版特性装了3.12遇到个别依赖编译报错就换回3.10最省心。安装Python时记得勾选“Add Python to PATH”否则命令行里找不到python这是新手最常见的启动障碍。python3 -m venv venv source venv/bin/activate # Windows 下用 venv\Scripts\activate pip install requests用venv建虚拟环境是好习惯这样项目依赖不会污染系统Python。这套爬虫对第三方库的依赖很少多数只需要requests偶尔加一个lxml没有庞大的框架依赖这也是“下载即可运行”能做到的底气。如果要在别的机器上复现环境装完依赖后执行pip freeze requirements.txt把版本锁进去。3.2 填对config里的HeadersCookie、UA与请求间隔爬虫源码几乎都会有一个配置模块叫config.py或settings.py这是你唯一需要手动动刀的地方。常见的字段就3个User-Agent、Cookie、请求间隔。UA推荐用移动端浏览器标识因为小红书对移动端H5页面的兼容性最稳定返回的HTML结构也最完整。# config.py HEADERS { User-Agent: ( Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1 ), Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9, Cookie: 从浏览器复制来的完整Cookie, } REQUEST_DELAY 2.0 # 每次请求间隔单位秒 TIMEOUT 10 # 单个请求超时 OUTPUT_DIR ./output # 数据与图片输出目录Cookie的获取方式浏览器无痕窗口打开任意一篇公开笔记按F12进入开发者工具在Network面板找到文档请求把请求头里的Cookie整段复制过来。这里有几个参数值得说明REQUEST_DELAY控制请求节奏源码里的默认值通常落在1到3秒太短容易被限流TIMEOUT建议不低于10秒小红书的图片CDN高峰期响应变慢超时设短会误杀正常请求OUTPUT_DIR用相对路径换机器不用改代码。注意Cookie有有效期短则几小时长则几天。跑着跑着突然401优先怀疑Cookie过期重新复制一次即可这不属于代码故障。3.3 main.py骨架把“下载即可运行”拆成可见的四步主程序的结构一般很直白读输入、解析ID、抓详情、落盘。下面是常见的骨架你可以把它当成阅读理解源码的索引。import json import sys import time from config import HEADERS, REQUEST_DELAY, OUTPUT_DIR # 这三个函数分别来自 2.1 / 2.2 / 2.3 的模块 from xhs_parser import resolve_share_url, fetch_note_json, download_images def note_to_dict(note_detail: dict) - dict: note note_detail.get(note, {}) return { note_id: note.get(noteId), title: note.get(title, ).strip(), desc: note.get(desc, ).strip(), like_count: note.get(interactInfo, {}).get(likedCount, 0), image_count: len(note.get(imageList, [])), } def main(share_url: str): note_id resolve_share_url(share_url) # 第一步还原ID detail_map fetch_note_json(note_id, HEADERS) # 第二步抓取详情 if not detail_map: sys.exit(解析到空数据检查Cookie或页面结构) detail detail_map.get(note_id, {}) data note_to_dict(detail) # 第三步整理字段 print(json.dumps(data, ensure_asciiFalse, indent2)) time.sleep(REQUEST_DELAY) # 第4步前先停一下 image_list detail.get(note, {}).get(imageList, []) download_images(image_list, note_id, OUTPUT_DIR /images) # 第四步下载 if __name__ __main__: main(sys.argv[1] if len(sys.argv) 1 else https://xhslink.cn/o/占位短链)这段代码把整套流程压缩成四步每步对应一个独立函数。sys.argv[1]让你能用python main.py 分享链接直接跑如果不传参数就走到默认的占位短链这是源码作者为了方便测试留下的入口。time.sleep(REQUEST_DELAY)放在抓详情和下载图片之间是因为这两个请求落在同一个站点上连续发出容易被识别为脚本行为。3.4 数据落盘JSON、CSV与图片目录的整理导出的数据一般同时存两份JSON保留最完整结构CSV方便Excel打开做后续统计。CSV这里有一个跨平台经典坑用普通utf-8编码写入的文件Excel打开会乱码必须用utf-8-sig。import csv import json from pathlib import Path def save_records(records, output_dir): out Path(output_dir) out.mkdir(parentsTrue, exist_okTrue) # JSON保留全部字段方便程序二次处理 (out / notes.json).write_text( json.dumps(records, ensure_asciiFalse, indent2), encodingutf-8, ) # CSV带 BOM 的 utf-8-sigExcel 直接打开不乱码 with open(out / notes.csv, w, newline, encodingutf-8-sig) as f: writer csv.DictWriter(f, fieldnamesrecords[0].keys()) writer.writeheader() writer.writerows(records) return outfieldnamesrecords[0].keys()会动态取表头不用手动声明每一列。如果采集来的记录字段不一致先做一次字段补齐再写CSV否则DictWriter会直接报KeyError。路径统一用pathlib.Path拼接比字符串 / 安全Windows和Linux都不会出错。到这步你已经拥有了一份结构完整、打开不乱码的本地数据集后续的毕业设计分析就建立在它之上。4. 小红书爬虫的五个高频坑与避坑清单跑通一次不难持续跑一个月才是真问题。这一章的五类坑是按照出现频率从高到低排的我几乎在每份源码的issue里都能看到它们的影子。4.1 shield签名校验失败前端防爬黑匣子的应对现象请求详情页返回HTTP 200但HTML里找不到__INITIAL_STATE__页面源码中出现shield、verify相关字样脚本直接输出空数据。原因小红书前端做了安全技术操作对请求头里的动态参数有校验。固定写死在源码里的旧Header在某次平台更新后就会失效。这是源码“下载后跑不了”的头号原因也最容易让新手误以为代码写错了。解决用浏览器无痕打开同一篇笔记开发者工具里复制当前请求的完整Cookie和User-Agent替换config里的值。如果还不行检查你是不是关掉了重定向详情页需要跟随跳转才能拿到最终HTML。别去研究签名逆向这套对抗没有性价比你的目标是读公开数据不是和风控赛跑。4.2 请求过频触发限流随机延时是血泪经验现象脚本前20条跑得正常第30条开始连续返回403或者空串换手机热点又恢复正常。原因同一IP在短时间内的请求次数超过了风控阈值平台按单位时间请求数限流。这几乎是所有小红书爬虫源码跑批量任务时都会撞上的墙。解决把固定的time.sleep(2)改成随机延时让请求节奏更像人工浏览。import random import time # 2到5秒随机延时避免固定间隔被识别 time.sleep(random.uniform(2, 5))random.uniform(2, 5)每次间隔不重复比固定值效果好很多。并发协程这类优化放到这个站点上只会加速封禁单线程加随机延时才是最稳的长期运行方式。4.3 字段改版导致解析结果为空先打印黑匣子再改代码现象昨天还能解析出desc今天desc为空或者整个JSON结构拿不到代码报TypeError: NoneType object is not subscriptable。原因平台调整了页面里__INITIAL_STATE__的数据结构字段名变了或者把正文挪到了另一层。前端安全技术操作里动态调整字段名是常见的防爬手段之一对爬虫的杀伤力比签名校验还大。解决遇到空数据别急着翻源码先打印原始响应。在fetch_note_json里临时加一行print(resp.text[:500])看返回的是HTML、JSON还是验证页。之后敲定新路径再去改note_to_dict里的字段映射。记住一个原则源码里写死的路径只代表作者下载时的页面状态你要学会自己找路径。4.4 图片下载403防盗链Referer与http替换现象图片URL在浏览器里打开正常脚本下载却全部403resp.status_code等于403且页面是空内容。原因图片CDN校验请求来源缺少平台域名的Referer会被拒绝。另外部分图片地址返回的是http://开头在HTTPS页面里这类请求会被浏览器拦截requests虽然不拦但CDN侧可能拒绝非加密来源。解决下载时固定带上Referer: https://www.xiaohongshu.com/并把URL里的http://强制替换成https://。2.3节代码里已经体现了这个写法实际运行时如果发现某些图还是失败单独打印那个URL复制到浏览器里确认是403还是404403就是防盗链头没带全404则是图片本身被清理了。4.5 Cookie失效早上能跑下午401不是代码坏了现象脚本早晨运行正常下午突然所有请求返回401或302跳转到登录页重启代码也没用。原因Cookie本身有时效或者请求频次触发风控后被平台强制失效。这属于正常现象不是源码逻辑出了问题。解决把Cookie从config抽出来放到单独文件比如cookie.txt脚本启动时读取。失效后只改文件内容不用碰代码逻辑。# config.py def load_cookie() - str: with open(cookie.txt, encodingutf-8) as f: return f.read().strip()线下的Cookie获取方式按3.2节来就行。要特别提醒不要在爬虫脚本里做登录操作登录态自动化涉及的风险比Cookie失效大得多而且和这套源码“只采公开内容”的定位不符。5. 把源码改造成毕业设计重构、清洗与演示要点拿到能跑的源码只是第一步毕业设计要的是你能讲清楚它为什么这么写、还能做什么。这一章讲怎么把一份“别人的作品”变成“你的设计”重点不是重写而是有章法地重构。5.1 用类重构散装函数答辩时最好讲的代码结构散装函数适合跑通但答辩时老师追问“这段逻辑怎么复用”就不好答。把核心能力收拢成一个类状态集中在构造方法里后续扩展搜索、批量采集都只需要加方法。import requests class NoteFetcher: def __init__(self, headers: dict, delay: float 2.0): self.session requests.Session() self.session.headers.update(headers) self.delay delay def resolve_id(self, share_url: str) - str: # 完整代码来自 2.1 节这里省略重复部分 ... def fetch(self, note_id: str) - dict: # 完整代码来自 2.2 节 ... def save(self, records: list) - None: # 完整代码来自 3.4 节 ...requests.Session会复用底层的HTTP连接多次请求时减少TCP握手开销。headers在构造时传入一次后续所有方法共用业务代码里不用到处带参数。答辩时你可以顺着类的三个方法讲resolve_id负责输入归一fetch负责数据获取save负责持久化职责单一逻辑清晰。5.2 做一层数据清洗去重、排序与计数扩展爬虫拿到的原始数据通常有重复项和空值直接做分析会得出错误结论。加一层清洗逻辑是毕业设计里性价比极高的加分项。from typing import List, Dict def clean_records(records: List[Dict]) - List[Dict]: seen set() cleaned [] for r in records: rid r.get(note_id) # 按笔记ID去重保留第一条 if not rid or rid in seen: continue seen.add(rid) # 缺失字段补默认值避免后续统计报错 r[like_count] r.get(like_count, 0) or 0 cleaned.append(r) # 按点赞数倒序排方便观察头部内容 cleaned.sort(keylambda x: x[like_count], reverseTrue) return cleaned去重用set因为查重是O(1)数据量上万也不卡。r.get(like_count, 0) or 0这行同时处理字段不存在和值为None两种场景。排序是为后续的TOP榜单、爆款特征分析做铺垫。如果再引入collections.Counter做标题词频统计整个采集链路就能连上数据分析毕设的完整性会高很多。5.3 写好README让源码真正“下载即可运行”源码可运行的标准是另一个人拿到后按文档能复现。README不用长但要覆盖三件事环境要求、运行步骤、输出物说明。这是很多源码包被评价为“作者自嗨”的分水岭。# 小红书公开笔记采集工具 ## 环境要求 - Python 3.8 及以上 - requests ## 运行步骤 1. 安装依赖pip install -r requirements.txt 2. 打开 config.py填入浏览器复制的 Cookie 3. 运行python main.py 小红书分享链接 ## 输出文件 - output/notes.json完整笔记数据 - output/notes.csv表格视图可用 Excel 打开 - output/images/笔记图片这段README模板可以直接用。步骤里写“分享链接”而不是“笔记ID”是因为短链是普通用户最容易拿到的输入形式。如果还能加一段“常见问题”把第4章的Cookie失效、403图片两个高频坑写进去这份文档就具备了一定的交付质量。5.4 演示时如何验证数据正确性与合规边界答辩演示最怕现场翻车三个细节帮你兜底。第一演示用的数据提前一晚跑好现场不要现抓短链服务或网络波动都可能让流程中断。第二抽3条笔记人工核对打开网页对比标题、点赞数、图片数量这个验证动作本身就是论文里的“数据质量校验”章节。第三主动说明合规边界只采集公开可见的内容不涉及私信、收藏、未公开数据对可能出现个人信息的内容做脱敏处理。这套脚本的设计目标就是公开信息分析把这一点讲清楚反而比藏着掖着更让老师认可。6. 进阶把爬虫做成可配置的命令行小工具走到这一步源码已经能跑、能改、能讲剩下的是把高频调整从“改代码”变成“传参数”。最常见的做法是用argparse接收命令行参数再用一个config.json存运行时变量。import argparse import json def load_config(path: str) - dict: 读取JSON配置文件不存在时返回空字典 try: with open(path, encodingutf-8) as f: return json.load(f) except FileNotFoundError: return {} def main(): parser argparse.ArgumentParser(description小红书公开笔记采集) parser.add_argument(--url, requiredTrue, help小红书分享短链) parser.add_argument(--config, defaultconfig.json, help配置文件路径) parser.add_argument(--delay, typefloat, default2.0, help请求间隔秒数) args parser.parse_args() cfg load_config(args.config) headers cfg.get(headers, {}) delay args.delay if args.delay else cfg.get(delay, 2.0) # 之后把 headers 和 delay 传给 NoteFetcher 即可配套的config.json长这样{ headers: { User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X), Cookie: 粘贴你的Cookie }, delay: 2.0, timeout: 10, output_dir: ./output }这样设计带来的直接好处是Cookie过期时用编辑器改JSON文件就行脚本代码一行不动想批量采集就写一个循环调用命令把不同分享链接传进--url。我最早写这套爬虫时所有配置都硬编码在main里改一次配置要开三次编辑器Cookie换得频繁时特别恼火。后来把配置全部外置虽然只省了几分钟操作但整套代码的维护成本明显下降跑三个月也知道该动哪里。这个选择值得在你动手改造时优先做掉。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

工业4.0时代AI平台选型与应用指南

工业4.0时代AI平台选型与应用指南

1. 工业4.0与AI平台的融合现状工业4.0的核心在于通过数字化技术实现智能制造,而AI平台则是这一转型的关键驱动力。根据麦肯锡2023年全球制造业报告,78%的头部企业已将AI平台纳入生产流程优化体系。但真正具备国际影响力的平台需要满足三个硬指标&#xf…

📅 2026/10/27 23:43:58
编程与英语协同训练:从算法到技术翻译的实战指南

编程与英语协同训练:从算法到技术翻译的实战指南

1. 编程题练习Day17:从基础到实战的每日精进作为一名从业十年的全栈开发者,我始终坚信编程能力的提升离不开持续的系统性训练。Day17的练习设计遵循"夯实基础-突破难点-实战应用"的三段式进阶路径,下面分享我的训练方案和思考逻辑。…

📅 2026/10/27 23:43:58
学术期刊AIGC检测技术与应对策略解析

学术期刊AIGC检测技术与应对策略解析

1. 期刊投稿中的AIGC痕迹识别现状2023年Nature期刊发表的研究显示,全球学术期刊编辑对AI生成内容的平均识别准确率不足35%。这个数据背后反映出一个严峻现实:随着生成式AI工具的普及,学术不端行为正在以更隐蔽的方式渗透进学术出版领域。核心…

📅 2026/10/27 23:43:58
MORE NEWS

更多资讯

📰

Skills不是插件:智能体时代的能力契约范式

1. “Skills”不是功能按钮,而是智能体时代的新型能力封装范式你点开一个AI工具,看到“Add Skill”按钮,下意识以为这是个插件开关——这种理解在2024年已经严重滞后。我带团队落地过7个生产级Agent系统,从金融风控到工业设备巡检…

📰

深度远程启动管理器1.3:PXE批量装机与组播分发避坑指南

简介:《深度远程启动管理器 1.3》面向网络管理员、机房运维人员及希望搭建 PXE 网络启动环境的用户,聚焦局域网内工作站批量引导与远程启动管理。软件遵循 BOOTP 规范,内置 DHCP 与 TFTP 服务,可提供 netboot 网络启动支持&#x…

📰

零下60℃超低温冷库施工关键技术与实操要点

1. 项目概述:为什么零下60℃不是“再低一点”那么简单零下60℃超低温冷库——这个词一出来,很多人第一反应是:“不就是比普通冷冻库更冷一点吗?加厚保温板、换台大冷机不就完了?”我刚入行那会儿也这么想。直到在某高校…

📰

30天Caveman重启实验:原始饮食与自重训练改善代谢健康

提到“caveman”,你脑海里大概会蹦出两个画面:一个是举着石斧、浑身毛茸茸的原始人,在荒野里追着猛犸象跑;另一个是某个聊天群里甩出来的表情包,头发乱糟糟的男人被女朋友吼“你能不能讲点道理”。说实话,我…

📰

caveman哲学:用极简主义对抗工程复杂度,找回掌控感

别小看“caveman”这个标签,它是一套反内卷的工程哲学先说一句大实话:我第一次看到“caveman”这个词是在某个开源项目的README里,作者用这个词调侃自己的代码风格——“写得像个原始人那样简单”。当时我笑了一下就划过去了,直到…

📰

FCOS算法在水下鱼类目标检测中的优化实践

1. 项目背景与核心价值豹纹鳃棘鲈(Plectropomus leopardus)作为珊瑚礁生态系统的关键物种,其种群监测对海洋保护具有重要意义。传统人工观测方式效率低下且成本高昂,而基于FCOS(Fully Convolutional One-Stage&#xf…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬