【爬虫工具】油管视频批量采集软件

一、背景介绍

1.1 爬取目标

在这里插入图片描述

我用Python独立开发了一款爬虫软件,作用是:通过搜索关键词采集ytb的搜索结果,包含14个关键字段:关键词,页码,视频标题,视频id,视频链接,发布时间,视频时长,频道名称,频道id,频道链接,播放数,点赞数,评论数,视频简介。

软件是通过调用ytb的谷歌官方API实现,并非通过网页爬虫,所以稳定性较高!

开通ytb的API:【详细教程】手把手教你开通ytb官方API接口(youtube data api v3)

开发成界面软件的目的:方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!

软件界面截图:软件运行界面

爬取结果截图:
结果截图1:

结果截图2:

结果截图3:

以上。

1.2 演示视频

软件使用演示:(不懂编程的小白直接看视频,了解软件作用即可,无需看代码)

【软件演示】油管关键词搜索采集软件

1.3 软件说明

几点重要说明:软件说明

以上。

二、代码讲解

2.1 调用API-搜索接口

先给大家看看搜索接口的返回json数据:搜索接口de返回数据

首先,定义接口地址作为请求地址:

# 请求地址
url = 'https://youtube.googleapis.com/youtube/v3/search'

定义一个请求头,用于伪造浏览器:

# 请求头
self.headers = {
	"Accept": "*/*",
	"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

加上请求参数,告诉程序你的爬取条件是什么:

# 请求参数
params = {
	'part': 'snippet',
	'maxResults': '25',
	'q': search_keyword,
	'key': self.API_KEY,
	'pageToken': pageToken,
	'order': self.sort_by,
	'publishedBefore': str(self.end_date) + 'T00:00:00Z',
	'publishedAfter': str(self.start_date) + 'T00:00:00Z',
}

2.2 调用API-详情接口

同样,先给大家看看详情接口的返回json数据:详情接口de返回数据

首先,定义接口地址作为请求地址:

# 请求地址
url = 'https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&id={}&key={}'.format(video_id, self.API_KEY)

定义一个请求头,用于伪造浏览器:

# 请求头
self.headers = {
	"Accept": "*/*",
	"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

下面就是发送请求和接收数据:

# 发送请求
r = requests.post(url, headers=self.headers)
# 接收数据
json_data = r.json()

逐个解析字段数据,以"播放数"为例:

# 播放数
try:
	viewCount = json_data['items'][0]['statistics']['viewCount']
except:
	viewCount = ''

其他字段同理,不再赘述。

最后,是把数据保存到csv文件:

# 保存csv文件
with open(self.result_file, 'a+', encoding='utf_8_sig', newline='') as f:
	writer = csv.writer(f)
	writer.writerow(
		[search_keyword, page, title, videoId, video_url, create_time, duration, channelTitle,
		 channelId, channel_url, viewCount, likeCount, commentCount, desc])
self.tk_show('csv保存成功:' + self.result_file)

我采用csv库保存结果,实现每爬一条存一次,防止中途异常停止丢失前面的数据。

完整代码中,还含有:读取API_KEY判断、循环结束条件判断、拼接频道URL、try异常保护、日志记录等关键实现逻辑。

2.3 API_KEY说明

API_KEY是访问ytb官方接口的密钥,只有拿到密钥,并配置到代码里,才能正常调用API接口。

API开通的教程:【详细教程】手把手教你开通ytb官方API接口(youtube data api v3)

拿到密钥之后,配置到当前文件的config.json里面即可,如下:config.json

另外,魔法是一切的前提,此处不便多说!

2.4 软件界面模块

主窗口部分:

# 创建主窗口
root = tk.Tk()
root.title('爬油罐搜索软件v1.0 | 马哥python说 | 定制+v:493882434')
# 设置窗口大小
root.minsize(width=850, height=650)
# 左上角图标
root.iconbitmap('mage.ico')

输入控件部分:

# keyword
tk.Label(root, justify='left', text='搜索关键词:').place(x=30, y=90)
entry_kw = tk.Text(root, bg='#ffffff', width=70, height=2, )
entry_kw.place(x=125, y=90, anchor='nw')  # 摆放位置
tk.Label(root, justify='left', text='多关键词以|分隔', fg='red', ).place(x=630, y=90)

运行日志部分:

# 运行日志
tk.Label(root, justify='left', text='运行日志:').place(x=30, y=280)
show_list_Frame = tk.Frame(width=780, height=260)  # 创建<消息列表分区>
show_list_Frame.pack_propagate(0)
show_list_Frame.place(x=30, y=310, anchor='nw')  # 摆放位置

底部版权部分:

# 版权信息
copyright = tk.Label(root, text='@马哥python说 All rights reserved.', font=('仿宋', 10), fg='grey')
copyright.place(x=290, y=625)

以上。

2.5 日志模块

好的日志功能,方便软件运行出问题后快速定位原因,修复bug。
核心代码:

def get_logger(self):
	self.logger = logging.getLogger(__name__)
	# 日志格式
	formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
	# 日志级别
	self.logger.setLevel(logging.DEBUG)
	# 控制台日志
	sh = logging.StreamHandler()
	log_formatter = logging.Formatter(formatter, datefmt='%Y-%m-%d %H:%M:%S')
	# info日志文件名
	info_file_name = time.strftime("%Y-%m-%d") + '.log'
	# 将其保存到特定目录,ap方法就是寻找项目根目录,该方法博主前期已经写好。
	case_dir = r'./logs/'
	info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
						when='MIDNIGHT',
						interval=1,
						backupCount=7,
						encoding='utf-8')

日志文件截图:log文件

以上。

三、获取源码及软件

完整python源码及exe软件,微信公众号"老男孩的平凡之路“后台回复”爬油管搜索视频软件"即可获取。点击直达

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/671033.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源模型应用落地-LangSmith试炼-入门初体验-监控和自动化(五)

一、前言 在许多应用程序中&#xff0c;特别是在大型语言模型(LLM)应用程序中&#xff0c;收集用户反馈以了解应用程序在实际场景中的表现是非常重要的。 LangSmith可以轻松地将用户反馈附加到跟踪数据中。通常最好提供一个简单的机制(如赞成和反对按钮)来收集用户对应用程序响…

工控一体机5寸显示器电容触摸屏(YA05WK)产品规格说明书

如果您对工控一体机有任何疑问或需求&#xff0c;或者对如何集成工控一体机到您的业务感兴趣&#xff0c;可移步控芯捷科技。 一、硬件功能介绍 YA05WK是我公司推出的一款新型安卓屏&#xff0c;4核Cortex-A7 架构&#xff0c;主频1.2GHz的CPU。采用12V供电&#xff0c;标配5寸…

使用QT生成二维码的两种方式

目录 使用QRenCode生成二维码编译生成QRenCode库使用QRenCode结果演示优缺点&#xff1a; 使用QZXing进行二维码的编码和解码编译源码使用QZXing库运行结果优缺点 使用QRenCode生成二维码 编译生成QRenCode库 QRenCode开源库 下载好之后使用cmake-gui打开进行构建生成。 点击…

mathtype7.0产品密钥及2024最新软件激活教程步骤

在数字化教育日益普及的今天&#xff0c;如何有效利用技术工具来提高数学学习的效率和质量&#xff0c;成为了教育工作者和学生共同关注的热点。特别是在处理复杂的数学公式、符号以及方程式时&#xff0c;传统的输入方式往往费时费力&#xff0c;且容易出错。为此&#xff0c;…

如何用python做一个用户登录界面——浔川python社

1 需解决的问题&#xff1a; 1.1如何用python做一个用户登录界面&#xff1f; 1.2需要用到哪些库、模块&#xff1f; 2 问题解决&#xff1a; 2.1 回答 1.1 &#xff1a;合理即可&#xff0c;无标准回答。 2.2 回答 1.2 &#xff1a;tk库&#xff08;缩写&#xff09;、GUL界面…

redis基础学习

redis是一个键值对类型的NoSql类型的数据库。 NoSql&#xff08;Non-relational SQL的缩写&#xff0c;也有人看作是not only sql的缩写&#xff09;型数据库&#xff0c;具有以下特征&#xff1a; 1、非结构化&#xff1a;几乎没有约束&#xff0c;约束很少&#xff0c;这要看…

【LLM】两篇多模态LLM综述MultiModal Large Language Models

note &#xff08;一&#xff09;现有的 MM-LLM 的趋势&#xff1a; (1)从专门强调 MM 理解对特定模态的生成的进展&#xff0c;并进一步演变为任何到任何模态的转换&#xff08;例如&#xff0c;MiniGPT-4 → MiniGPT-5 → NExT-GPT&#xff09;&#xff1b; (2) 从 MM PT 提…

神经网络与深度学习——第7章 网络优化与正则化

本文讨论的内容参考自《神经网络与深度学习》https://nndl.github.io/ 第7章 网络优化与正则化 网络优化与正则化 网络优化 网络结构多样性 高维变量的非凸优化 神经网络优化的改善方法 优化算法 小批量梯度下降 批量大小选择 学习率调整 学习率衰减 学习率预热 周期性学习率调…

装甲车启动电源的安全性能分析

装甲车辆启动电源是一种为装甲车辆提供启动动力的专业设备。它通常被用于 火箭兵 、步兵战车、装甲运兵车等JS车辆&#xff0c;这些车辆通常需要较高的启动功率来启动其发动机&#xff0c;尤其是装甲车的发动机&#xff0c;由于其功率大&#xff0c;启动对电力要求很高。在现代…

3DMAX一键虚线图形插件DashedShape使用方法

3DMAX一键虚线图形插件使用方法 3dMax一键虚线图形插件&#xff0c;允许从场景中拾取的样条线创建虚线形状。该工具使你能够创建完全自定义的填充图案&#xff0c;为线段设置不同的材质ID&#xff0c;并在视口中进行方便的预览。 【版本要求】 3dMax 2012 – 2025&#xff08;…

HarmonyOS应用开发学习历程(1)初识DevEco Studio

1.create project Bundle name&#xff1a;包名&#xff0c;标识应用程序&#xff0c;默认应用ID也使用该名 Compile SDK&#xff1a;编译时API版本 2.工程目录 AppScope&#xff1a;应用全局所需资源 entry&#xff1a;应用的主模块&#xff0c;含代码、资源 hvigor&#…

Java多线程问题

线程 何为线程&#xff1a;线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源&#xff0c;但每个线程有自己的程序计数器、虚拟机栈和本地方法栈&#xff0c;所以系统在产生一个线程&#xf…

OSEK错误处理及跟踪调试

1 前言 如表1所示&#xff0c;OSEK提供了一些特殊的钩子例程&#xff08;Hook routines&#xff09;&#xff0c;应用层可以在钩子函数中自定义操作&#xff0c;以参与到操作系统的内部处理中。 表1 钩子函数类型 钩子函数例程功能用途ErrorHook用于错误处理StartupHook在系统启…

【论文复现|智能算法改进】基于多策略麻雀搜索算法的机器人路径规划

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.改进点 改进的无限折叠迭代混沌映射 无限折叠迭代映射(ICMIC) 常用于图像加密方向的研究, 基本思想是首先生成[0,1]之间的混沌序列, …

【Qt秘籍】[008]-Qt中的connect函数

在Qt框架中&#xff0c;connect函数是一个非常核心的函数&#xff0c;用于实现信号&#xff08;Signals&#xff09;和槽&#xff08;Slots&#xff09;之间的连接&#xff0c;它是Qt信号槽机制的关键所在。信号槽机制是一种高级的通信方式&#xff0c;允许对象在状态改变时通知…

掘金AI 商战宝典-系统班:2024掘金AIGC课程(30节视频课)

课程目录 1-第一讲学会向Al提问&#xff1a;万能提问公式_1.mp4 2-第二讲用AI写视频脚本_1.mp4 3-第三讲用AI写视频口播文案_1.mp4 4-第四讲用AI自动做视频&#xff08;上&#xff09;_1.mp4 5-第五讲用AI自动做视频&#xff08;中&#xff09;_1.mp4 6-第六讲用AI自动做视…

1. Mybatis基础操作

目录 1.1 需求 1.2 准备 1.3 删除 1.3.1 功能实现 1.3.2 日志输入 1.3.3 预编译SQL 1.3.3.1 介绍 1.3.3.2 SQL注入 1.3.3.3 参数占位符 1.4 新增 1.4.1 基本新增 1.4.2 主键返回 1.5 更新 1.6 查询 1.6.1 根据ID查询 1.6.2 数据封装 1.6.3 条件查询 1.6.4 参…

Tree——输出项目的文件结构(Linux)

输出项目中的文件结构可以使用tree命令。tree是一个用于以树状结构显示目录内容的命令行工具。它非常适合快速查看项目的文件结构。安装&#xff1a; sudo apt-get install tree 使用&#xff1a; 在命令行中导航到项目的根目录&#xff0c;输出文件结构。 tree 也可以将结构输…

NXP RT1060学习总结 - CANFD功能

1、RT1060-CAN FD功能简介 这里使用RT1060系列的1064芯片进行开发&#xff0c;测试板是官方提供的开发板&#xff1b;RT1060系列支持3路CAN功能&#xff0c;CAN1和CAN2只能最为普通的CAN外设&#xff0c;支持CAN2.0&#xff0c;而CAN3支持CAN-FD功能&#xff1b;CAN-FD功能这里…

数据库概念

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…