Cheerio无法返回指定路径的IMDB剧集标题,求技术帮助
问题分析与解决
你遇到的核心问题是对Cheerio的each()方法返回值理解有误:
$('.lister-list>tr').each(...)的返回值不是处理后的标题数据,而是调用该方法的原始Cheerio DOM元素集合,所以你打印cheerioData会看到包含x-attribsNamespace、Element的对象,这是Cheerio内部的DOM结构表现。- 你需要手动创建数组来存储遍历过程中获取的标题,而非直接接收
each()的返回值。
修正后的代码
import * as cheerio from 'cheerio'; import axios from 'axios'; import fs from 'fs'; axios("https://www.imdb.com/chart/tvmeter/?ref_=nv_tvv_mptv").then(res => { const data = res.data; const $ = cheerio.load(data); // 创建数组存储标题 const titles = []; $('.lister-list>tr').each((i, e) => { const title = $(e).find('.titleColumn a').text().trim(); if (title) { // 过滤空内容 titles.push(title); } }); console.log(titles); // 输出所有剧集标题数组 // 可选:写入文件保存结果 fs.writeFileSync('imdb_titles.txt', titles.join('\n'), 'utf-8'); });
关键说明
- 新增
titles数组专门用于收集遍历到的每一个剧集标题 - 在
each回调内,将获取到的标题(通过trim()去除多余空格)push到数组中 - 最终操作
titles数组即可得到预期的标题集合,而非each()返回的DOM元素对象
内容的提问来源于stack exchange,提问作者Routfin
相关产品推荐
相关产品推荐

