基于Python开发的YouTube关键词搜索采集GUI软件工具
本软件工具仅限学术交流使用,严格遵循相关法律法规,符合平台合法性,禁止任何商业用途!
一、项目概述
1.1 项目背景
作为一名拥有10年开发经验的程序员,我开发了一款基于Python的YouTube搜索结果采集工具。该工具通过调用YouTube官方API接口,实现根据关键词采集搜索结果的功能,与传统网页爬虫不同,使用API的方式具备更高的稳定性。
工具采集的数据包含14个关键信息字段,分别为:搜索关键词、页码、视频标题、视频ID、视频链接、发布时间、视频时长、频道名称、频道ID、频道链接、播放数、点赞数、评论数以及视频简介 。
开发成可视化界面软件的初衷,是为了降低使用门槛,即使没有编程基础、未安装Python环境的用户,也能通过简单双击操作快速使用。
1.2 软件展示
1.3 软件核心说明
在使用软件前,需了解以下关键信息:
代码语言:txt复制1. Windows用户可直接双击打开使用,无需安装Python运行环境,非常方便!
2. 需要把API_KEY填入config文件,并在软件界面填入各筛选条件(关键词、日期范围、爬取页数、排序方式等)
3. 排序方式支持:relevant/date/viewCount/rating,这4种方式
4. 支持同时爬多个关键词,以|为分隔符
5. 爬取过程中,每爬一条,存一次csv结果,防止程序异常中断丢失前面的数据(每条间隔1~2s)
6. 爬取过程中,有log文件详细记录运行过程,方便回溯
7. 爬取过程中,自动导出结果到csv文件
8. 爬取共14个关键字段,含:关键词,页码,视频标题,视频id,视频链接,发布时间,视频时长,频道名称,频道id,频道链接,播放数,点赞数,评论数,视频简介。
二、技术实现详解
2.1 API搜索接口调用
具体实现步骤:
1、定义请求地址:
代码语言:python代码运行次数:0运行复制# 请求地址
url = ''
2、设置请求头:模拟浏览器请求,提高请求成功率
代码语言:python代码运行次数:0运行复制# 请求头
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"
}
3、配置请求参数:根据需求设定搜索条件
代码语言:python代码运行次数:0运行复制# 请求参数
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详情接口调用
实现流程:
1、定义请求地址:
代码语言:python代码运行次数:0运行复制# 请求地址
url = ';id={}&key={}'.format(video_id, self.API_KEY)
2、设置请求头:与搜索接口保持一致
代码语言:python代码运行次数:0运行复制# 请求头
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"
}
3、发送请求与解析数据:
代码语言:python代码运行次数:0运行复制# 发送请求
r = requests.post(url, headers=self.headers)
# 接收数据
json_data = r.json()
# 以播放数解析为例
try:
viewCount = json_data['items'][0]['statistics']['viewCount']
except:
viewCount = ''
4、数据存储:使用csv库将数据实时保存到文件,防止数据丢失
代码语言:python代码运行次数:0运行复制# 保存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)
2.3 API_KEY配置
API_KEY是调用YouTube官方接口的关键凭证,获取API_KEY及开通API的详细教程见:
【图文教程】教你开通youtube data api v3 接口
config.json
文件中,如下图所示:config配置文件2.4 软件界面设计
1、主窗口:
代码语言:python代码运行次数:0运行复制# 创建主窗口
root = tk.Tk()
root.title('爬YouTube搜索软件v1.0 |')
# 设置窗口大小
root.minsize(width=850, height=650)
# 左上角图标
root.iconbitmap('mage.ico')
2、输入控件:
代码语言:python代码运行次数:0运行复制# 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)
3、运行日志显示:
代码语言:python代码运行次数:0运行复制# 运行日志
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') # 摆放位置
4、底部版权信息:
代码语言:python代码运行次数:0运行复制# 版权信息
copyright = tk.Label(root, text='@马哥python说 All rights reserved.', font=('仿宋', 10), fg='grey')
copyright.place(x=290, y=625)
2.5 日志功能开发
日志模块对于排查软件运行问题至关重要,核心实现代码如下:
代码语言:python代码运行次数:0运行复制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')
三、软件使用演示
再次附上软件操作演示视频,即使没有编程基础的用户也能快速上手:
【工具演示】youtube搜索关键词采集软件
四、结语
软件首发众公号“老男孩的平凡之路”,同时,这款软件仅供个人学习和研究使用,禁止用于任何违法活动。