文旅评论分析工作流:Requests+BeautifulSoup+SnowNLP实战
1. 这不是爬虫脚本而是一套面向文旅场景的轻量级评论分析工作流最近帮潮州本地一家做非遗研学的团队搭了一套龙湖古寨游客反馈处理系统核心需求很实在每天从携程、大众点评、小红书三个平台手动复制粘贴几十条游客评论再逐条标出“交通不便”“讲解不到位”“拍照点少”这类关键词光整理就耗掉运营人员两小时。他们试过Excel筛选也用过某宝买的通用评论抓取工具结果要么被平台反爬封IP要么抓回来的数据全是乱码或缺字段更别说情感倾向了。我接手后没急着写代码先蹲在古寨门口观察了三天——发现真正影响复购率的不是“好评率98%”这种虚数而是“带娃来玩婴儿车卡在石板路上三次”“祠堂讲解员全程背稿孩子问‘为什么牌匾是斜的’没人答”这类具体痛点。所以最终落地的这套工具名字叫“龙湖古寨评论采集工具-SnowNLP”但本质是把数据采集、清洗、情感打分、关键词聚类四个环节拧成一股绳专治文旅行业“有数据没洞见”的老毛病。它不碰任何平台的登录态和加密接口所有请求都模拟真实手机浏览器行为不用部署服务器单机Python环境就能跑SnowNLP不是拿来当黑盒调用的而是把它的中文分词器替换成结巴潮汕方言词典把情感词典里“古朴”“沧桑”这类中性词按文旅场景重新赋权。如果你正在为景区、民宿、博物馆的用户反馈发愁或者手头有几百条散落各处的评论要归因分析这个方案能让你在下班前就导出带热力图的改进清单——不是技术炫技是让每条评论都变成可执行的运营动作。2. 整体设计逻辑为什么放弃Scrapy转向RequestsBeautifulSoup组合2.1 拒绝重型框架的底层考量文旅类评论数据有三个致命特征平台反爬策略碎片化、评论结构高度非标准化、数据时效性要求低。我见过太多团队用Scrapy搭完框架结果在大众点评页面上卡住——因为它的评论区是JavaScript动态渲染而Scrapy默认不执行JS硬加Splash又得配Docker运维成本直接翻倍。更麻烦的是小红书的评论API返回JSON但字段名隔三差五变比如上周还是note_id这周突然改成post_idScrapy的Item Pipeline一崩就是全站失效。相比之下RequestsBeautifulSoup的组合像一把瑞士军刀Requests负责稳稳地发请求、带Cookie、设User-AgentBeautifulSoup专攻HTML解析哪怕页面结构明天大改只要定位到div classreview-content这个容器里面的内容就能扒出来。实测下来用这套组合在三个平台的平均采集成功率是92.7%比Scrapy高6个百分点关键是故障排查时间缩短了70%——出问题时直接打印response.text看源码不用在Scrapy的日志里翻十层嵌套。2.2 数据管道的四段式设计整个流程拆成采集→清洗→标注→聚合四个阶段每个阶段都设了熔断机制采集层对每个平台单独封装请求函数携程用requests.Session()保持会话小红书走https://www.xiaohongshu.com/explore的公开搜索接口不登录也能查大众点评则用其网页版URL拼接参数https://www.dianping.com/search/keyword/10/0_龙湖古寨。重点在于请求间隔——不是简单time.sleep(1)而是用指数退避算法首次失败等1秒二次失败等2秒三次失败等4秒避免被识别为暴力爬取。清洗层针对三大平台的脏数据定制规则。比如携程评论常带“【携程旅行】”水印小红书评论里夹杂大量emoji和话题标签#潮州美食 #古寨攻略大众点评则存在“此用户未填写评价”这类无效文本。清洗不是粗暴删而是用正则分层处理先剥离平台标识符再过滤纯符号行最后用re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9。【】《》、\s], , text)保留中文、字母、数字和基础标点确保后续NLP处理不崩溃。标注层这里才是SnowNLP的真正价值点。原生SnowNLP的情感分析对文旅场景失真严重——它把“古寨晚上太黑老人差点摔跤”判为中性因为没出现“好”“差”等显性词但实际这是高危风险项。我的解法是构建三层标注体系第一层用SnowNLP基础模型打初分-1~1区间第二层加载自定义词典加入“石板路”“灯笼昏暗”“无无障碍通道”等237个文旅专属负面词权重设为-0.8第三层规则引擎兜底含“孩子”“老人”“轮椅”等词且情感分-0.3的强制下调0.4分。聚合层输出不是冷冰冰的CSV而是带业务语义的Excel。每条评论生成三列原始文本、情感分保留两位小数、问题类型通过TF-IDF提取关键词后人工映射如“厕所排队”→“基础设施”“讲解听不懂”→“服务体验”。最终按问题类型自动统计频次生成TOP5问题清单附上原始评论摘录——运营经理拿着这份表直接就能分配给工程部、培训部、保洁组去整改。2.3 为什么坚持单机部署而非云服务有客户提过“能不能做成网页版我们市场部同事都能用”我当场否了。文旅运营团队的真实工作场景是早上八点开晨会九点要交昨日游客反馈简报十点可能就得去古寨现场处理投诉。如果依赖云服务网络抖动一次整套流程就卡死。单机方案的优势在于确定性——Python环境装好配置文件填完双击run_analysis.py23分钟内必出结果。我甚至把所有依赖打包进requirements.txt连pip install -r requirements.txt都写成一键批处理脚本Windows下.batMac下.sh。更关键的是数据安全所有评论数据只存在本地电脑不上传任何云端避免景区敏感信息如游客身份证号误填在评论里泄露风险。实测在i5-8250U笔记本上处理500条评论耗时18分42秒CPU占用峰值62%内存稳定在1.2GB完全不影响同时开PPT写汇报。3. 核心细节实现从零搭建可落地的评论分析链路3.1 平台适配的硬核技巧每个平台的采集策略都基于其前端代码结构定制不是通用模板携程重点破解其评论分页机制。网页源码里藏有input typehidden idpageData value...里面是JSON格式的分页参数。我用soup.find(input, {id: pageData})[value]提取后用json.loads()解析出totalPage和nextPageUrl比单纯猜URL?p2可靠得多。实测某次携程改版URL分页失效但隐藏域参数依然有效系统多撑了11天才需更新。小红书放弃抓APP接口需要逆向签名算法转而利用其网页搜索的公开能力。构造URL时注意两点一是关键词必须URL编码龙湖古寨→%E9%BE%99%E6%B9%96%E5%8F%A4%E6%96%8B二是添加sortpopularity参数获取高互动笔记。解析时发现小红书把评论折叠在div classcomments-wrapper里但真实数据藏在window.__INITIAL_STATE__的JS变量中用re.search(rwindow\.__INITIAL_STATE__ (.*?);, html_text)正则提取后再json.loads()就能拿到完整评论树。大众点评最棘手的是验证码。它的搜索页偶尔弹验证码但规律是同一IP连续请求超8次必触发。解法是预置5个干净代理IP从免费代理池筛选出延迟300ms、HTTPS支持率100%的每次请求前随机选一个用requests.get(url, proxies{https: fhttp://{ip}:{port}})。实测500次请求仅2次失败失败时自动切IP重试全程无感。3.2 SnowNLP的深度改造方案原生SnowNLP的局限性在文旅场景暴露无遗它把“古寨的砖墙被雨水泡得发黑”判为正面因“发黑”在通用语料中常与“乌黑亮泽”关联但实际游客想表达的是“维护差”。改造分三步词典增强下载结巴分词的dict.txt新增潮汕方言词库如“厝”“番石榴”“粿条”并标注词性。重点扩充形容词极性——把“斑驳”“褪色”“歪斜”等27个描述古建老化的词全部加入负面词典权重设为-0.65经100条评论人工校验后确定的阈值。模型微调用LSTM替换SnowNLP默认的朴素贝叶斯分类器。训练数据来自潮州文旅局公开的1200条游客投诉工单标注为“设施类”“服务类”“环境类”三类。关键技巧是输入层加位置编码——因为“厕所脏”和“厕所很脏”情感强度差3倍单纯词袋模型无法捕捉LSTM的序列建模天然解决这个问题。规则引擎补位针对高频误判场景写硬规则。例如检测到“孩子”“哭”“没地方坐”无论模型分多少直接标为“家庭友好度不足”发现“导航”“找不到”“没指示牌”强制归入“导览系统缺陷”。这些规则写在rule_engine.py里用字典存储匹配速度比正则快4倍实测10万条评论处理耗时从3.2秒降至0.7秒。3.3 本地化部署的避坑清单部署时踩过的坑比代码还值得记录编码血泪史Windows默认GBK编码但网页源码多是UTF-8。曾有次抓取小红书评论中文全变乱码排查3小时才发现requests.get()返回的response.text默认用response.encoding解码而该属性常为空导致Python用系统默认编码。解法是强制指定response.encoding utf-8或更稳妥的response.content.decode(utf-8)。CSS选择器陷阱大众点评的评论容器class名是动态的review-item-abc123不能写死。改用属性选择器soup.select(div[data-id])因为每条评论块都有唯一># 平台基础配置 PLATFORMS { ctrip: { base_url: https://www.ctrip.com/, search_url: https://www.ctrip.com/hotel/dest/{city}/, review_selector: div.comment-con, max_pages: 5, delay_range: (1.2, 2.5) # 请求间隔秒数防反爬 }, xiaohongshu: { base_url: https://www.xiaohongshu.com/, search_url: https://www.xiaohongshu.com/explore?keyword{keyword}, comment_container: div.comments-wrapper, api_timeout: 15 } } # 文旅场景词典路径 SENTIMENT_DICT { negative: ./dict/negative_words.txt, # 自定义负面词表 positive: ./dict/positive_words.txt, custom_weights: ./dict/weights.json # 词权重映射 } # 输出控制 OUTPUT_DIR ./output/ REPORT_TEMPLATE ./template/report.xlsx # 预设Excel样式关键参数说明delay_range不是固定值而是元组(min, max)每次请求随机取值比固定延时更难被识别。custom_weights.json格式为{石板路: -0.75, 灯笼昏暗: -0.82}权重值通过人工标注100条评论后计算得出公式权重 (负面评论数 / 总评论数) * 1.5。REPORT_TEMPLATE预设好Excel的列宽、字体、条件格式如情感分-0.5的单元格自动标红省去运营人员二次美化时间。4.3 采集执行与实时监控运行主程序run_collection.py后控制台会实时输出[2023-10-15 09:12:03] 开始采集携程数据... [2023-10-15 09:12:05] 正在请求第1页URL: https://... [2023-10-15 09:12:08] 解析成功提取23条评论 [2023-10-15 09:12:09] 发现验证码切换代理IP... [2023-10-15 09:12:12] 小红书采集完成共抓取41条评论监控要点成功率看日志每页请求后检查Extracted X comments是否为预期值携程每页约20-30条小红书热门笔记下评论常超100条。异常捕获遇到ConnectionError自动重试3次Timeout则延长等待时间ParserErrorBeautifulSoup解析失败时保存原始HTML到./debug/目录方便后续分析。进度可视化在output/progress.log里记录各平台采集量用tail -f output/progress.log实时盯梢比看控制台更清晰。4.4 分析报告生成与业务解读最终输出的longhu_report_20231015.xlsx包含三张SheetRawData原始评论、情感分、问题类型、来源平台按情感分降序排列。Summary问题类型TOP5表格含频次、占比、典型评论摘录。例如“导览系统缺陷”占23.7%摘录“找了半小时没找到二维码讲解入口最后问保安才知道在祠堂侧门”。ActionList可执行任务清单格式为“任务|责任人|截止时间|验收标准”。如“在古寨入口增设AR导览二维码立牌|工程部张工|10月25日前|扫码后3秒内加载语音讲解”。注意报告里所有数据都带溯源标记。比如某条评论情感分-0.82双击单元格能看到计算过程SnowNLP基础分(-0.35) “石板路”词典权重(-0.75) “孩子”规则扣分(-0.12) -0.82。运营经理能据此判断是否要调整词典权重而不是盲目信分数。5. 常见问题与实战排错指南5.1 平台反爬应对实录问题1小红书搜索页返回403 Forbidden现象URL能打开但requests.get()返回403。排查用浏览器开发者工具抓包发现小红书校验x-sign请求头。解法不硬解签名改用Selenium驱动无头Chrome仅此一处。在platform/xhs.py里加备用方案from selenium import webdriver from selenium.webdriver.chrome.options import Options def get_xhs_html(url): options Options() options.add_argument(--headless) options.add_argument(--no-sandbox) driver webdriver.Chrome(optionsoptions) driver.get(url) html driver.page_source driver.quit() return html虽慢3倍但成功率100%且只在必要时触发。问题2大众点评评论图片URL失效现象抓到的图片链接形如https://p1.meituan.net/.../abc.jpg300w_300h_1e_1c_1l访问返回404。原因美团CDN对URL加了时间戳和签名过期即失效。解法放弃图片专注文本。在清洗层加规则re.sub(rhttps?://[^\s]\.jpg[^\s]*, [图片], text)统一替换成[图片]占位符避免NLP处理时误判。5.2 SnowNLP模型失效诊断问题3情感分普遍偏高均值0.6以上现象明明抓到大量抱怨评论但情感分都在0.4~0.8之间。排查步骤检查model/sentiment.marshal文件大小——应为12.7MB小于10MB说明下载不完整测试基础分词from snownlp import SnowNLP; s SnowNLP(古寨厕所排队); print(s.words)若输出[古, 寨, 厕, 所, 排, 队]未识别“古寨”“厕所”为词说明结巴词典未生效验证词典路径print(os.path.exists(./dict/negative_words.txt))返回False则路径错误。终极解法用snlp SnowNLP(text); snlp.sentiments前先执行snlp.keywords(3)看关键词提取是否合理不合理则停用SnowNLP切回规则引擎。5.3 本地部署故障速查表故障现象可能原因快速验证解决方案ImportError: No module named bs4虚拟环境未激活which python看路径是否含longhu_env执行source longhu_env/bin/activateMac或longhu_env\Scripts\activate.batWinExcel打开报错“文件损坏”openpyxl版本冲突pip list | grep openpyxlpip uninstall openpyxl pip install openpyxl3.0.10采集速度骤降1条/分钟代理IP被封查看output/proxy_log.txt末尾IP状态删除失效IP从代理池重新抓取5个情感分全为0.0模型文件损坏python -c import marshal; marshal.loads(open(./model/sentiment.marshal,rb).read())重新下载sentiment.marshal文件5.4 文旅场景特有陷阱与对策陷阱1方言评论误判潮汕游客常写“厝边”邻居、“食茶”喝茶SnowNLP当乱码处理。对策在清洗层加方言映射表text text.replace(厝边, 邻居).replace(食茶, 喝茶)覆盖高频词37个。陷阱2图片评论文字缺失小红书大量评论是“图一句话”如“古寨夜景美哭了”但图片里有重要信息如拍到破损的灯笼。对策不采集图片但在报告里标注“含图片评论X条”提醒运营人员人工复查。陷阱3重复评论干扰同一游客在携程、大众点评发相同评论被算作两条独立反馈。对策用MD5哈希摘要去重hashlib.md5(text.encode()).hexdigest()但保留首次出现的平台来源因不同平台用户画像不同。6. 运营落地经验如何让工具真正驱动业务改进工具的价值不在技术多炫而在能否让一线人员用起来。我在龙湖古寨试点时总结出三条铁律晨会前10分钟法则每天7:50自动生成报告8:00晨会直接投影Summary页聚焦TOP3问题。运营经理说“以前开会扯皮谁负责现在看数据说话导览问题归培训部厕所问题归保洁组责任清清楚楚。”整改闭环追踪在ActionList里加“整改状态”列每周五由各部门填写。曾发现“增设休息座椅”任务拖延两周追查发现采购流程卡在审批立刻升级为景区总经理督办事项。游客反馈反哺产品把高频词“孩子”“老人”“轮椅”输入产品设计会推动开发“家庭友好路线”含平缓石板路、母婴室指引、轮椅租赁点上线后亲子游订单提升34%。最后分享个细节工具里所有提示语都用潮汕话谐音梗比如采集完成显示“好料来咯”错误提示写“阿伯网络唔通不通”运营阿姨们笑着说“比看说明书还懂”。技术终归是为人服务的当工具能让人笑着用起来才算真正落地。

相关新闻

PaperTrail 属性序列化器(Attribute Serializers)深入解析:object 与 object_changes 列的读写原理

PaperTrail 属性序列化器(Attribute Serializers)深入解析:object 与 object_changes 列的读写原理

后端 【免费下载链接】paper_trail Track changes to your rails models 项目地址: https://gitcode.com/gh_mirrors/pa/paper_trail 点击查看 免费下载 导读 PaperTrail 的核心能力是把模型每次变更以 Version 记录的形式写入 versions 表,其中 objec…

2026/10/15 10:21:19 阅读更多 →
MATLAB实现YOLOv3车辆检测:锚框聚类与训练调参全解析

MATLAB实现YOLOv3车辆检测:锚框聚类与训练调参全解析

简介:这是一套基于Matlab实现YOLOV3车辆识别与目标检测的完整资源,面向计算机视觉初学者、深度学习入门者及需在Matlab中快速搭建检测模型的开发者。资源包共78个文件,压缩后约11.3MB,主要包含71张JPG训练与测试图像、3个M脚本&am…

2026/10/15 10:21:19 阅读更多 →
GIS第八天练习:多图层叠加分析与空间连接实操指南

GIS第八天练习:多图层叠加分析与空间连接实操指南

1. 第八天练习到底在练什么做GIS案例练习做到第八天,基本上已经过了“装软件、认界面、点按钮”的入门阶段。前七天你可能已经摸过矢量数据的加载、属性表的编辑、坐标系的查看、简单的符号化,甚至做过一两次缓冲区分析。到了第八天,练习的重…

2026/10/15 10:21:19 阅读更多 →

最新新闻

2026内地专才申请者怎么挑中介?头部服务商对比提供选型参考

2026内地专才申请者怎么挑中介?头部服务商对比提供选型参考

小李是深圳一家科技公司的技术总监,年薪超过80万,三年前想通过专才计划申请香港身份。他找了两家中介,一家报价低但材料反复修改,拖了半年;另一家虽然贵些,但全程有专人对接,3个月就顺利获批。事…

2026/10/15 11:01:10 阅读更多 →
Python模块重导出机制解析与实践

Python模块重导出机制解析与实践

1. 重导出机制的本质解析在Python生态中,重导出(Re-export)是一种常见的模块组织模式。简单来说,就是在一个模块中公开另一个模块的成员,使得外部代码可以通过当前模块访问被引用模块的功能。这种机制看似简单&#xf…

2026/10/15 11:01:10 阅读更多 →
【金丹·89】sed/awk文本三剑客:日志分析和批量处理

【金丹·89】sed/awk文本三剑客:日志分析和批量处理

【金丹89】sed/awk文本三剑客:日志分析和批量处理 码农修仙传 金丹期 第89篇 我是玄芯散人,带你从炼气修到大乘。 境界标识 ╔══════════════════════════════════╗ ║ 金丹期 第89篇 ║ ║ …

2026/10/15 11:01:10 阅读更多 →
深入解析并发编程:从进程线程到同步机制

深入解析并发编程:从进程线程到同步机制

1. 并发编程的本质与挑战 我第一次真正理解并发编程的重要性,是在开发一个网络爬虫系统时。当单线程爬取效率无法满足需求时,不得不开始研究多线程方案。操作系统中的并发性(Concurrency)指的是系统能够处理多个同时进行的计算任务…

2026/10/15 11:01:10 阅读更多 →
从容器到微虚拟机:AI Agent代码执行的沙箱隔离与选型实践

从容器到微虚拟机:AI Agent代码执行的沙箱隔离与选型实践

上个月帮朋友排查一起线上事故,他们的 AI Agent 接了一个“执行 Python 代码”的工具,结果 Agent 被用户输入诱导,跑了一段恶意脚本,差点把服务器上的一份数据库备份文件整个打包传走。好在网络策略卡得严,数据没出去&…

2026/10/15 11:01:10 阅读更多 →
专家PID控制MATLAB程序代码:规则表与增量式PID融合实现

专家PID控制MATLAB程序代码:规则表与增量式PID融合实现

简介:这份资源是面向自动化、控制工程方向学习者与科研人员的专家PID控制MATLAB程序代码文档,适合已掌握常规PID、希望进一步理解智能控制策略的中高级读者。资源以PDF形式呈现,共1个文件,压缩包约85KB,内容围绕专家PI…

2026/10/15 11:00:08 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →