node.js - 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());
然后我怎么能提取视图数量?
解决方案
请不要抓取 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 密钥。