1、背景
随着生成式AI的出现和不断迭代
以OpenAI为首的Sora、谷歌的Gemini、国内快手的可灵、字节的即梦等生成式视频AI对于自媒体领域的视频产生了巨大的冲击
AI视频的数量以爆发式的规模在各大媒体平台增长
AI视频领域带来的市场是巨大的,创新的,甚至可能是颠覆的,短时间内就成为了自媒体人的共识
最重要的就是AI视频创作突破了现实世界的物理框架限制,那些天马行空的想象能够被AI以视频的方式实现了
海底世界里鱼儿们开起了演唱会、人物在天空飞翔、古代的侠客刀光剑影
与名人穿越时空对话、小猫打咏春、飞船穿梭在璀璨的星河之间等等
这些画面,以前只能在梦里想想,现在用 AI 都能轻松实现,简直不要太酷!
这让人们体验到前所未有兴奋和刺激,但是却也带给所有自媒体人新的难题
AI视频的选题
好的选题才能在众多的视频中脱颖而出,让观众看见和留下,欣赏你的创意
要是天天都在想选题,那留给制作视频的时间肯定就少了,这事儿可就得不偿失了,对吧?
那怎么办呢?
其实呢,自古以来那些厉害的作品和大神们,都是在一步步学习和模仿中成长起来的
所以学习和借鉴现有的视频题材,也是咱们创作路上很重要的一环
而获取对标AI博主的视频题材数据有一门讲究的事了
本文就将提供一种对YouTube视频平台AI博主视频题材数据获取和数据分析方案
方案关键词
- Nodejs运行代码方案
- IPIDEA HTTP代理
- Excel分析
2、流程介绍
为了方便对该方案有整体上的理解,以下列出主要的执行流程
- 先选定对标的AI博主账号
- 设定获取数据分析指标
- 注册IPIDEA代理平台账户,获取HTTP代理权限 (之后会讲为什么HTTP使用代理)
- 使用Nodejs代码配置代理
- 执行代码进行数据访问和网页数据采集
- 导出Excel数据进行分析
4、配置代理策略
4.1注册HTTP代理平台账户
注册IPIDEA账户,获取HTTP代理权限
这一步是为什么呢?为什么要获取HTTP代理权限
主要是Youtube作为海外的最大的视频平台
每日有巨量的访问流量、如果允许非常规的流量访问
会对服务器造成不必要的运行资源的浪费
所以Youtube有严格的流量来源筛查,阻止那些异常流量访问
当然其他的网站也是如此
数据访问时一旦被识别为异常流量时,网站断开你的流量访问,这就无法正常的获取数据了
这样的话就造成了数据获取的不稳定性高
这是一个日常数据获取中的高频的阻塞项
那有什么解决方案嘛?有
在我以往寻找的解决方案中,IPIDEA 作为提供合规 HTTP 代理服务的平台,能模拟正常用户网络访问特征、适用于合法公开数据采集场景,使用效果也不错。
那数据获取的不稳定性高这个难题就迎刃而解了
首页打开IPIDEA官网
可以看到他们对自己服务的介绍
全球优质代理 IP
企业级合规数据采集与智能解析
主要分为
- 动态住宅代理
- 静态住宅代理
- 动态长效ISP
- 数据中心代理
- 移动代理
- 所有类型IP仅支持在境外网络环境下使用
4.2配置动态住宅代理
进行注册后我们可以查看自己的信息面板
这次我们的方案主要使用的服务是动态住宅代理
其主要的应用场景就是网页数据采集
和符合我们需要的业务需求场景
并且完成以下的操作
- 配置白名单
主要是使用HTTP代理服务时,平台也要确保你的账户中有效设备地址,防止流量被不明来源偷偷使用了
网上直接搜索本机IP地址,找一个IP地址检查网站查询后,配置到此处即可
- 添加子账户
方便后续对每个不同业务的子账户使用服务的精细化管理
并且后续的API使用也需要用到子账户认证
4.3测试代理
打开账密认证
在中间的配置服务表单区域
配置自己使用的套餐、国家/地区、认证账户等信息
然后复制右侧的测试命令
在自己的电脑上或者服务器上
打开CMD/终端去执行
执行测试命令之后当我们看到以下返回时,说明动态住宅-HTTP代理配置服务成功了
{"ip":"101.127.XXX.XX","country_code":"SG","province":"","city":"Jurong West","zip_code":"600318","asn":"AS55430","asn_name":"Starhub Ltd","asn_type":"isp","timezone":"Asia/Singapore","longitude":"103.72278","latitude":"1.35028"}
可以看到这个IP就是新加坡的,代理配置正确
接下来我们就可以将其配置到代码中使用它来进行网页数据采集了
5、实践代理方案
因为我们使用的Node环境,请先安装Node环境
这里大家自行网上搜索流程即可,很简单
5.1分析页面信息
首先我们需要分析Youtube的网页内容信息
以便编写脚本时,根据网页内容的数据返回模式针对性的进行数据提取
这是博主的视频页面
由于博主发的视频多数是Shorts,我们就分析上诉链接的网页数据返回
点开后右键查看网页源代码
可以看到这里是当前我检索了博主的最新一个视频的标题
Professor McGonagall and Snape — Halloween pranks gone wrong.
而这个标题居然在 Script 脚本元素之中,而不是DOM节点内容元素
在搜索其他的视频标题,也是依旧在script元素之中
说明Youtube的视频内容数据返回模式是服务端渲染好了给到浏览器执行的
所以数据返回在不常见的 script 之中的,而不是常见的网络请求之中
5.2编写脚本与配置代理
这里直接给出主要源码
- 代理配置
需要注意的这里IPIDEA也是通过接口参数来实现
代理池标识、地区混播、配置ip时效时间、指定国家ISP运营商等功能
我上面就是配置了地区"新加坡"
所以这里的zone-custom-region-sg 就代表了新加坡的住宅IP代理
const ipideaAuth = {
userName: "XXXX",
password: "XXXX",
};
const targetYoutubeBlogerUrl = "https://www.youtube.com/@vividcore_ai/shorts";
const axiosConfig = {
headers: {
Accept:
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"User-Agent":
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.19 NetType/4G",
},
proxy: {
protocol: "http",
host: null,
port: null,
},
};
/**
* 设置axios的代理
*/
function setIpProxy() {
// 'http://???-zone-custom:????@proxy.ipidea.io:2333',//认证账户名-zone-代理池:认证账户密码@代理地址
axiosConfig.proxy.host = `${ipideaAuth.userName}-zone-custom-region-sg:${ipideaAuth.password}:82c59ac6d2b24f7f.fjt.as.ipidea.online:`;
axiosConfig.proxy.port = `2336`;
logPrint("已设置ipidea动态IP代理", axiosConfig.proxy);
}
- 提取视频信息数据
这里我们主要是拿到返回数据之后进行提取操作
主要提取的数据就包含上诉提及的视频标题、播放量、视频标签
function extractContentFromHTML(htmlString) {
const $ = cheerio.load(htmlString);
const results = [];
// 查找包含 ytInitialData 的 script 标签
$("script").each((index, element) => {
const scriptContent = $(element).html();
// 检查是否包含 ytInitialData
if (scriptContent && scriptContent.includes("ytInitialData")) {
try {
// 提取 JSON 部分
const jsonMatch = scriptContent.match(
/var ytInitialData = ({.*?});/s
);
if (jsonMatch && jsonMatch[1]) {
const jsonData = JSON.parse(jsonMatch[1]);
// 递归遍历对象,查找 primaryText 和 secondaryText
findContentInObject(jsonData, results);
}
} catch (error) {
console.error("解析 JSON 时出错:", error);
}
}
});
return results;
}
function findContentInObject(obj, results, path = "") {
if (!obj || typeof obj !== "object") return;
// 检查当前对象是否包含 primaryText 和 secondaryText
if (
obj.primaryText &&
obj.primaryText.content &&
obj.secondaryText &&
obj.secondaryText.content
) {
const primaryText = obj.primaryText.content;
// 提取hashtags
const hashtags = extractHashtags(primaryText);
// 清理标题(移除hashtags)
const cleanTitle = cleanHashtagsFromTitle(primaryText);
results.push({
primaryText: cleanTitle,
secondaryText: obj.secondaryText.content,
hashtags: hashtags,
});
}
// 递归遍历对象的所有属性
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const newPath = path ? `${path}.${key}` : key;
findContentInObject(obj[key], results, newPath);
}
}
}
存入Excel文件
function saveToExcel(data, filename = "YouTubeAI博主视频数据.xlsx") {
try {
data = JSON.parse(JSON.stringify(data)).map((item, index) => ({
index: index + 1,
...item,
hashtags: item.hashtags.join(", ") || "无",
}));
// 创建工作簿
const wb = XLSX.utils.book_new();
// 将数据转换为工作表
const ws = XLSX.utils.json_to_sheet(data);
// 设置列宽
const colWidth = [
{ wch: 8 }, // 序号
{ wch: 60 }, // 标题
{ wch: 15 }, // 观看次数
{ wch: 40 }, // Hashtags
];
ws["!cols"] = colWidth;
// 将工作表添加到工作簿
XLSX.utils.book_append_sheet(wb, ws, "YouTubeAI博主视频数据");
// // dev-log >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
console.log(`[Dev_Log][${"data"}_]_>>>`, data);
// 写入文件
XLSX.writeFile(wb, filename);
console.log(`数据已保存到 ${filename}`);
return true;
} catch (error) {
console.error("保存Excel文件时出错:", error);
return false;
}
}
5.3执行脚本进行数据采集
我们通过命令行执行Node源码后
我们就能得到一个 YouTubeAI博主视频数据.excel的文件了,打开excel查看结果
5.4分析结果
之后我们就能对该视频数据文件进行数据分析了
这里我们可以简单的对图中的数据分析一下
可以看到所有的视频播放基本都千次播放量的级别
证明这个博主的AI视频是具备竞争力的,其视频题材选取值得我们去分析
最高的93万次播放,涉及的是人物的AI视频
Trump & Putin. 93万次观看 trump, putin, funny, shorts
看来大家对与 川普和京子的关注度很高嘛
嘿嘿,这样看特定领域的出名人物的虚拟视频具备一定的题材优势