Node.js中使用Cheerio解析HTML时出现undefined错误求助
解决Cheerio解析HTML返回undefined的问题
嘿,我帮你找到了问题的关键,咱们一步步来修正:
1. 核心错误:CSS选择器写错了
你要解析的目标是class为faq_cat的div元素,但你的代码里写的是:
const h2 = $('faq_cat').attr('id')
$('faq_cat')是在查找名为<faq_cat>的自定义标签,而不是带faq_cat类的div!正确的类选择器需要在类名前加.,应该改成:
const h2 = $('.faq_cat').attr('id')
2. 第二个坑:忘记返回解析结果
你的parseFields函数里定义了fields但没有返回它,导致后续的.then(function(app) { ... })里的app也会是undefined。修正后的完整函数应该是:
function parseFields ($) { const h2 = $('.faq_cat').attr('id') const fields = { h2 }; // 必须返回结果,才能传递到下一个then return fields; }
3. 额外排查步骤(如果还是有问题)
- 确认返回的HTML是否包含目标元素:在加载Cheerio前打印请求到的HTML,确保内容正确:
request(options, opts.throttle) .then(html => { console.log('抓取到的HTML:', html); // 检查是否存在目标div return cheerio.load(html); }) .then(parseFields) .then(app => resolve(app)) .catch(reject); - 如果HTML里确实没有目标元素,要检查是不是页面内容是JS动态渲染的——request库只能抓取静态HTML,动态生成的内容需要用Puppeteer这类工具模拟浏览器渲染。
关于你的Express服务端代码
这段代码看起来和当前Cheerio解析问题无关,如果是google-play-scraper的调用有问题,可以单独提出来排查,但当前重点还是解决Cheerio的选择器和返回值问题。
内容的提问来源于stack exchange,提问作者Нек Траммм
相关产品推荐
相关产品推荐

