最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

基于Python开发的YouTube关键词搜索采集GUI软件工具

网站源码admin3浏览0评论

基于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搜索接口调用

搜索接口返回的JSON数据结构示例:搜索接口返回的json

具体实现步骤:

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详情接口调用

详情接口返回的JSON数据示例:详情接口返回的json

实现流程:

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')
日志文件示例:log文件

三、软件使用演示

再次附上软件操作演示视频,即使没有编程基础的用户也能快速上手:

【工具演示】youtube搜索关键词采集软件

四、结语

软件首发众公号“老男孩的平凡之路”,同时,这款软件仅供个人学习和研究使用,禁止用于任何违法活动。

发布评论

评论列表(0)

  1. 暂无评论