You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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' } ]

代码解释

  1. 定位所有行:$('.row table.striped tbody tr') 精准定位到版本所在的表格行,避免页面中其他无关的<tr>干扰
  2. 遍历行元素:用.each()方法循环处理每一行
  3. 提取版本号:$(trElement).find('td:first-child a').text().trim()
    • td:first-child:选中当前行的第一个单元格(版本号所在的单元格)
    • .text():提取该单元格内<a>标签的纯文本
    • .trim():去除文本前后可能存在的空白字符
  4. 整理格式:把每个版本号包装成{ 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,提问作者袧械泻 孝褉邪屑屑屑

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:56:48