首页 > 解决方案 > Node JS 使用 Cheerio 抓取 youtube 视频

问题描述

我正在尝试使用 node.js 开发一个系统,该系统使用每 60 秒的观看次数更新视频标题。现在,我正在尝试获取观看次数,然后我将完成剩下的工作。我在使用 Cheerio API 时遇到问题。然后我使用这样的页面源进行响应:

console.log("Strumento avviato!")


//TODO: get views number with scraping

const urlV = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const axios = require("axios").default;
const cheerio = require('cheerio');
const request = require('request');
    request({
        method: 'GET',
        url: urlV
    }, (err, res, body) => {
        let $ = cheerio.load(body);
        let views = $('.view-count style-scope ytd-video-view-count-renderer');
        console.log(views.text());
    
    })

包含查看次数的标签如下:

在此处输入图像描述

问题是这样做会返回 null:

let $ = cheerio.load(body);
    let views = $('.view-count style-scope ytd-video-view-count-renderer');
    console.log(views.text());

两个空行作为控制台输出: 在此处输入图像描述

然后我怎么能提取视图数量?

标签: node.jsweb-scrapingcheerio

解决方案


请不要抓取 DOM 来获取查看次数。您可以使用 Youtube API 来获取统计信息并解析它返回的 json。

我已经测试了以下,它的工作原理:

var options = {
  method: 'GET',
  json: true,
  url: 'https://www.googleapis.com/youtube/v3/videos',
  headers: {
    'Referer': 'YOUR DOMAIN URL'
  },
  qs: {
    part: 'statistics',
    id: 'dQw4w9WgXcQ',
    key: 'YOUR API KEY'
  }
};
request(options, function(err, res, body){
  console.log(body.items[0].statistics.viewCount);
});

您可以按照这些说明获取 Youtube API 的 API 密钥。如果您在本地或您控制的任何域中运行此实例,您可以将Referer 域设置为例如http://localhost。只需将您的 DOMAIN URL 替换为 http://localhost 或其他任何内容,并将您的 API KEY 替换为 Google 为您提供的 API 密钥。


推荐阅读