【GUI软件】调用YouTube的API接口,采集关键词搜索结果,并封装成界面工具!

文章目录

  • 一、背景介绍
    • 1.1 爬取目标
    • 1.2 演示视频
    • 1.3 软件说明
  • 二、代码讲解
    • 2.1 调用API-搜索接口
    • 2.2 调用API-详情接口
    • 2.3 API_KEY说明
    • 2.4 软件界面模块
    • 2.5 日志模块
  • 三、获取源码及软件

一、背景介绍

1.1 爬取目标

您好!我是@马哥python说,一名10年程序猿。

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

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

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

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

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

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

结果截图2:

结果截图3:

以上。

1.2 演示视频

软件使用演示:(不懂编程的小白直接看视频,了解软件作用即可,无需看代码)
【软件演示】youtube采集工具,根据关键词爬搜索结果

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是访问YouTube官方接口的密钥,只有拿到密钥,并配置到代码里,才能正常调用API接口。

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

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

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

2.4 软件界面模块

主窗口部分:

# 创建主窗口
root = tk.Tk()
root.title('爬YouTube搜索软件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软件,微信公众号"老男孩的平凡之路“后台回复”爬油管搜索视频软件"即可获取。点击直达

我是@马哥python说,一名10年程序猿,持续分享Python干货中!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D盘被格式化了能找回吗 d盘格式化了数据可以找回来吗

D盘作为电脑中重要的磁盘之一&#xff0c;很多用户都会将一些重要的数据保存在D盘。但在磁盘空间不足的情况下&#xff0c;或许有些用户会将其进行格式化&#xff0c;D盘被格式化了如何恢复数据&#xff1f; 如果是比较重要的数据&#xff0c;建议用户立即进行数据恢复操作&am…

Ansible之Playbook的Template模板和tags标签

文章目录 一、Template模块1、准备template模板文件2、修改主机清单文件3、编写playbook4、执行playbook5、准备测试网页6、访问测试 二、tags模块1、编写脚本2、执行tags"xx01"3、执行tags"xx02" 一、Template模块 Jinja是基于Python的模块引擎。Templat…

小米手机怎么截屏?一篇文章教会你!

我们经常需要截取手机屏幕上的内容&#xff0c;无论是为了分享、教学还是记录。对于小米手机用户来说&#xff0c;掌握截屏技巧不仅能够方便地记录精彩瞬间&#xff0c;还能在需要时轻松分享或保存屏幕内容。小米手机怎么截屏&#xff0c;有哪些截屏方式呢&#xff1f;本文将为…

idea快捷键被占用,如何解决ctrl+\ 为例

本来这个这个快捷键ctrl\ 是只有restful 插件才生效的&#xff0c;但是idea升级了之后&#xff0c;多了个 AI Assistant 这样他也有个快捷键是这个&#xff0c; 所以 需要借助 settings - keymap - 直接找到右边的放大镜&#xff0c;可以输入快捷键查询 把ai 那个啥玩意…

什么是香草看涨期权?香草看涨期权有哪些特点?

什么是香草看涨期权&#xff1f;香草看涨期权有哪些特点&#xff1f; 香草看涨期权&#xff0c;通常也称为香草期权&#xff0c;是金融市场上的一种金融衍生品&#xff0c;由券商或金融机构推出。它允许投资者以较小的费用获取相应股票市值的收益权&#xff0c;主要用于风险管…

Python爬虫获取豆瓣电影Top100

大家好&#xff0c;我是秋意零。 今天分析一篇&#xff0c;Python爬虫获取豆瓣电影Top100。 在此之前&#xff0c;我没有学习过爬虫&#xff0c;只有一丢丢的Python基础。下面效果的实现源码几乎没经过我&#xff0c;而是AI百老师。我主要负责了对应的调试以及根据我想要的功…

5月7号(信息差)

&#x1f30d;首次&#xff0c;西湖大学用蛋白质语言模型定向改造碱基编辑器&#xff0c;登Cell子刊 https://www.jiqizhixin.com/articles/2024-05-07-10 &#x1f384; 哈马斯宣布同意停火提议 https://finance.eastmoney.com/a/202405073067687785.html ✨ 中国将对…

吴恩达机器学习笔记:第 9 周-16推荐系统(Recommender Systems) 16.3-16.4

目录 第 9 周 16、 推荐系统(Recommender Systems)16.3 协同过滤16.4 协同过滤算法 第 9 周 16、 推荐系统(Recommender Systems) 16.3 协同过滤 在之前的基于内容的推荐系统中&#xff0c;对于每一部电影&#xff0c;我们都掌握了可用的特征&#xff0c;使用这些特征训练出了…

推荐网站(6)33台词,通过台词找电影、电视剧、纪录片等素材

今天推荐一个网站33台词&#xff0c;你可以根据电影、电视剧、纪录片等某一段台词&#xff0c;来找到来源&#xff0c;帮你精确到多少分多少秒出现的&#xff0c;非常的好用&#xff0c;尤其是对那种只记得一些经典台词&#xff0c;不知道是哪个电影的人来说&#xff0c;帮助巨…

1W 3KVDC 隔离 单输出 DC/DC 电源模块 ——TPF 系列

TPF系列提供输出稳压&#xff0c;精度高&#xff0c;对于输出电压有要求的场合特别适合&#xff0c;工业级环境温度&#xff0c;用于PCB安装的国际标准结构。此系列产品小巧&#xff0c;效率高&#xff0c;低输出纹波及提供3000V以上的直流电压隔离&#xff0c;封装有SIP和DIP可…

网络安全之DHCP详解

DHCP&#xff1a;Dynamic Host Configration Protocol 动态主机配置协议 某一协议的数据是基于UDP封装的&#xff0c;当它想确保自己的可靠性时&#xff0c;这个协议要么选确认重传机制&#xff0c;要么选周期性传输。 DHCP是确认重传&#xff0c;【UDP|DHCP】,当DHCP分配完地…

零售全渠道营销业务链分析,让企业管控能力大幅加强!

对于传统的、规模化的零售快消企业来讲&#xff0c;面临着很大的渠道管理和建设问题&#xff0c;如何尽快实现整个营销体系的全渠道数字化转型是当务之急、重中之重。 面对错综分散的经销商&#xff0c;零售快消企业订货流程会越复杂&#xff0c;加之对门店管理较为粗放&#…

工业镜头助力锂电制造业精准检测

在电动汽车、电动轻型车、电动工具、消费电子和新型储能等行业大发展的背景下&#xff0c;锂电池综合优势与下游领域对电池大容量、高功率、使用寿命和环境保护日益提升的需求相契合&#xff0c;存在广阔的市场应用前景。受益于动力、消费和储能三大细分领域的快速发展&#xf…

C++奇迹之旅:string类对象的修改操作

文章目录 &#x1f4dd;string类的常用接口&#x1f320; string类对象的修改操作&#x1f309;push_back&#x1f309;append&#x1f309;operator&#x1f309;insert&#x1f309;erase&#x1f309;replace&#x1f309; find&#x1f309; c_str &#x1f320;测试string…

大数据时代,如何准确查询并解读大数据信用报告?

在互联网时代&#xff0c;个人信息的安全和隐私保护愈发受到人们的关注。随着大数据技术的不断发展&#xff0c;越来越多的人开始关心自己的大数据报告。那么&#xff0c;如何找一个靠谱的地方查询个人大数据报告呢?本文将为您详细解答。 一、先了解大数据报告的含义 首先&…

四、 现行数据出境制度下的三条合规路径是什么?如何判断?

综合《网络安全法》《数据安全法》以及《个人信息保护法》这三大数据合规基本法律要求来看&#xff0c;企业开展数据出境活动时&#xff0c;应结合自身的主体类型、出境数据类型和数量&#xff0c;综合判断是否须要额外&#xff08;1&#xff09;申报并通过数据出境安全评估&am…

ASIL详解

概念 随着汽车新四化的发展&#xff0c;整车E/E系统的复杂性也不断增加&#xff0c;功能安全正成为一种更主流的要求。汽车安全完整性等级&#xff08;ASIL&#xff09;分解为实现更高水平的诊断覆盖度提供了可靠而稳健的途径&#xff0c;并在开发具有更高ASIL等级的安全关键系…

基于卷积神经网络的信号解卷积(简单版,MATLAB)

简单演示一下基于卷积神经网络的信号解卷积&#xff0c;有个大致印象即可。 构造卷积滤波器 r 0.9; % Define filter om 0.95; a [1 -2*r*cos(om) r^2]; b [1 r*cos(om)]; h filter(b, a, [zeros(1,38) 1 zeros(1,40)]); N 500; K 25; sigma 1; 绘制输入信号分量 s…

LabelImg下载及目标检测数据标注

为什么这一部分内容这么少会单独拎出来呢&#xff0c;因为后期会接着介绍YOLOv8中的其他任务&#xff0c;会使用其他软件进行标注&#xff0c;所以就单独区分开来每一个任务的标注方式了。 这一部分就介绍目标检测任务的标注&#xff0c;数据集是我从COCO2017Val中抽出来两类&a…

移动端自动化测试工具 Appium 之元素操作小技巧

文章目录 一、背景二、TestNG常用注解三、实战3.1、集成启动类3.2、采用xpath定位元素3.3、编写通用判断类3.4、编写测试类3.5、遍历实现 四、总结 一、背景 appium自动化工作中&#xff0c;元素操作最常用的就是Id/xpath&#xff0c;因为【appium1.5.0后&#xff0c;不支持使…