云点歌系统的Python爬虫设计和实现

2022-07-25 09:42
现代计算机 2022年9期
关键词:点歌爬虫线程

罗 可

(邵阳学院图书馆,邵阳 422000)

0 引言

人们在家里听音乐不外乎两种方式:一种通过电脑打开音乐网站,再通过音箱来播放;另一种是通过蓝牙设备连接手机来播放。现今,人们更偏向于追求简单、方便、智能的播放方式,通过搜寻或者事先把歌曲下载才能播放音乐的传统方式无法满足用户需求的便利性、简单性。自2014 年亚马逊公司上市了一款名叫“Echo”的智能音箱之后,许多科技龙头企业都紧随其后,纷纷推出天猫精灵、小爱音箱等智能音箱,使人们的听觉习惯发生了根本性的变化。

当前,许多学者都在使用各种技术来研究点歌系统。王琴将C#技术与SQL Server 技术相结合,开发了一套以C/S 为核心的KTV 点歌系统。豆利以Delphi 和SQL Server 为开发工具,利用ADD 技术对KTV 音乐点歌管理进行了研究。陈 国 锋结合MySQL 与PHP 技术,利 用Dream weaver 进行网页的优化,开发出基于PHP的在线音乐点歌系统。在互联网流媒体格式音乐和爬虫技术兴起的大背景下,本文提出了一种基于Python爬虫技术的云点歌系统。

1 相关技术

1.1 网络爬虫

网络爬虫可以被称作网络蜘蛛、蚂蚁、自动索引程序,或者FOAF 软件中的网络追逐者,是一种能够自动浏览全球信息网络的网络机器人,已在因特网搜索引擎或其它相似的站点上广泛使用。通过在网页上的爬行将所有内容都收集起来,然后再由搜索引擎进行进一步的处理,这样就可以让使用者快速地找到自己想要的信息。网络爬行的实质就是模仿用户在网页上打开的页面,从而获得用户所需要的信息。

1.1.1 网络爬虫的构成及其工作原理

网络爬虫框架结构包括三部分:解析器、控制器和索引库,其中解析器是网络爬虫的核心,它负责对网页的下载、处理,处理JS脚本、HTML标签、CSS代码、空格符等内容。

网络爬虫工作过程如下:首先把网址放到爬虫器里面;其次,把所有网址的程序代码下载下来,因为并非全部都是所需要的数据,因此需要进一步筛选html 的元素,把所需结果加载到列表中,再把所有结果显示出来。

1.1.2 网络爬虫搜索策略

网络爬虫策略可以分为深度优先策略、宽度优先策略、聚焦搜索策略三种。目前常见的网页搜索策略为宽度优先和聚焦搜索策略。

(1)网络爬虫的宽度优先策略。从图的某一节点开始探寻,探索该节点所有相邻且未寻访过的节点,根据探索过的节点继续进行先广后深的搜寻。如同树形结构,即把同一深度的节点走访完,再继续向下一个深度搜寻,直到找到目的节点或遍寻全部节点。

要抓取一个网页、分析一个网页,是一件很容易的事情。那么对于搜寻引擎来说,要获取的资源是网络上的大量网页,如何抓取就是一个策略问题。重要的网页通常离种子比较近,比如当我们进入一个新闻站点时,通常会发现最热的消息;而当我们继续深入时,你所能看见的页面就变得不那么重要了。互联网的真实深度可以达到17 层,但到达某个网页总存在一条很短的路径,广度优先浏览将会在最短时间内访问到该页面。广度优先有助于多个爬行器之间的协作,而这种协作往往是先抓住站点内部的链路,并且具有很强的封闭性。

(2)网络爬虫的聚焦搜索策略。不同于深度优先和宽度优先,聚焦搜索策略采用了“匹配优先原则”的思想,利用特定的匹配算法,主动地选取与需求主题有关的数据文档,并限定优先级,进而为后续的数据采集等工作做引导。按照“匹配优先原则”的方式访问,可以快速有效地获取更多与主题有关的网页。聚焦爬虫会为其下载的网页打分,然后按分数顺序将其加入到一个队列中。接下来的最佳搜索将会在弹出队列中的首页上进行分析,这样可以确保爬行器能够对最有可能被链接到网页的网页进行排序。这个策略认为,页面拥有许多的属性,可以认为类似属性的页面其更新频率也是类似的。如果要计算某个分类页面的更新频率,只需要对这一类网页抽样,以他们的更新周期作为整个类别的更新周期。

1.2 Python及网络爬虫第三方库

Python 具备简单、易用、功能强大、跨平台、高开发效率、开源、移植性好、支持大量第三方资源库等优点,目前已被广泛地用于科学统计、人工智能开发、网络爬虫等领域。Beautiful Soup 是Python 的一个第三方库,它的任务是从网页中获取数据,它能够为用户提供诸如浏览、查找、修改分析树等简单的Python功能。作为一个工具包,它可以为用户分析文件所需的资料,因其简单易于操作,编写一个完整的应用程式并不需要太多的代码。Beautiful Soup 可以把输入的文件格式转化为Unicode 编码,而输出的文件则会被转化成UTF-8 编码。除非该文件未指定编码方式,否则你不必去思考如何进行编码,只需简单地解释最初的编码方法。Beautiful Soup 不但为Python标准库提供HTML解析器,而且也为某些第三方提供解析工具,比如xml HTML、lxml XML、html5lib 等。Beautiful Soup 的 解 析 器 对比如表1所示。

表1 Beautiful Soup解析器对比

2 云点歌系统总体框架及其功能

2.1 云点歌系统主体框架及流程

云点歌系统主要由三部分组成:主程序模块,爬虫模块和语音识别模块。主程序模块负责视频格式转换和音频播放输出;爬虫模块负责根据语音识别的文字信息实时搜索音乐平台的视频资源,获取相关资源信息反馈给主程序;语音识别模块负责实时监听外部指令,例如“开始点歌”、“我要切歌”等关键词语,将指令回传给爬虫程序进行网络搜索。

图1 云点歌系统架构流程图

2.2 功能介绍

2.2.1 点歌功能

用户要点歌时,只需说出“开始点歌”四个字,系统就进入用户点歌进程,然后弹出“请点歌”的语音,等待用户说出自己喜欢的歌曲,系统会根据歌曲名,通过爬虫程序到音乐平台获取网址回传,处理好后会有语音提示“发现歌曲”,再过几秒就可以听到音乐。

2.2.2 切歌功能

歌曲在播放过程中,用户只需讲出“我要切歌”,就可以中止正在进行播放的歌曲,回到点歌的进程中。

2.3 模块设计

2.3.1 主程序模块

系统的初始运行是由主程序模块启动的,主程序模块包含主线程、播放线程和切歌线程三个线程,如图2所示。

图2 主模块线程流程图

主线程会先执行爬虫程序,然后进行语音控制;播放线程根据网络资源地址播放音乐;切歌线程负责实时监听切歌指令、执行中止播放操作,切歌线程一开始要等待2秒,因为播放线程要进行网址转换的过程大约需要2 至3 秒,这样歌曲播放的时候才能做切歌的操作。

2.3.2 语音控制模块

执行此程序时,程序实时监听外部语音信息,如果获取到用户说出的关键词“我要切歌”,音乐播放程序就会执行中断歌曲,或者在歌曲结束时随便讲一句话也可以将语音控制程序退出,如图3所示。由于外部环境噪声可能造成声音干扰,为了提高语音的辨识度,语音程序需连续识别两至三次切歌指令,才可以切歌。

图3 语音控制流程图

2.4 音乐平台Python爬虫实现

2.4.1 获取歌曲ID号

首先从音乐平台搜索页面开始,使用的是chrome 浏览器,并设置打开浏览器开发模式,可以查看相关页面的加载信息。在XHR 里面的内容中可以找到JSON 格式的歌曲详细信息,其中包含了所需的歌曲ID,然后调用BeautifulSoup 的库函数解析抓取功能,拿到返回的JSON进行解析,这样就可以得到想要的所有数据。在很多动态装载站点中,将JSON 数据封装成response,然后由爬行器调用loads函数将返回的JSON 数据转化成python 的dictionary 数据,这样可以更好地进行数据分析。有了歌曲的ID 号,可以方便以后的播放源地址进行拼接。

2.4.2 获取音源链接地址

根据歌曲ID 号找到播放音乐的网页,利用requests 库的post 方式发送一个请求,对页面的文字进行分析,然后寻找包含mp4 的视频源地址,再把结果返回到主程序上进行播放。

3 结语

本文是以Python 的爬虫技术为基础,完成了一款云音乐点歌系统的架构设计。利用python 第三方库爬取歌曲的源链接,只需说出想听的歌曲名,就可以免费听到音乐平台的歌曲。这种智能化听歌方式,给人们的生活增添更多欢乐。

猜你喜欢
点歌爬虫线程
实时操作系统RT⁃Thread启动流程剖析
点歌
基于Python的网络爬虫和反爬虫技术研究
Python反爬虫设计
点歌
基于Scrapy框架的分布式网络爬虫的研究与实现
谁抢走了低价机票
为父母点歌
采用ScheduledThreadPoolExecutor执行定时重试任务时内存溢出的分析及解决
Java的多线程技术探讨