轻量级数据抓取与清洗:用Python和规则配置打造自动化处理工具

1. 为什么会做"rea"这个项目

"rea"这个名字从一开始就不是什么复杂的单词缩写,它只是我手上这个小工具的一个代号。当时我维护着一个内容站点,每天需要从几个固定的数据源抓取素材,经过人工筛选、格式整理之后再发布到后台。这个流程特别磨人,因为大部分时间都花在重复劳动上:打开网页、复制文本、清掉多余标签、再手工调整成统一格式。明明都是机械操作,却不得不坐在电脑前一个一个处理。我那时候就在想,能不能做一个轻量的小程序,把这些重复动作全部接管过去,让我只做最终审核那一件事。

rea 最初的定位非常朴素:一个能在命令行里跑的、没有界面的数据聚合和处理工具。它从几个指定地址抓取公开数据,按预设规则清洗冗余内容,把结果合并成统一格式,再输出成我需要的文件。听起来不复杂,但真正做起来,里面藏的细节比想象中多得多。比如不同来源的日期格式不一致、标题里掺杂着表情符号或不可见字符、有些页面结构偶尔会变化导致解析失效,这些都属于"打开网页才知道"的问题,不实际跑一遍根本想不到。

我自己的技术背景偏后端的脚本开发,日常用 Python 比较多,所以 rea 的核心语言很自然就选了 Python。这个选择其实没什么悬念,但我在做之前还是认真比对了其他选项:用 Node.js 不是不行,不过对单文件小工具来说,Python 在处理文本和网络请求方面确实更顺手,生态里现成的库也多,不用自己重复造轮子。

做了一段时间后,rea 的角色慢慢从一个"偷懒工具"变成了一个可以复用的基础模块。后来我把它拆成了两部分:一个核心处理引擎和一个可插拔的规则配置。这样设计的好处在于,当我需要接入新数据源时,不用改代码,只需要写一份新的规则文件就行。整个过程非常符合我最初的目标:把这个工具的维护成本降到最低,让使用的人(主要是我自己)不用每次重新学习怎么操作。

2. 技术选型:为什么最后用了这套方案

2.1 从零开始的技术对比与决策

写 rea 之前,我把市面上能用的方案都浏览了一遍。先说抓取这块,很多人会直接上 Playwright、Puppeteer 这类浏览器自动化框架,它们确实能处理 JavaScript 动态渲染的页面,但代价是运行的时候要带一个无头浏览器,内存占用不小,启动速度也慢。我评估了实际要抓的几个数据源,发现大部分内容的正文部分在初始 HTML 里就能拿到,不需要等什么异步请求,更不需要点击交互。这种情况下用浏览器自动化就是杀鸡用牛刀,每次都拖着一整台"虚拟浏览器"跑,完全没有必要。

所以我最终采用了 requests 加解析库的组合。这样网络请求轻量、解析也快,一个页面从抓取到结构化输出只需要几百毫秒,而用浏览器自动化通常要两三秒起步。当然这个方案有它的局限性,遇到那种数据藏在接口里且需要执行 JS 才能触发的页面就无能为力了,但我评估下来,当前场景根本碰不到这种情况,所以不必为了一个用不上的功能牺牲日常使用体验。

解析库的选择我对比过 BeautifulSoup 和 lxml,最后选了 lxml。因为 lxml 的 XPath 支持确实强,可以用一条表达式定位到深层节点,写起来比 BeautifulSoup 逐层查找节点要快得多。当然 BeautifulSoup 的容错性更好,面对不规范的 HTML 不会轻易报错,但我在实测中发现这种容错有时候反而会掩盖结构中真正的问题,让解析结果出现意料之外的偏差。lxml 的严格模式对我们这种定期检查格式固定的数据源来说更合适,出了问题也会更快暴露。

2.2 数据处理与标准库的配合

抓下来的数据不能直接用,必须经过清洗。拿到的原始内容里,常见的污染包括 HTML 标签、内联样式、多余的换行和空白、以及一些从原文复制粘贴时带进来的特殊字符。处理这些我优先用 Python 标准库,只有在标准库搞不定的时候才引入额外依赖。

清洗流程分三步走。第一步是用正则表达式把所有标签剥掉;第二步是把连续空白压缩成单个空格,去掉每一行首尾的多余空格;第三步是对特殊字符做规范化,把全角符号转成半角,把各种引号统一成常规引号。这三步听起来简单,但细节决定了成败。举个很具体的例子:处理全角字符的时候,如果直接做字符串替换,需要列一张很长的映射表,而且总有漏网之鱼。后来我改用 unicodedata.normalize 配合 NFKC 规范化,一步就能把大部分全角符号转成半角,代码简短了很多,维护成本也降下来了。

日期格式的统一也花了不少功夫。不同数据源的日期表达方式千奇百怪,有2023-08-15这样的标准格式,有15 Aug 2023这样的英文缩写,还有2023年08月15日这样的中文格式。我写了一个专门负责日期解析的函数,里面维护了一组常见格式的模板列表,按顺序逐个尝试解析,命中哪个就用哪个,最后统一输出成 ISO 8601 格式。这个过程需要考虑到的边界情况挺多,比如跨年的数据、闰年的 2 月 29 日、以及某些来源会漏掉年份默认是当前年份,这些都需要单独做分支处理。

2.3 与其过度设计,不如直接上手

回过头看这个阶段的决策过程,我得说一个真实的体会:很多技术选型其实是被"听起来更好"的选项带偏的。一提到抓取就想到浏览器自动化,一提到解析就想到大型爬虫框架,但实际需求只是一个每天运行几次的小工具,完全用不着那么重的技术栈。我在做 rea 的过程中反复提醒自己一个原则:能满足需求的最简方案,就是最好的方案。

这让我想起之前维护过的一个内部系统,当时用了全套微服务架构,服务拆分得特别细,每个模块还单独部署,结果运营团队被配置和排障折腾得苦不堪言。后来我们把几个核心服务合并成一个单体应用,部署脚本从几百行缩到几十行,访问速度反而更快了。技术上的"优雅"如果不能转化成实际使用中的流畅,那这种优雅就是自娱自乐。rea 的设计理念从头到尾都在贯彻这个原则。

3. 核心流程的实现细节与实操过程

3.1 整体结构设计与模块划分

我把 rea 拆成了四个模块:请求模块、解析模块、清洗模块和输出模块。每个模块都保持职责单一,彼此之间通过接口通信,不直接访问对方的内部状态。这样做的直接好处是,后续想换用别的请求库或者改用 YAML 作为输出格式,都只需要动对应模块即可,不会引起连锁改动。

请求模块的对外接口就一个函数,传入一个地址,返回经过编码处理的文本内容。这里有一个细节:有些站点对 User-Agent 比较敏感,如果默认的 Python 标识被识别出来,可能会返回异常页面。所以我的默认请求头里会伪装成一个常规浏览器的访问标识,但这仅限于获取正常展示的公开信息,不涉及任何对访问控制的规避行为。解析模块接收文本内容,配合规则配置中的 XPath 表达式,提取出标题、正文、发布日期等结构化字段,返回一个字典。

清洗模块处理的是解析模块传过来的原始字典,核心是上面提到的标签剥离、空白压缩和特殊字符规范化。我在清洗模块里还增加了一个与数据源相关的规则项,比如某个来源会在正文里重复出现站点名称和引导语,这些可以通过一段文本规则来移除。输出模块把最终结果序列化,支持 JSON 和 Markdown 两种格式,由配置决定。

3.2 规则配置的写法与应用

rea 的规则配置我用的是 JSON,因为 Python 标准库就能读,不需要额外引入 YAML 解析器。但 JSON 不支持注释,多写几份规则之后就发现可读性成了问题。后来我在配置结构里增加了一个名为description的字段,专门用来解释当前规则的用途和适用范围,相当于变相实现了注释能力。这种做法虽然简单,但对后续维护帮助很大。

一份典型的数据源规则大概长这样:

{ "source_name": "example_source", "description": "从示例数据源抓取文章信息", "base_url": "https://examples.example.com/list", "list_item": "//div[@class='article-item']", "fields": { "title": "./h2/a/text()", "url": "./h2/a/@href", "date": "./span[@class='date']/text()", "content_preview": "./div[@class='excerpt']//text()" }, "date_formats": [ "%Y-%m-%d", "%Y/%m/%d", "%b %d, %Y" ] }

这里list_item是列表页中每条文章项的 XPath 定位,fields里的表达式都是相对当前条目来做定位的。有一点容易踩坑:用 XPath 提取文本时,如果想要包含子节点的文本,单个text()经常只能取到直接子节点的内容,从而漏掉嵌套在深层元素里的文字。解决办法是用//text()并配合后续的拼接处理,这一条我记得特别清楚,因为早期写的规则里出现过好几回内容缺失问题,排查下来全是这个原因。

3.3 主流程的执行逻辑

rea 的运行入口是一个命令行脚本,流程顺序为:加载配置、逐个抓取列表页、提取条目、对每个条目请求详情页、解析正文字段、清洗、按固定结构输出。整个过程有明确的日志输出,在哪个环节处理哪个条目都记录下来,方便事后回溯。

主流程里有一个关键点:抓取详情页的时候要控制请求频率。我参考的是常见的对公共站点保持礼貌请求间距的做法,在每次抓取前做一次短暂停顿,并且允许通过参数调整。这样既照顾了目标站点的正常运作,也避免了短时间高频请求带来的触发风控的麻烦。

另外,rea 对每个条目的状态进行追踪,记录它是否已经存在于输出文件中。如果同一批数据重复运行,已经存在的条目会直接跳过,不会产生重复内容。实现这个去重机制用了一个非常笨但有效的方法:维护一个标题和来源链接的组合哈希,每处理完一条就记录一次,下次运行时先加载历史记录,命中就直接跳过。这个方法虽然不如数据库方案高大上,但对于单机小工具来说完全够用。

3.4 输出与后续处理的衔接

最终输出文件我选择的是 JSON Lines 格式,每一行是一个独立完整的条目对象。选择这种格式是为了方便后续接入其他工具,比如一些数据统计脚本或者内容发布接口,它们都可以逐行读取,不需要一次性把整个文件载入内存。如果要给人阅读,我也提供了一个转换为 Markdown 的选项,转换逻辑写在一个独立的渲染函数里,核心就是按模板拼接段落。

在实际使用中,我发现 Markdown 输出反而更常用。因为最终目的通常是人工审核,而 Markdown 在编辑器中直接打开就能预览,比 JSON 要直观得多。另外我还加了一个统计汇总功能,每次运行结束会输出本次处理了多少条、成功多少条、失败多少条、耗时多少秒。这些数字虽然简单,但没有它们的话,脚本出了问题人们往往要在事后花不少功夫才能定位。

4. 踩坑记录:日志与排查实录

4.1 编码问题导致的中文乱码

这是第一个跳出来的坑。第一次实测抓取,返回的文本里中文全部变成了乱码字符,整段内容根本没法看。排查之后发现原因是对站点实际使用的编码格式判断有误,按默认情况去解码了。解决方式是在请求模块里先查看响应头中的编码声明,如果不存在或不对,就尝试从页面内容声明中获取,再贴一个常见编码格式做候选列表,逐个尝试解码直到成功为止。压测了一段实际抓取的文本,没有再出现乱码情况。

这里有个经验值得分享:处理编码问题的时候,不要只看响应头,有些站点的响应头没写完整,但 HTML 的<meta>标签里却声明了。把这两处信息结合使用,能覆盖绝大多数情况。如果两处都没有,那就走候选列表逐个试解码,优先用 UTF-8。

4.2 动态加载导致的列表条目缺失

第二个问题比较隐蔽。某个数据源的列表页第一眼看过去,HTML 里确实有文章条目的链接和标题,当时我也没有多想,直接写了对应的 XPath 表达式。结果运行测试时发现,只能拿到前几项,后面的条目全部缺失。检查页面才发现,列表是分批渲染的,页面拉到最底部后才会加载更多数据。由于我用的轻量请求方案根本不会执行这些加载逻辑,所以后续条目根本不会出现在初始 HTML 里。

这个问题的最终解决方案不是上浏览器自动化,而是观察页面运行时发出的网络请求,找到那个真正获取数据列表的接口,然后用 requests 直接去请求这个接口。接口返回的是结构化的 JSON 数据,解析起来比解析 HTML 还方便。这个排查过程让我更加坚定了一点:遇到动态页面,第一反应不该是"上重武器",而是先看看有没有更底层的直接数据通道。

4.3 XPath 表达式误伤相邻内容

第三个问题出现在解析环节。某个数据源的正文正文里总是包含站点侧边栏的文字,XPath 表达式只定位到大容器,没有排除无关区块。解决方式是改写了定位策略,先精确锚定正文主体节点,再在它的范围内做文本抽取,而不是从整个页面文档里找。这个"范围限定"的思路非常关键,基本上后续所有解析规则我都采用了这种方式,准确性确实好了很多。

我在排查这个问题时写了一个小调试函数,只传一个 XPath 表达式和一段 HTML 文本,快速输出当前表达式命中了什么内容。这个调试工具虽然不起眼,但后续极大提速了解析规则的编写,边写边调,不用每次都跑完整套流程。

4.4 特殊符号引发的数据污染

第四类是数据清洗时跟特殊符号较劲的经历。抓取的内容里经常出现网络地址链接、HTML 实体、不可见控制字符等。最开始我完全依赖正则去删,但规则越写越长,很快就维护不动了。后来转向用标准库的html模块处理 HTML 实体,再用 unicodedata 处理不可见字符,代码量一下子少了一大截。剩余漏网的脏数据,依靠清洗模块里的"重写规则"来做兜底处理。

每次遇到新的异常,我习惯把它总结成一条新的规则追加进配置,而不是临时改代码。时间久了,rea 的清洗规则库越来越丰富,后续新接入数据源时,很多时候根本不用新增规则,直接复用现有的清洗规则就能跑过,这个积累过程让工具越用越好用。

5. 如何把这套逻辑移植到别的场景

5.1 从 rea 提炼一个通用模板

做完了这个项目,我发现 rea 的价值其实不只在它本身,更在于这套"轻量请求加规则解析加标准化清洗"的思想被证明是通用的。后来我在处理其他资料聚合需求时,直接复用 rea 的框架,只是换掉了配置文件和解析规则,前前后后不到半小时就能搭一个新的数据处理管道。

遇到的另一种常见场景是把线下表格数据转换成固定接口所需的 JSON。这个场景完全不涉及抓取,但清洗和输出的逻辑跟 rea 几乎一模一样,都是进来一批原始数据,经过各种规则的转换,最终以标准格式出去。所以我把 rea 的清洗模块单独抽出来,形成了一个可以独立使用的转换工具模块,只接收数据列表和规则配置两个参数,完全摆脱了对具体业务场景的依赖。

这个通用模板的核心价值在于"规则与逻辑分离"。业务主流程几乎不用改,新的需求只需要写新的规则文件。这种做法把大量个案的差异缩小为了配置项的差异,维护心智负担降到了最低。

5.2 规则驱动开发的几点体会

经历过 rea 这个项目后,我对"配置优于代码"有了更深的体会。但也要泼一盆冷水:配置并不是越多越好。如果为了灵活性把每一条逻辑都拆成配置项,代码会变成一台没有任何逻辑的机器,配置本身也会膨胀到难以阅读。好的规则驱动,是在明确边界的基础上,把真正需要变化的部分暴露成配置。

以 rea 为例,源地址、解析表达式、日期格式、清洗规则是真正会变化的,所以它们放进配置;去重逻辑、输出格式的组装步骤、网络请求的策略是相对稳定的,它们保留在代码里。这样划分下来,配置文件简洁,代码逻辑也很清楚,改动一个方面不会牵动另一个方面。

5.3 从 rea 到自动化的进一步延伸

rea 现在跑在一个定时的自动化环境里,每天定时执行一次,处理的文件自动归档到指定目录。这个改动本身很小,但价值巨大:它意味着 rea 不再需要我手动执行,而是变成了一套"无人值守"的信息整理系统。每天起床之后,只需要看一份整理完成的摘要,就能快速了解昨日新增的内容,整个体验比之前坐在电脑前手工处理要舒服得多。

不过我也得说句实话,自动化带来的一个副作用是,脚本出现了异常如果没能及时发现,往往会等到下一次检查时才知道出了问题。后来我增加了一个简单的校验特性,在每条处理完成后检查关键字段是否为空,连续多条异常就会在摘要中醒目标注。这个机制成本很低,但我认为也属于整套系统里很重要的一环。

回顾这段时间做 rea 的经历,我最大的收获不是代码本身,而是想清楚了一个问题:很多看似是"技术问题"的项目,在最早的阶段其实都是"需求定义"的问题。不管是选型还是开发,只要能牢牢围绕实际使用场景来决策,这套方案就大概率是对的。rea 不是一个多么宏大的项目,但它教会了我用最朴素的方式解决最实际的麻烦,这种思路在后面的不少项目里都让我受益良多。

相关新闻

ANSYS弹塑性分析实战:从弹性到塑性收敛调试

ANSYS弹塑性分析实战:从弹性到塑性收敛调试

简介&#xff1a;《2021年ANSYS弹性及塑性分析非常经典.docx》是一份面向ANSYS初、中级用户及机械、土木、航天等工程领域从业者的中文教程资料&#xff0c;聚焦弹性与塑性非线性分析的核心原理和软件操作方法&#xff0c;帮助读者理解材料屈服、塑性变形和ANSYS塑性选项的实际…

2026/10/20 2:00:13 阅读更多 →
HyperDbg:Windows Ring0级内核调试代理原理与实践

HyperDbg:Windows Ring0级内核调试代理原理与实践

简介&#xff1a;本资源为开源Ring0级内核调试器Hyperdbg的完整源码工程&#xff0c;面向Windows驱动开发者、系统安全研究员及操作系统学习者&#xff0c;用于深入理解与实践内核层调试技术&#xff0c;解决驱动开发调试、恶意代码行为分析、系统稳定性优化等高阶问题。压缩包…

2026/10/20 1:59:13 阅读更多 →
SootTest实战:Java静态分析从字节码到调用图与ICFG

SootTest实战:Java静态分析从字节码到调用图与ICFG

简介&#xff1a;SootTest 是一份面向 Java 静态分析与编译优化学习者的实战示例资源&#xff0c;基于开源分析框架 Soot&#xff0c;演示如何生成调用图与过程间控制流程图&#xff08;ICFG&#xff09;。它适合已掌握 Java 基础、希望深入字节码分析与程序结构理解的开发者&a…

2026/10/20 1:59:13 阅读更多 →

最新新闻

程序员转大模型应用开发:6个月从RAG到Agent的实战路线图

程序员转大模型应用开发:6个月从RAG到Agent的实战路线图

前两年我还在纠结“大模型这么火&#xff0c;跟我一个写业务接口的程序员有什么关系”&#xff0c;后来真跳进去做了几个落地项目才发现&#xff1a;大模型领域现在最缺的&#xff0c;恰恰不是能推导Attention公式的研究员&#xff0c;而是能把模型接进业务、能把检索链路调通、…

2026/10/20 2:38:36 阅读更多 →
MAX9286+96705四路AHD车载摄像头方案实战指南

MAX9286+96705四路AHD车载摄像头方案实战指南

简介&#xff1a;本资源是一套面向嵌入式Linux视频驱动开发者的AHD多路视频采集方案&#xff0c;聚焦于将四路模拟高清&#xff08;AHD&#xff09;摄像头信号经MAX9286解码器与MAX96705串行器协同处理&#xff0c;统一转换为MIPI CSI-2数字接口输出&#xff0c;适用于车载DVR、…

2026/10/20 2:38:36 阅读更多 →
SPEI干旱指数工程化计算工具包:支持多PET算法与时空尺度聚合

SPEI干旱指数工程化计算工具包:支持多PET算法与时空尺度聚合

简介&#xff1a;本资源是一套面向气象水文、生态遥感及干旱研究领域的Python计算工具包&#xff0c;专为解决现有开源代码仅支持月尺度SPEI而缺乏日/周尺度计算能力的痛点设计。代码完整实现多时间尺度&#xff08;日、周、月&#xff09;、多分辨率&#xff08;支持逐日输入&…

2026/10/20 2:38:36 阅读更多 →
AiPy实战:用Python本地搭建AI自动化流程,低成本替代昂贵AI助手

AiPy实战:用Python本地搭建AI自动化流程,低成本替代昂贵AI助手

1. 先说清楚&#xff1a;这玩意儿到底是个啥如果你这段时间在关注AI圈&#xff0c;多少应该听过几个名字——某个老外做的自动化AI助手&#xff0c;能自己拆任务、调工具、跑流程&#xff0c;动辄几千块一个月的订阅费&#xff0c;还得折腾各种付费接口。很多开发者、中小团队被…

2026/10/20 2:38:36 阅读更多 →
换两行代码就换引擎:laya-mlx 接口兼容迁移的设计野心

换两行代码就换引擎:laya-mlx 接口兼容迁移的设计野心

换两行代码就换引擎&#xff1a;laya-mlx 接口兼容迁移的设计野心 【免费下载链接】laya-mlx Native MLX runtime for Laya typed decision models — 7–14 ms short decisions on M3 Max. No text generation, PyTorch, or cloud API. 项目地址: https://gitcode.com/gh_mi…

2026/10/20 2:38:36 阅读更多 →
博途1500PLC字符串包含判断:FOR+MID滑动窗口实现详解

博途1500PLC字符串包含判断:FOR+MID滑动窗口实现详解

用博途1500PLC判断源字符串中是否含有子字符串&#xff0c;这个需求听起来简单&#xff0c;我第一次在现场做的时候也以为一条指令就完事了。那是条包装线的扫码工位&#xff0c;读码器通过Profinet把条码送进PLC&#xff0c;我需要在ABC240315001XYZ这样的字符串里判断有没有2…

2026/10/20 2:37:36 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →