前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于Python开发的YouTube关键词搜索采集GUI软件工具

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

原创
作者头像
python迷3016
发布于 2025-04-28 02:02:17
发布于 2025-04-28 02:02:17
15700
代码可运行
举报
运行总次数:0
代码可运行

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

一、项目概述

1.1 项目背景

作为一名拥有10年开发经验的程序员,我开发了一款基于Python的YouTube搜索结果采集工具。该工具通过调用YouTube官方API接口,实现根据关键词采集搜索结果的功能,与传统网页爬虫不同,使用API的方式具备更高的稳定性。

工具采集的数据包含14个关键信息字段,分别为:搜索关键词、页码、视频标题、视频ID、视频链接、发布时间、视频时长、频道名称、频道ID、频道链接、播放数、点赞数、评论数以及视频简介 。

开发成可视化界面软件的初衷,是为了降低使用门槛,即使没有编程基础、未安装Python环境的用户,也能通过简单双击操作快速使用。

1.2 软件展示

软件运行界面如下:
软件界面
软件界面
采集结果示例:
爬取结果
爬取结果

1.3 软件核心说明

在使用软件前,需了解以下关键信息:

代码语言:txt
AI代码解释
复制
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
搜索接口返回的json

具体实现步骤:

1、定义请求地址

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 请求地址
url = 'https://youtube.googleapis.com/youtube/v3/search'

2、设置请求头:模拟浏览器请求,提高请求成功率

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 请求头
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
运行
AI代码解释
复制
# 请求参数
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
详情接口返回的json

实现流程:

1、定义请求地址

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 请求地址
url = 'https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&id={}&key={}'.format(video_id, self.API_KEY)

2、设置请求头:与搜索接口保持一致

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 请求头
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
运行
AI代码解释
复制
# 发送请求
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
运行
AI代码解释
复制
# 保存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配置文件
config配置文件

2.4 软件界面设计

1、主窗口

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 创建主窗口
root = tk.Tk()
root.title('爬YouTube搜索软件v1.0 |')
# 设置窗口大小
root.minsize(width=850, height=650)
# 左上角图标
root.iconbitmap('mage.ico')

2、输入控件

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 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
运行
AI代码解释
复制
# 运行日志
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
运行
AI代码解释
复制
# 版权信息
copyright = tk.Label(root, text='@马哥python说 All rights reserved.', font=('仿宋', 10), fg='grey')
copyright.place(x=290, y=625)

2.5 日志功能开发

日志模块对于排查软件运行问题至关重要,核心实现代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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文件
log文件

三、软件使用演示

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

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

四、结语

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ModSecurity安装了,不懂原理和规则?这篇帮你搞定
之前的文章中介绍了Nginx中添加模块ModSecurity,默认ModSecurity
李俊鹏
2021/02/23
5.4K0
ModSecurity安装了,不懂原理和规则?这篇帮你搞定
Nginx - 集成ModSecurity实现WAF功能
ModSecurity是一款开源的Web应用防火墙(WAF),它能够保护Web应用免受各种类型的攻击。作为一个嵌入式模块,ModSecurity可以集成到常见的Web服务器(如Apache、Nginx)中,以拦截和阻止恶意的HTTP请求。其设计目标是提供一个灵活、可配置的安全解决方案,能够保护Web应用免受SQL注入、跨站脚本(XSS)、请求伪造、路径遍历等各种常见的Web攻击。
小小工匠
2024/05/26
1.8K0
WAF和RASP技术,RASP与WAF的“相爱相杀”
WAF全称叫Web Application Firewall,也就是web应用防火墙,和传统防火墙的区别是,它是工作在应用层的防火墙,主要针对web请求和响应进行检测和防护。
德迅云安全--陈琦琦
2024/04/09
8150
闲谈WAF与反爬虫
Openresty的核心功能就提供WEB服务,Openresty还有个很重要的功能就是用作反向代理服务器。 WAF防护功能的基本原理就是利用Openresty的反向代理模式工作。 因为Openresty服务器作为后端WEB服务器的前置服务器,先于后端服务器收到用户的请求,Openresty服务器在某个处理阶段,通过LUA语言读取用户的HTTP请求数据,并通过特定规则过滤策略,发现用户请求中的恶意攻击行为。 当Openresty的拦截分析功能,发现用户的请求含有威胁的意图时,直接将用户的请求进行了拦截。这时的请求,实际上不会被发送给业务服务器。(Openresty的常用处理阶段) 这种模式本质上,也是一种串行的流量复制模式,从时间轴上用户请求的数据,被按时间的前后顺序复制了两份, 一份数据先传给反向代理服务模式下的代理服务器,当代理服务器经过安全策略的检查,发现用户的请求没有威胁行为,又将几乎同样的请求数据转发给上游的业务服务器。 现在还有一种基于日志分析的WEB防护系统,这种系统依赖与日志的产生,在请求交给业务服务器,产生日志以后,对日志进行分析,当发现有异常攻击行为在请求当中,会从下次请求的时进行拦截。 这种模式没有建立下反向代理的工作模式下,只有当就服务器已经响应了用户请求后, 生成日志之后才能分析,相对来说处理是滞后一步的。 这种场景下的系统,要求拦截模块可以与分析系统、业务系统协同工作。 还有一种的是基于流量并行复制,将要给业务服务器的请求数据,先通过分光或是其他形式的流量复制,把流量发给其他服务器,其他服务器通过特定服务的流量协议的数据解析,将给业务的HTTP解析取得,然后分析流量的威胁行为,当异常请求再来的时候,通过业务服务器的前置Operesty、Tengine、Nginx等前置或是负载均衡,或部署业务本身服务的拦截模块进行拦截。 这种模式的处理,反向代理模式的代理那部分拦截模块,不负责异常的分析,只做具体的拦截动作。这样最大的好处是,代理或是负载均衡集群没有“思考”的时间消耗,只是执行具体拦截,这样的反向代理的模式下,不会消耗业务服务的太多响应时间。 这种模式,最大限度减少代理服务器对业务服务器的响应损耗,某些业务对应影响业务所消耗的时间严格的限制,并且对已上线的业务来说,压测准确率不能交十分好的把握,如果处理不好,出现正则风暴的可能性也都是有的,同样的问题是拦截相对第一时间拦截响应的模式,也会滞后处理。 各种模式都有自己的好处和弊端,对于不同的业务规模可以使用对应的模式与其匹配。 对于一些小型的业务来说,可以不使用太重型的武器,理论上来讲,只要反向代理的模式可以覆盖业务量,成本和部署好控制,可以选用反向代理模式的WEB防火墙部署。这种模式对DDOS基本也是无解的。 WAF系统的规则构建,针对于单一的业务来讲,没有必要求大求全,除去通用规则,Python业务服务没有必要配置PHP的拦截规则,Python的业务语言框架,也不用要求WAF系统进行拦截, 因为当前业务用的Python的框架, 不会有PHP框架的漏洞。 WAF和反爬虫系统不一样的地方,排除扫描器的爬虫行为。爬虫系统的目的是抓取网上的有价值的网页内容, 而不是非要爬取数据的同时,在爬取请求的链接中加入XSS和SQL注入,毕竟爬虫是抓取内容,而不是把发现漏洞和攻陷主机或是挂马为目的。 反爬系统的异常和WAF系统检查异常的角度是不一样的。因为请求者的目的就不一样。但是他们采用的技术手段有时候是类似的。无论从路由器设备就开始取得流量数据,还是通过镜像在链路层,或是网络层复制流量、还是通过Openresty反向代理代理的7层读取流量数据,要根据业务的硬件架构和软件结构来分析判断匹配对应模式的。 WAF系统的拦截规则不是万能的,即使是同样的异常拦截规则,也不是可以简单的移植到别的系统上的。一种是规则解释模块的功能问题,还有性能问题,核心的引擎平台怎么样。
糖果
2019/11/20
2.3K0
干货 | 实战绕过WAF各种姿势总结
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途
网络安全自修室
2022/03/30
4.3K0
干货 | 实战绕过WAF各种姿势总结
如何做一款好的waf产品(4)
对于网络设备来说管理是一个重要的部分,尤其对于安全设备来说,因为业务 需要的不停变化需要对设备不停的进行设置。
stan1ey
2021/08/11
5750
如何做一款好的waf产品(4)
waf绕过——打狗棒法
某狗可谓是比较好绕过的waf,但是随着现在的发展,某狗也是越来越难绕过了,但是也不是毫无办法,争取这篇文章给正在学习waf绕过的小白来入门一种另类的waf绕过。
红队蓝军
2023/09/24
5740
waf绕过——打狗棒法
如何做一款好的waf产品(3)
为每一个HTTP事务(一个事务定义为一个请求和其相应的响应)分配一个唯一的ID并在包括在日志信息里面。
stan1ey
2021/08/11
5830
如何做一款好的waf产品(3)
我的wafBypass之道
去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常谈的话题也没什么可写的。
用户1467662
2019/04/19
3K0
我的wafBypass之道
Bypass WAF (小白食用)
前言:现在绕过waf手法在网上层出不穷,但是大家好像忘记一个事情就是,思路比方法更有价值,大家对着网上一些手法直接生搬硬套,不在意是不是适合的场景,网上的文章,好像着急的把所有的绕过方法都给你罗列出来。没有传授给你相应的技巧。到最后,小白拿着一堆绕waf的方法却被waf拦在外面。
亿人安全
2024/09/18
2590
Bypass WAF (小白食用)
BypassWAF(小白食用)
前言:现在绕过waf手法在网上层出不穷,但是大家好像忘记一个事情就是,思路比方法更有价值,大家对着网上一些手法直接生搬硬套,不在意是不是适合的场景,网上的文章,好像着急的把所有的绕过方法都给你罗列出来。没有传授给你相应的技巧。到最后,小白拿着一堆绕waf的方法却被waf拦在外面。
红队蓝军
2025/02/12
2460
BypassWAF(小白食用)
细说WAF
Web应用程序防火墙(Web Application Firewall,简称WAF)是一种专为保障Web应用程序安全而设计的防护系统。它主要针对通过Web浏览器或其他Web客户端访问的应用程序提供保护,旨在防御黑客攻击、网络侵袭及数据泄露等多样化的安全威胁。
ICT系统集成阿祥
2024/12/03
7440
细说WAF
web渗透测试——信息收集下(超详细)
Web应用程序防火墙(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)是一种用于保护Web应用程序的安全设备。Web应用程序是指通过Web浏览器或其他Web客户端访问的应用程序。
红队蓝军
2024/07/15
4200
web渗透测试——信息收集下(超详细)
类编程的WAF(下)
天存信息的iWall3应用防火墙是一种创新式的类编程 WAF,它包含了编程语言的一些基本要素。
天存信息
2021/06/18
9150
类编程的WAF(下)
安全设备篇——WAF
Web应用防火墙(WAF)是网络安全的关键防线,专注于保护Web应用程序免受攻击。它具备应用层防护能力,能智能分析并防御恶意请求,支持灵活部署,并具备事前预防、事中响应和事后审计功能,是确保Web应用安全的重要工具。
德迅云安全--陈琦琦
2024/07/04
6640
类编程的WAF(上)
WAF (WEB 应用防火墙) 用来保护 WEB 应用免受来自应用层的攻击。作为防护对象的 WEB 应用,其功能和运行环境往往是复杂且千差万别的,这导致即便防御某个特定的攻击方式时,用户需求也可能是细致而多样的。
天存信息
2021/06/17
7570
类编程的WAF(上)
BUG赏金 | Unicode与WAF—XSS WAF绕过
通过标题,您可能会知道这是有关使用UNICODE进行 XSS WAF绕过的文章。因此,让我们给你一个关于我正在测试的应用程序的小想法。有一个名为“以后保存” 的选项,该选项将项目保存在您的帐户中以备后用。该请求看起来像:
Timeline Sec
2019/12/23
1.9K0
BUG赏金 | Unicode与WAF—XSS WAF绕过
WAF产品经理眼中比较理想的WAF
WAF简介 WAF(Web Application Firewall,简称:WAF),百度百科上的定义,Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。作为绝大多数互联网公司Web防御体系最重要的一环,承担了抵御常见的SQL注入、XSS、远程命令执行、目录遍历等攻击的作用,就像大厦的保安一样默默工作,作为第一道防线守护业务的安全。 传统WAF的不足 WAF在不少安全公司都是重要产品线,究其原因我认为有三个: 第一,绝大多数互联网公司没有足够的专职安全人
FB客服
2018/02/09
3.7K0
WAF产品经理眼中比较理想的WAF
旁路WAF:使用Burp插件绕过一些WAF设备
我曾经写了一篇关于Burp插件使用的技术的博文在这里。许多WAF设备可以被伪造的请求欺骗,这些伪造的会被认为是自身正常的请求来处理,因为如果被判断有特定的头部存在,那么对于它来说就是可信的。旁路方法的
用户1467662
2018/03/30
1.5K0
旁路WAF:使用Burp插件绕过一些WAF设备
Centos7安装openresty实现WAF防火墙功能
OpenResty® 是一个结合了 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。 OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
星哥玩云
2022/05/30
2.5K0
Centos7安装openresty实现WAF防火墙功能
相关推荐
ModSecurity安装了,不懂原理和规则?这篇帮你搞定
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验