Node.js中使用Cheerio(JQuery API)爬取版本号及<tr>元素求助
解决Cheerio爬取版本号的问题
我来帮你搞定这个Cheerio爬取的需求!你想要提取页面里的版本号并整理成指定格式,其实只要调整选择器和文本提取的方法就能实现,我一步步给你讲:
核心要点:提取纯文本
Cheerio里的text()方法专门用来提取元素内的纯文本内容,会自动忽略标签的href、title等属性,正好符合你只拿版本号文本的需求。
正确的爬取代码示例
假设你已经获取到目标页面的HTML内容,下面是完整的实现代码:
const cheerio = require('cheerio'); // 替换成你实际获取到的页面HTML const pageHtml = ` <div class="box-title">All Versions</div> <div class="row" style="margin-left: 2%; margin-right: 2%;"> <table class="striped" style="margin-left: auto; margin-right: auto;"> <tbody> <tr><td><a title="download Ultimate Ninja Blazing 2.5.1 apk " onclick="ga('send', 'event', 'button', 'download_ver', 'com.bandainamcoent.narutoblazingna_2018-05-08.apk');" href="/download-app/com.bandainamcoent.narutoblazingna/4_com.bandainamcoent.narutoblazingna_2018-05-08.apk/">2.5.1</a></td><td>May 8, 2018</td></tr> <tr><td><a title="download Ultimate Ninja Blazing 2.5.0 apk " onclick="ga('send', 'event', 'button', 'download_ver', 'com.bandainamcoent.narutoblazingna_2018-04-30.apk');" href="/download-app/com.bandainamcoent.narutoblazingna/5_com.bandainamcoent.narutoblazingna_2018-04-30.apk/">2.5.0</a></td><td>April 30, 2018</td></tr> </tbody> </table> </div> `; // 加载HTML到Cheerio const $ = cheerio.load(pageHtml); // 存储最终结果的数组 const versionList = []; // 遍历所有版本行<tr> $('.row table.striped tbody tr').each((idx, trElement) => { // 提取当前行的版本号:第一个<td>里的<a>标签文本 const version = $(trElement).find('td:first-child a').text().trim(); // 把版本号整理成指定格式存入数组 versionList.push({ version }); }); // 输出结果 console.log(versionList); // 输出:[ { version: '2.5.1' }, { version: '2.5.0' } ]
代码解释
- 定位所有行:
$('.row table.striped tbody tr')精准定位到版本所在的表格行,避免页面中其他无关的<tr>干扰 - 遍历行元素:用
.each()方法循环处理每一行 - 提取版本号:
$(trElement).find('td:first-child a').text().trim()td:first-child:选中当前行的第一个单元格(版本号所在的单元格).text():提取该单元格内<a>标签的纯文本.trim():去除文本前后可能存在的空白字符
- 整理格式:把每个版本号包装成
{ version: 'xxx' }的对象,存入数组
你的原代码问题修正
你原来的代码里有几个小问题:
- 错误使用了
row.info('tr'):Cheerio没有info()方法,查找子元素应该用find() eq(1)选择的是第二个<td>(日期列),而版本号在第一个<td>里,应该用eq(0)或者first-child- 没有遍历所有
<tr>,所以只能拿到单个版本
扩展:同时获取版本日期
如果需要同时提取版本对应的日期,可以在循环里加上这一行:
const date = $(trElement).find('td:last-child').text().trim(); versionList.push({ version, date });
这样结果会变成:
[ { version: '2.5.1', date: 'May 8, 2018' }, { version: '2.5.0', date: 'April 30, 2018' } ]
内容的提问来源于stack exchange,提问作者袧械泻 孝褉邪屑屑屑
相关产品推荐
相关产品推荐

