精选副业
‹ 站长专栏
站长原创 · 全文公开

解放双手,利用工具轻松找YouTube对标频道

这篇是我本人写的,所以全文放在这里,你不用领体验卡也能读完。文末有生财原帖链接,评论区的讨论在那边。

更好的阅读体验见飞书文档 解放双手,利用工具轻松找YouTube对标频道 https://rlwxa0zgke.feishu.cn/docx/H2kYdqAQvoB4fwxbHhYcju6... 方波妮跟我说写出来呗,你觉得技术含量不高,不过对于小白来说也是很有帮助的。因此,今天分享一个小工具,对于技术一点都不懂的人不一定能开发出来。 这次做一个全保姆级的分享。2、工具实现的功能演示说明:视频就只抓了几个视频,大家可以实际操作不停程序就一直抓了,可能出现的情况就是有重复的URL,其实不影响实际的数据的。我这里 sleep 的数值大了,因此一个视频就可能有重复了。大家视情况可以调整这个数值3、非常详细的实操流程确保每个人都会3.1 把扩展程序全部关闭,以免插件会对代码造成干扰补充一点:插件关闭后,记得重启下Chrome浏览器链接:chrome://extensions/3.2 复制代码 Shorts自动爬取核心代码 ,同时 F12调出开发面板(苹果电脑按fn,调出f12)我们按F12,就是为了调出 Chrome开发者工作复制文档代码以后,需要在 xx 处替换成自己的apikey,如下图 (这个很重要,再次强调)win电脑:代码输入后,按Enter回车键,如下图会有一个跳动的光标,说明这一步完成了mac电脑:代码输入后,有如图警告⚠️,请手动输入:allow pasting,按enter结束;再次输入以上代码即可。3.3 执行核心代码 run() 程序开始执行直接把 run() 复制粘贴,再按Enter回车,程序就开始跑了这里的 已爬取 1 就是代码 Shorts自动爬取核心代码 如下图的代码段如果想结束,导出很简单,就是地址不包含 shorts就好,比如说点一下首页让地址变成这样程序就结束了3.4 执行核心代码 exportCsv() 文件导出如下图,提示:获取失败:Cannot read properties of umdefine(reading id') 就停止抓取了输入exportCsv() ,文件会自动下载,全部过程就完成了如下图就是导出的文件信息了,可以围绕这个代码进行扩展比如说,导出视频的#标签,在后续就通过#标签来进行一个搜索其他的扩展:调用google API来上传视频、下载视频 Youtube自动化工具分享 & 开发复盘4、用到的知识点4.1 获取Google API密钥Shorts自动爬取核心代码 这个文档是全部的代码,用到的知识点如下图AIzaaq3aJGXdrCMcXpSyCe7_ldNDBH1uzTUYkYY (要换成自己的API KEY)run() exportCsv() AIzaaq3aJGXdrCMcXpSyCe7_ldNDBH1uzTUYkYY 就是Google的API Youtube自动化工具分享 & 开发复盘 这个文档有详细的介绍。当然了,也可以不看这个文档。先搞定第一步,就是获取 Google的API AIzaaq3aJGXdrCMcXpSyCe7_ldNDBH1uzTUYkYYhttps://console.cloud.google.com/ 先进入这个网站如下图点API和服务跳转到这个页面点启用API和服务跳转到下面的页面输入关键词,选第一个跳转到下面的页面与我保持一致,这里要显示 API已启用点管理跳转到这个页面再点凭据 ,我这里已经有了,会显示 API密钥第一次就点创建凭据就好了创建好后,点显示密钥,在【您的 API密钥】 复制就完成第一步说明下:如果对代码不感兴趣,只想知道怎么用,请直接看 3、非常详细的实操流程确保每个人都会4.2 程序执行的关键代码 run() 程序开始执行Shorts自动爬取核心代码 点此链接可以跳转到 run()的代码段,说明:下面的描述是给想学编程的朋友看的,如无兴趣可直接看实操就好publishedAt: resp.items[0].snippet.publishedAt,viewCount: resp.items[0].statistics.viewCount,likeCount: resp.items[0].statistics.likeCount,commentCount: resp.items[0].statistics.commentCount,这里的 publishedAt、viewCount、likeCount、commentCount 就是一个Shorts的 发布时间、观看量、点赞数、评论数 const url = https://youtube.googleapis.com/youtube/v3/videos?part=sta... partstringpart 参数会指定一个逗号分隔列表,其中包含 API 响应将包含的一个或多个 video 资源属性。如果该参数标识了包含子属性的媒体资源,相应子属性将包含在响应中。例如,在 video 资源中,snippet 属性包含 channelId、title、description、tags 和 categoryId 属性。因此,如果您设置了 part=snippet,API 响应将包含所有这些属性。以下列表包含您可以包含在参数值中的 part 名称:contentDetailsfileDetailsidliveStreamingDetailslocalizationsplayerprocessingDetailsrecordingDetailssnippetstatisticsstatussuggestionstopicDetailshttps://youtube.googleapis.com/youtube/v3/videos?part=sta... 在这个请求的链接,我请求了两个参数 statistics, snippet再看这个代码就清楚了publishedAt: resp.items[0].snippet.publishedAt,viewCount: resp.items[0].statistics.viewCount,likeCount: resp.items[0].statistics.likeCount,commentCount: resp.items[0].statistics.commentCount,publishedAt 还自于 snippetviewCount 还自于 viewCount 、likeCount、commentCount如果你想知道更详细的,那么就看这个链接 https://developers.google.com/youtube/v3/docs/videos?hl=z... "kind": "youtube#video","etag": etag,"id": string,"snippet": { "publishedAt": datetime,"channelId": string,"title": string,"description": string,"thumbnails": { (key):{ "url": string,"width": unsigned integer,"height": unsigned integer } },"channelTitle": string,"tags": [ string ],"categoryId": string,"liveBroadcastContent": string,"defaultLanguage": string,"localized": { "title": string, "description": string }, "defaultAudioLanguage": string },"contentDetails": { "duration": string, "dimension": string, "definition": string, "caption": string, "licensedContent": boolean,"regionRestriction": { "allowed": [ string ], "blocked": [ string ] },"contentRating": { "acbRating": string, "agcomRating": string, "anatelRating": string, "bbfcRating": string, "bfvcRating": string, "bmukkRating": string, "catvRating": string, "catvfrRating": string, "cbfcRating": string, "cccRating": string, "cceRating": string, "chfilmRating": string, "chvrsRating": string, "cicfRating": string, "cnaRating": string, "cncRating": string, "csaRating": string, "cscfRating": string, "czfilmRating": string, "djctqRating": string,"djctqRatingReasons": [, string ],"ecbmctRating": string, "eefilmRating": string, "egfilmRating": string, "eirinRating": string, "fcbmRating": string, "fcoRating": string, "fmocRating": string, "fpbRating": string, "fpbRatingReasons": [, string ], "fskRating": string, "grfilmRating": string, "icaaRating": string, "ifcoRating": string, "ilfilmRating": string, "incaaRating": string, "kfcbRating": string, "kijkwijzerRating": string, "kmrbRating": string, "lsfRating": string, "mccaaRating": string, "mccypRating": string, "mcstRating": string, "mdaRating": string, "medietilsynetRating": string, "mekuRating": string, "mibacRating": string, "mocRating": string, "moctwRating": string, "mpaaRating": string, "mpaatRating": string, "mtrcbRating": string, "nbcRating": string, "nbcplRating": string, "nfrcRating": string, "nfvcbRating": string, "nkclvRating": string, "oflcRating": string, "pefilmRating": string, "rcnofRating": string, "resorteviolenciaRating": string, "rtcRating": string, "rteRating": string, "russiaRating": string, "skfilmRating": string, "smaisRating": string, "smsaRating": string, "tvpgRating": string, "ytRating": string }, "projection": string, "hasCustomThumbnail": boolean },"status": { "uploadStatus": string, "failureReason": string, "rejectionReason": string, "privacyStatus": string, "publishAt": datetime, "license": string, "embeddable": boolean, "publicStatsViewable": boolean, "madeForKids": boolean, "selfDeclaredMadeForKids": boolean, "containsSyntheticMedia": boolean },"statistics": { "viewCount": string, "likeCount": string, "dislikeCount": string, "favoriteCount": string, "commentCount": string },"paidProductPlacementDetails": { "hasPaidProductPlacement": boolean }, "player": { "embedHtml": string, "embedHeight": long, "embedWidth": long }, "topicDetails": { "topicIds": [ string ], "relevantTopicIds": [ string ], "topicCategories": [ string ] },"recordingDetails": { "recordingDate": datetime },"fileDetails": { "fileName": string, "fileSize": unsigned long, "fileType": string, "container": string, "videoStreams": [ { "widthPixels": unsigned integer, "heightPixels": unsigned integer, "frameRateFps": double, "aspectRatio": double, "codec": string, "bitrateBps": unsigned long, "rotation": string, "vendor": string } ],"audioStreams": [ { "channelCount": unsigned integer, "codec": string, "bitrateBps": unsigned long, "vendor": string } ], "durationMs": unsigned long, "bitrateBps": unsigned long, "creationTime": string },"processingDetails": { "processingStatus": string,"processingProgress": { "partsTotal": unsigned long, "partsProcessed": unsigned long, "timeLeftMs": unsigned long },"processingFailureReason": string, "fileDetailsAvailability": string, "processingIssuesAvailability": string, "tagSuggestionsAvailability": string, "editorSuggestionsAvailability": string, "thumbnailsAvailability": string },"suggestions": { "processingErrors": [ string ], "processingWarnings": [ string ], "processingHints": [ string ], "tagSuggestions": [ { "tag": string, "categoryRestricts": [ string ] } ], "editorSuggestions": [ string ] },"liveStreamingDetails": { "actualStartTime": datetime, "actualEndTime": datetime, "scheduledStartTime": datetime, "scheduledEndTime": datetime, "concurrentViewers": unsigned long, "activeLiveChatId": string }, "localizations": { (key): { "title": string, "description": string } }}讲这么细的目的是让你对我的代码进行修改,如果你想获取视频更多的参考,你就不用来问我了,授人以鱼,不如授人以渔。4.3 程序执行的关键代码 exportCsv() 文件导出这一部分的代码没有特别要讲的,原理就是把存到浏览器的信息保存到后缀为 csv的文件,这里的result你自己可以进行修改,取一个自己喜欢的名字就好。5、感谢感谢 @方波妮 的督促,不然这个帖子可能遥遥无期哈哈哈感谢 马哥@老马内容出海 Youtube官方api调用以及selenium方式采集 提供的信息感谢 @敖健龙 Youtube自动化工具分享 & 开发复盘 提供的好用的软件

社群里还有 966 篇别人的实操复盘

体验卡免费,不花一分钱3 天看遍社群近 180 天全部内容正式加入 72 小时内无理由退款
生财有术体验卡
领取体验卡的二维码

长按保存这张二维码,打开微信扫一扫,从相册选这张图即可添加;电脑上直接用微信扫码。

我写的这些免费读。体验卡免费领,3 天内可以查阅社群近 180 天的全部内容。
站长专栏的其他文章
书情
谈谈频道限流的问题,应该如何解决
2025-04-27 · 约 2536 字
读全文
书情
YouTube算法解析
2025-03-28 · 约 8425 字
读全文
书情
油管赚钱:很多人正在学习错误的知识,为什么在YouTube上养号不是一个必选项?
2025-03-20 · 约 2801 字
读全文