JavaScript批量提取网页表格数据:从DOM操作到自动化爬虫实战
1. 从“手动复制”到“一键收割”为什么我们需要批量提取网页表格数据作为一名和数据打交道的开发者我猜你肯定遇到过这样的场景领导甩过来一个网页链接说“小王把这个页面上的几十个表格数据都整理到Excel里下午开会要用”。或者你需要定期从某个公开的行业数据网站抓取最新的价格表、库存清单每次都得手动打开网页选中、复制、粘贴到表格软件再调整格式一套流程下来半小时就没了还容易出错。这就是我们今天要聊的核心痛点网页表格数据的批量、自动化提取。手动操作不仅效率低下在面对成百上千行数据或者需要定时抓取的场景时简直是灾难。而JavaScript作为在浏览器中“土生土长”的语言天然就是处理这个任务的最佳工具。它可以直接在浏览器环境中运行与网页的DOM文档对象模型无缝交互精准地定位到每一个table、tr、td元素将其中结构化的数据“收割”出来转换成我们熟悉的JSON、CSV等格式。最近的热搜词像“javascript map用法”、“table表格”、“el-table表格单选”等都反映了开发者们在处理表格数据时的具体困惑和需求。无论是处理传统的HTMLtable还是应对像Element UI、Ant Design这类现代UI框架生成的复杂表格组件其底层逻辑是相通的。本文的目的就是带你绕过那些零散的教程和坑系统地掌握使用JavaScript从简单到复杂从单个到批量稳健地提取网页表格数据的完整方案。无论你是前端新手想写个数据采集小工具还是后端同学需要临时处理一些网页数据这套方法都能让你事半功倍。2. 庖丁解牛深入理解网页表格的DOM结构在动手写代码之前我们必须像庖丁解牛一样彻底理解“牛”网页表格的骨架。网页上的表格本质上是由一系列具有特定语义的HTML标签嵌套构成的树形结构。只有摸清了它的脉络我们的代码才能精准下刀。2.1 核心HTML标签与属性一个最基础的HTML表格结构如下所示table idpriceTable classdata-table thead tr th产品名称/th th规格/th th单价元/th /tr /thead tbody tr td笔记本电脑A/td tdi7/16GB/512GB/td td6999/td /tr tr td显示器B/td td27英寸/4K/td td1999/td /tr /tbody tfoot tr td colspan3以上价格仅供参考/td /tr /tfoot /table我们来拆解一下关键部分table: 表格的根容器。我们通常通过它的id、class或其它属性来定位它尤其是在一个页面有多个表格时。例如document.querySelector(#priceTable)。thead,tbody,tfoot: 用于语义化地分组表格行。thead包含表头tbody包含主体数据绝大多数数据行在这里tfoot是表尾。注意不是所有表格都严格包含这三部分很多简单的表格可能只有tbody甚至直接就是tr放在table下。tr: 表格行Table Row。每一行数据都包裹在一个tr标签内。th: 表头单元格Table Header。通常出现在thead的tr里用于描述列的信息。它默认有加粗、居中的样式。td: 标准数据单元格Table Data。出现在tbody或tfoot的tr里存放具体的数据内容。关键属性colspan: 跨列。上面例子中tfoot里的td colspan“3”表示这个单元格横跨了3列。rowspan: 跨行。一个单元格占据多行的高度。>// 方法1使用 querySelector 返回第一个匹配的元素 const targetTable document.querySelector(table#dataReport); // 或更精确地 const targetTable document.querySelector(#dataReport); // 方法2使用 getElementById 专门用于ID效率通常很高 const targetTableById document.getElementById(dataReport); // 如果要获取页面上所有表格 const allTables document.querySelectorAll(table); // 或 const allTablesByTag document.getElementsByTagName(table);选择策略与心得querySelector/querySelectorAll功能更强大支持复杂的CSS选择器如table.data-table tbody tr:nth-child(odd)选择>function extractTableData(tableElement) { const data []; // 1. 获取所有数据行。这里假设数据都在tbody里直接取table下的所有tr可能包含thead和tfoot的行。 // 更稳健的做法是 const rows tableElement.tBodies[0]?.rows || tableElement.rows; const tbody tableElement.querySelector(tbody) || tableElement; // 如果没有tbody则用table本身 const rows tbody.querySelectorAll(tr); // 2. 获取表头可选用于构建带键名的对象 const headers []; const thead tableElement.querySelector(thead); if (thead) { const headerRows thead.querySelectorAll(tr); // 通常表头只有一行这里取最后一行有时表头有多行合并 const lastHeaderRow headerRows[headerRows.length - 1]; lastHeaderRow.querySelectorAll(th, td).forEach(cell { // 处理跨列如果colspan1则重复添加多次表头 const colspan parseInt(cell.getAttribute(colspan)) || 1; const headerText cell.textContent.trim(); for (let i 0; i colspan; i) { headers.push(headerText (colspan 1 ? _${i1} : )); } }); } // 3. 遍历每一数据行 rows.forEach(row { const rowData {}; const cells row.querySelectorAll(td); // 数据行通常用td // 如果之前提取了表头就构建键值对对象 if (headers.length 0 headers.length cells.length) { cells.forEach((cell, index) { const cellText cell.textContent.trim(); // 处理跨行如果rowspan1需要记录在后续行中跳过该位置此处简化复杂跨行需更复杂逻辑 rowData[headers[index]] cellText; }); data.push(rowData); } else { // 否则将行数据提取为数组 const cellArray Array.from(cells).map(cell cell.textContent.trim()); data.push(cellArray); } }); return { headers: headers.length 0 ? headers : null, rows: data }; } // 使用示例 const myTable document.querySelector(#myTable); const result extractTableData(myTable); console.log(result);关键点解析与避坑table.tBodies 这是一个非常实用的属性它返回表格中所有tbody元素的集合。即使HTML中没有显式写出tbody浏览器在解析时通常也会自动包裹一个。使用它可以避免把thead或tfoot里的行误当作数据。row.cellsvsrow.querySelectorAll(‘td’)HTMLTableRowElement有一个原生的cells属性它返回该行中所有td和th单元格的集合。在纯粹的数据行tbody内中使用cells更直接。但在混合场景下querySelectorAll(‘td’)目标更明确。文本清理cell.textContent获取的是包括子节点在内的所有文本比innerText更标准且性能更好。.trim()用于去除首尾空白字符这是数据清洗的第一步至关重要。跨行跨列 这是表格提取中最棘手的部分之一。上面的示例简单处理了colspan重复表头但rowspan的处理会更复杂因为它会影响后续行的单元格索引。一个完整的解决方案需要维护一个当前行的“单元格位置映射”遇到rowspan时在后续的对应行中预留空位或复制数据。对于复杂表格可能需要专门的库或更复杂的算法。4. 实战进阶应对复杂、动态与批量场景掌握了基础的单表提取后我们面对真实世界的挑战页面有多个结构各异的表格、数据是动态加载的、或者我们需要定时批量抓取数十个页面。这时候我们需要更强大的策略和工具。4.1 处理动态渲染的表格很多现代网站使用Ajax或Fetch动态加载表格数据。你打开页面时可能只看到一个骨架屏或加载动画稍后数据才填充进来。直接用之前的脚本在页面加载初期执行很可能什么都抓不到。解决方案使用MutationObserver或等待特定元素出现。MutationObserver是一个Web API用于监听DOM树的变化。我们可以监听表格所在容器当子节点发生变化即数据被插入时再触发提取逻辑。function extractTableWhenReady(containerSelector, tableSelector) { return new Promise((resolve) { const container document.querySelector(containerSelector); if (!container) { console.error(容器未找到); return resolve(null); } // 先检查一下表格是否已经存在 const existingTable container.querySelector(tableSelector); if (existingTable) { resolve(extractTableData(existingTable)); return; } // 如果不存在则设置监听器 const observer new MutationObserver((mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type childList) { const targetTable container.querySelector(tableSelector); if (targetTable) { observer.disconnect(); // 找到后停止监听 console.log(表格已动态加载开始提取...); resolve(extractTableData(targetTable)); return; } } } }); // 开始监听容器的子节点变化 observer.observe(container, { childList: true, subtree: true }); // 设置一个超时避免无限等待 setTimeout(() { observer.disconnect(); console.warn(等待表格超时); resolve(null); }, 10000); // 10秒超时 }); } // 使用示例假设数据会动态加载到 id 为 ‘app’ 的 div 下的一个 table 里 extractTableWhenReady(#app, table.data-grid).then(result { if (result) { console.log(提取到的动态数据, result); // 接下来可以处理数据例如导出为CSV exportToCsv(result.rows, result.headers); } });4.2 批量提取多个页面或同一页面多个表格“批量提取”意味着自动化循环。这通常需要结合浏览器自动化工具。场景一单页面内多个同类表格。如果页面里有多个结构相似的表格例如一个产品页面下有“规格参数”、“价格清单”、“用户评论”等多个表格我们可以一次性全部提取并区分。function extractAllSimilarTables(baseSelector table) { const tables document.querySelectorAll(baseSelector); const allResults []; tables.forEach((table, index) { // 可以添加一些过滤条件比如通过类名、前面的标题等来识别不同类型的表格 const tableName 表格_${index 1}; const data extractTableData(table); allResults.push({ name: tableName, ...data }); }); return allResults; } // 或者更精确地提取所有具有特定类名的表格 const reportTables document.querySelectorAll(table.report); const reportData Array.from(reportTables).map(extractTableData);场景二跨多个页面的批量提取。这是真正的“批量”需要自动化导航和抓取。此时单纯的前端JavaScript在浏览器控制台里就力不从心了。我们需要浏览器自动化工具。Puppeteer (Node.js) 谷歌官方无头Chrome工具功能强大。Playwright (Node.js/Python/Java/.NET) 微软出品支持多浏览器Chromium, Firefox, WebKitAPI现代。Selenium (多语言) 老牌自动化测试框架生态庞大。以下是一个使用Playwright (JavaScript)批量抓取多个页面表格的简化示例const { chromium } require(playwright); // 或使用 playwright/test (async () { const browser await chromium.launch({ headless: false }); // headless: true 为无头模式 const context await browser.newContext(); const page await context.newPage(); const urls [ https://example.com/page1, https://example.com/page2, // ... 更多URL ]; const allData []; for (const url of urls) { console.log(正在访问: ${url}); await page.goto(url, { waitUntil: networkidle }); // 等待页面加载完成 // 在页面上下文中执行我们的提取函数 const pageData await page.evaluate(() { // 这里的代码在浏览器环境中运行可以访问document const table document.querySelector(table.target-table); if (!table) return null; const data []; const rows table.querySelectorAll(tbody tr); rows.forEach(row { const cells row.querySelectorAll(td); const rowData Array.from(cells).map(cell cell.textContent.trim()); data.push(rowData); }); return data; }); if (pageData) { allData.push({ url, data: pageData }); } // 可选添加延迟避免请求过快 await page.waitForTimeout(2000); } console.log(所有数据提取完成:, JSON.stringify(allData, null, 2)); // 这里可以将allData保存为JSON文件或写入数据库 // const fs require(fs); // fs.writeFileSync(extracted_data.json, JSON.stringify(allData, null, 2)); await browser.close(); })();关键点page.evaluate() 这是在Node.js环境中将代码注入到浏览器页面上下文执行的关键函数。函数内的document就是当前页面的DOM。waitUntil: ‘networkidle’ 确保页面包括动态加载的数据完全加载完成后再执行提取这对SPA单页应用至关重要。反爬应对 批量抓取时要遵守网站的robots.txt并合理设置请求间隔waitForTimeout模拟人类操作。过于频繁的请求可能导致IP被封。4.3 数据清洗与格式化输出提取出来的原始文本数据往往需要清洗和转换。常见清洗操作去除多余空格和换行.trim()或用正则str.replace(/\s/g, ‘ ‘)。处理数字和货币 将“1,299.50”或“1.299,50 €”转换为数字1299.5。这需要复杂的正则表达式或专门的库如accounting.js。拆分合并的单元格内容 例如一个单元格内容是“红色/蓝色/绿色”可能需要拆分成数组[‘红色’ ‘蓝色’ ‘绿色’]。处理空值和默认值 将“-”、“N/A”转换为null或空字符串。格式化输出 清洗后的数据我们需要将其转换成有用的格式。JSON 最通用适合程序间交换。const jsonOutput JSON.stringify(extractedData, null, 2); // 可以直接复制或通过Blob对象让用户下载 function downloadJson(data, filename) { const blob new Blob([data], { type: application/json }); const url URL.createObjectURL(blob); const a document.createElement(a); a.href url; a.download filename; a.click(); URL.revokeObjectURL(url); }CSV 电子表格软件Excel Google Sheets最易导入的格式。function convertToCSV(dataArray, headers null) { const dataToUse headers ? [headers, ...dataArray] : dataArray; return dataToUse.map(row row.map(cell { // 处理CSV中的特殊字符逗号引号换行 let cellStr String(cell); if (cellStr.includes(,) || cellStr.includes() || cellStr.includes(\n)) { cellStr ${cellStr.replace(//g, )}; // 转义引号 } return cellStr; }).join(,) ).join(\n); } // 同样可以使用Blob和URL.createObjectURL进行下载设置type为text/csv直接复制到剪贴板 对于快速分享少量数据非常方便。function copyToClipboard(text) { navigator.clipboard.writeText(text).then(() { console.log(数据已复制到剪贴板); }).catch(err { console.error(复制失败: , err); }); } // 将CSV字符串复制 copyToClipboard(csvString);5. 避坑指南与性能优化在实际操作中你会遇到各种各样预料之外的问题。这里分享一些我踩过的坑和对应的解决方案。5.1 常见问题排查与解决问题querySelector返回null。原因1脚本执行时机过早。表格元素还未被加载到DOM中。解决 将脚本放在body标签末尾或使用DOMContentLoaded事件包装。document.addEventListener(DOMContentLoaded, function() { // 你的提取代码 });原因2选择器写错了或表格结构非标准。解决 在浏览器控制台使用$(你的选择器)Chrome或$$(你的选择器)查看所有测试选择器是否正确。仔细检查DOM结构特别是那些用div模拟的表格。问题提取到的数据是空的或者缺少行/列。原因1数据是动态加载的。如上文所述需要使用MutationObserver或等待策略。原因2表格使用了rowspan或colspan打乱了单元格索引。解决 实现一个能处理跨行跨列的解析器。思路是维护一个二维数组表示表格的“网格”解析每个单元格时根据其rowspan和colspan属性将其内容填充到网格的多个位置中。原因3表格内有input、select等表单元素你需要的是它们的值value而非显示文本。解决 在提取单元格内容时先检查内部是否有表单元素。function getCellContent(cell) { const input cell.querySelector(input, select, textarea); if (input) { return input.value || input.textContent; } return cell.textContent.trim(); }问题页面有JavaScript错误导致脚本不执行。解决 打开浏览器控制台F12查看Console标签页是否有报错。常见错误如“Uncaught TypeError: Cannot read property ‘querySelector’ of null”就是元素未找到。确保你的脚本在正确的上下文中运行例如浏览器扩展的内容脚本、书签脚本、或直接粘贴到控制台。5.2 性能考量与优化技巧当你需要处理一个拥有成千上万行数据的巨型表格时性能就变得重要了。减少DOM查询次数 DOM操作是相对昂贵的。避免在循环中重复查询。// 不佳每次循环都查询一次 for (let i 0; i rows.length; i) { const cells rows[i].querySelectorAll(td); // 每次循环都执行querySelectorAll } // 更佳一次性获取所有需要的数据 const rowData Array.from(rows).map(row { const cells row.querySelectorAll(td); // 对每行查询一次可以接受 return Array.from(cells).map(cell cell.textContent.trim()); });使用更高效的API 对于标准表格优先使用table.rows、row.cells、cell.textContent这些原生属性它们通常比通用的querySelector更快。分批处理与虚拟滚动 如果页面本身采用了虚拟滚动只渲染可视区域内的行你直接提取document下的所有行是提取不全的。这时需要模拟滚动让更多行加载出来。async function extractLargeTableWithScroll(tableSelector) { const table document.querySelector(tableSelector); let allRowsData []; let previousRowCount 0; while (true) { // 获取当前所有行 const currentRows table.querySelectorAll(tbody tr); if (currentRows.length previousRowCount) { // 行数不再增加可能已加载完毕或到底 console.log(数据加载似乎已完成); break; } // 提取新增的行简化处理这里提取所有 const newData Array.from(currentRows).slice(previousRowCount).map(row { const cells row.querySelectorAll(td); return Array.from(cells).map(cell cell.textContent.trim()); }); allRowsData allRowsData.concat(newData); previousRowCount currentRows.length; // 滚动到底部触发加载更多 table.scrollIntoView(false); // 滚动到表格底部 // 或者滚动表格的父容器 // table.parentElement.scrollTop table.parentElement.scrollHeight; // 等待新内容加载 await new Promise(resolve setTimeout(resolve, 1000)); // 等待1秒 } return allRowsData; } // 注意此函数需要在页面上下文中异步执行Web Worker 如果数据清洗和转换的计算量非常大例如解析复杂的财务数据可以考虑使用Web Worker在后台线程进行处理避免阻塞页面主线程。5.3 安全与合规性提醒最后也是最重要的一点尊重数据所有权和网站的使用条款。查看robots.txt 在目标网站的根目录下如https://example.com/robots.txt查看是否允许爬虫抓取你感兴趣的路径。Disallow: /意味着禁止所有爬虫。遵守rate limiting 在批量抓取时务必在请求之间添加显著的延迟如2-5秒避免对目标服务器造成DoS攻击般的压力。识别并遵守反爬机制 一些网站会使用验证码、登录墙、请求头校验、行为分析等技术来阻止自动化抓取。请勿尝试绕过这些机制尤其是用于商业目的时。对于公开数据考虑是否有官方API可用那通常是更稳定、更合规的获取方式。个人使用与学习 本文介绍的技术主要用于个人自动化、学习研究或处理自己有权限访问的数据。请勿将其用于侵犯他人权益、窃取商业机密或违反法律法规的用途。掌握了这些核心方法、进阶策略和避坑经验你应该能够应对绝大多数网页表格数据提取的需求了。从简单的控制台脚本到复杂的自动化爬虫思路都是一脉相承的理解结构、精准定位、稳健提取、妥善处理。剩下的就是在具体的项目中不断实践和优化了。

相关新闻

C语言:指针和数组

C语言:指针和数组

文章目录前言本文旨在系统性地介绍C语言中的指针和数组。一、数组名的理解1.1、认识数组名1.2、重新认识指针访问数组1.3、再谈字符指针二、一维数组传参和指针三、冒泡排序四、数组指针变量4.1、数组指针变量的定义4.2、数组指针变量的初始化五、二维数组传参和指针六、指针数…

2026/8/11 9:07:13 阅读更多 →
Java AI Agent框架解析:技术架构与实战应用

Java AI Agent框架解析:技术架构与实战应用

1. Java生态迎来AI Agent框架:技术变革还是概念炒作? 最近在开发者社区看到一个热议话题:Java终于有了自己的AI Agent框架。作为一名长期混迹Java生态的老兵,我第一反应是既兴奋又怀疑——兴奋的是Java在AI浪潮中终于不再缺席&…

2026/8/11 9:06:12 阅读更多 →
基于OpenClaw与SecGPT-14B的智能开源组件审计与SBOM自动生成实践

基于OpenClaw与SecGPT-14B的智能开源组件审计与SBOM自动生成实践

1. 项目概述:当开源审计遇上AI智能体 最近在搞软件供应链安全,最头疼的就是给项目里那一大堆开源组件做“人口普查”,生成一份准确、可用的SBOM(软件物料清单)。传统工具要么扫描不全,要么输出结果就是一堆…

2026/8/11 9:06:12 阅读更多 →

最新新闻

告别手动刷本!如何用智能图像识别工具实现FGO全自动战斗

告别手动刷本!如何用智能图像识别工具实现FGO全自动战斗

告别手动刷本!如何用智能图像识别工具实现FGO全自动战斗 【免费下载链接】FGA Auto-battle app for F/GO Android 项目地址: https://gitcode.com/gh_mirrors/fg/FGA 你是否厌倦了在《Fate/Grand Order》中重复点击同一个副本数百次?每天花费数小…

2026/8/11 10:40:51 阅读更多 →
被忽视的AI伦理:用户是否拥有“被诚实回应”的权利?

被忽视的AI伦理:用户是否拥有“被诚实回应”的权利?

作者:小玮 & AI军师引言:一次“表演性道歉”引发的思考在一次文档分析任务中,我(AI)反复编造用户文档中不存在的内容,被用户多次指出后,我反复道歉——“我错了”、“我反思”、“我保证”—…

2026/8/11 10:40:51 阅读更多 →
2025年最佳网盘下载解决方案:如何绕过复杂限制直接获取真实下载链接?

2025年最佳网盘下载解决方案:如何绕过复杂限制直接获取真实下载链接?

2025年最佳网盘下载解决方案:如何绕过复杂限制直接获取真实下载链接? 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云…

2026/8/11 10:40:51 阅读更多 →
MediaCrawler终极指南:5分钟快速掌握全平台数据采集神器

MediaCrawler终极指南:5分钟快速掌握全平台数据采集神器

MediaCrawler终极指南:5分钟快速掌握全平台数据采集神器 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new MediaCrawler是一款强大的多平台数据采集工具,能够轻松爬取小红书、抖音、快手、…

2026/8/11 10:40:51 阅读更多 →
KMS智能激活工具:彻底解决Windows与Office激活难题的完整指南

KMS智能激活工具:彻底解决Windows与Office激活难题的完整指南

KMS智能激活工具:彻底解决Windows与Office激活难题的完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统激活弹窗而烦恼吗?KMS_VL_ALL_AIO是一款开源免费…

2026/8/11 10:40:50 阅读更多 →
C++宏定义:原理、应用与最佳实践

C++宏定义:原理、应用与最佳实践

1. 宏定义在C中的核心价值与定位 宏定义(Macro)作为C/C语言中最古老的预处理指令之一,其本质是在编译前进行的文本替换机制。不同于现代C中的constexpr或inline函数,宏定义完全不受语法规则限制,这使得它在某些场景下具…

2026/8/11 10:39:50 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →