Node.js中使用Cheerio解析HTML数据的问题求助
解决Cheerio解析HTML表格生成指定数组格式的问题
嘿,我看到你在Cheerio解析HTML表格时遇到了格式问题——当前代码把版本号、链接和日期拆成了三个独立数组,而不是你想要的单个数组包含完整对象的格式。别担心,我来帮你修正这个问题!
问题根源
你的现有代码在遍历每一行<tr>时,分别将version、href、data推入三个不同的数组,这样就无法保证三个字段对应同一个版本条目。我们需要调整逻辑,在每一行循环内直接组装完整的对象,再推入结果数组。
修正后的解析代码
const cheerio = require('cheerio'); // 假设你已经加载了待解析的HTML内容到html变量中 const $ = cheerio.load(html); const result = []; // 遍历表格的每一行 $('.row table.striped tbody tr').each(function() { const $currentRow = $(this); // 获取当前行的下载链接元素 const $downloadLink = $currentRow.find("td a[title^='download']"); // 提取当前行的三个字段 const versionText = $downloadLink.text(); const downloadHref = $downloadLink.attr('href'); const releaseDate = $currentRow.find('td').eq(1).text(); // 组装成目标格式的对象并推入结果数组 result.push({ version: versionText, href: downloadHref, data: releaseDate }); }); // 输出结果 console.log(result);
代码说明
- 统一结果数组:创建一个空数组
result来存储最终的完整对象,而不是拆分三个数组。 - 精准元素查找:在每一行内先定位到下载链接
<a>标签,同时提取它的文本(版本号)和href属性,避免重复查找DOM元素,提升效率。 - 组装对象:将当前行的三个字段组装成一个包含
version、href、data的对象,直接推入结果数组,确保每个对象对应一个版本的完整信息。
输出效果
运行修正后的代码,你会得到完全符合期望的数组格式:
[ { version: '1.3', href: '/download-app/com.girlsbeautysalon.android_summerhairsalon/4_com.girlsbeautysalon.android_summerhairsalon_2016-12-26.apk/', data: 'Dec. 26, 2016'}, { version: ' 1.3 ', href: '/download-app/com.girlsbeautysalon.android_summerhairsalon/2_com.girlsbeautysalon.android_summerhairsalon_2016-12-25.apk/', data: 'Dec. 25, 2016'}, { version: ' 1.2 ', href: '/download-app/com.girlsbeautysalon.android_summerhairsalon/3_com.girlsbeautysalon.android_summerhairsalon_2016-08-26.apk/', data: 'Aug. 26, 2016'} ]
内容的提问来源于stack exchange,提问作者Нек Траммм
相关产品推荐
相关产品推荐

