使用Node.js+Cheerio爬取YouTube视频播放量返回空值如何解决
问题原因及解决方法
1. CSS选择器语法错误
你当前使用的选择器.view-count style-scope ytd-video-view-count-renderer中间带空格,在CSS选择器规则中空格代表选中后代元素,如果要选择同时包含三个类名的元素,需要将类名连写,中间不加空格,正确写法为:
let views = $('.view-count.style-scope.ytd-video-view-count-renderer');
2. 静态请求无法获取动态渲染内容
YouTube页面的播放量数据是页面加载完成后通过JavaScript动态渲染生成的,你直接用request发送GET请求拿到的初始HTML源码中不存在该元素,因此Cheerio无法解析到对应内容。
可行解决方案
方案一:使用Puppeteer获取动态渲染后内容
Puppeteer是无头浏览器工具,可以模拟真实浏览器环境加载页面,等待JS执行完成后再提取元素,示例代码如下:
console.log("Strumento avviato!") const puppeteer = require('puppeteer'); const urlV = '替换为你的目标视频地址'; (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 等待页面网络空闲,确保动态内容加载完成 await page.goto(urlV, {waitUntil: 'networkidle2'}); // 提取播放量文本 const views = await page.$eval('.view-count.style-scope.ytd-video-view-count-renderer', el => el.textContent.trim()); console.log(views); await browser.close(); })();
方案二:调用官方接口获取数据(更稳定,推荐)
直接使用YouTube官方提供的Data API获取视频播放量,无需处理反爬、动态渲染等问题,仅需申请API密钥后调用对应接口即可,开发和维护成本更低。
内容的提问来源于stack exchange,提问作者Conta
相关产品推荐
相关产品推荐

