【youtube爬虫】油管评论采集软件v3.0版,一键批量采集指定视频下评论

本软件工具仅限于学术交流使用,严格遵循相关法律法规,符合平台内容合法合规性,禁止用于任何商业用途!

一、背景介绍

1.1 爬取目标

您好!我是 @马哥python说 ,一枚10年+程序猿,现全职独立开发。

我用Python独立开发了一款爬虫软件:爬油管评论软件。作用是:爬取油管指定视频下的评论数据,支持批量视频的采集。

包含10个关键字段:

scss 复制代码
1. cid(评论id)
2. text(评论内容)
3. time(评论时间_相对)
4. author(评论者昵称)
5. channel(评论者频道)
6. votes(评论点赞数)
7. replies(评论回复数)
8. time_parsed(评论时间转换)
9. time2(评论时间_绝对)
10. video_id(视频id)

软件是通过调用YouTube的网页接口,不是模拟操作浏览器,所以稳定性较高!

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

《目标视频.xlsx》模板中的填写:

也就是说,在目标视频文件中填入了5个待爬视频,然后在软件界面上选择爬这5个视频的前30条热门评论。所以,采集结果csv文件中会自动导出150条热门评论,如下:

爬取结果截图:

以上。

1.2 演示视频

软件使用过程演示:

mp.weixin.qq.com/s/6tvQyS4QxohuELKUZJnbIA

1.3 软件说明

几点重要说明:

  1. 专为文科生研发,Win系统、Mac系统均可直接运行,无需配置python环境
  2. 软件通过接口爬取,并非通过模拟浏览器等RPA类工具,稳定性较高!
  3. 软件运行完成后,会在当前文件夹(即,软件所在文件夹)生成csv结果文件
  4. 爬取过程中,每爬一页,存一次结果。并非爬完最后一次性保存!防止因异常中断导致丢失前面的数据(每页请求间隔1~2s)
  5. 爬取过程中,有log文件详细记录运行过程,方便回溯
  6. 采集结果有10个字段,含:cid(评论id),text(评论内容),time(评论时间_相对),author(评论者昵称),channel(评论者频道),votes(评论点赞数),replies(评论回复数),time_parsed(评论时间转换),time2(评论时间_绝对),video_id(视频id)

以上。

二、代码概要

2.1 调用接口

为保护软件原创版权,不开放核心爬虫逻辑代码。

最后,把json数据转出到csv文件:

python 复制代码
self.tk_show('[第{}/{}个][{}][{}]comment:{}'.format(video_idx, video_id_total, video_id, cnt, comment['text']))
with open('./jsons/{}.json'.format(video_id), 'a+', encoding='utf-8') as f:
	f.write(json.dumps(comment, ensure_ascii=False))
	f.write('\n')

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

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

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

2.2 软件界面模块

主窗口部分:

python 复制代码
# 创建主窗口
root = tk.Tk()
root.title('爬油管评论软件v3.0 | 马哥python说 |')
# 设置窗口大小
root.minsize(width=850, height=650)
# 左上角图标
root.iconbitmap('mage.ico')

输入控件部分:

python 复制代码
# 爬取数量
tk.Label(root, text='爬取数量:').place(x=30, y=125)
comment_num = tk.Spinbox(root, from_=-1, to=9999999, increment=1, width=10, font=('微软', 15))
comment_num.place(x=100, y=125, anchor='nw')
tk.Label(root, fg='red', text='每个视频爬前几条评论,-1代表爬取全部').place(x=240, y=125)

运行日志部分:

python 复制代码
# 运行日志
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')  # 摆放位置

底部版权部分:

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

以上。

2.3 日志模块

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

python 复制代码
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'
	# 将其保存到特定目录
	case_dir = r'./logs/'
	info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
						when='MIDNIGHT',
						interval=1,
						backupCount=7,
						encoding='utf-8')

日志文件:

以上。

END、原创声明

工具【爬油管评论软件】首发于众公号"老男孩的平凡之路",软件仅限于学术交流技术探讨,请勿用于商业用途!

相关推荐
许泽宇的技术分享7 小时前
当AI学会“说人话“:Azure语音合成技术的魔法世界
后端·python·flask
光泽雨7 小时前
python学习基础
开发语言·数据库·python
裤裤兔7 小时前
python爬取pdf文件并保存至本地
chrome·爬虫·python·pdf·网络爬虫
Solyn_HAN7 小时前
非编码 RNA(ceRNA/lncRNA/circRNA)分析完整流程:从数据下载到功能验证(含代码模板)
python·bash·生物信息学·r
CesareCheung7 小时前
JMeter 进行 WebSocket 接口压测
python·websocket·jmeter
beijingliushao8 小时前
95-Python爬虫-正则表达式
爬虫·python·正则表达式
百***06018 小时前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
吃个糖糖8 小时前
pytorch 卷积操作
人工智能·pytorch·python
麦麦麦造8 小时前
比 pip 快 100 倍!更现代的 python 包管理工具,替代 pip、venv、poetry!
后端·python
AndrewHZ8 小时前
【图像处理基石】图像去雾算法入门(2025年版)
图像处理·人工智能·python·算法·transformer·cv·图像去雾