国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

云點(diǎn)歌系統(tǒng)的Python爬蟲設(shè)計(jì)和實(shí)現(xiàn)

2022-07-25 09:42
現(xiàn)代計(jì)算機(jī) 2022年9期
關(guān)鍵詞:點(diǎn)歌爬蟲線程

羅 可

(邵陽學(xué)院圖書館,邵陽 422000)

0 引言

人們在家里聽音樂不外乎兩種方式:一種通過電腦打開音樂網(wǎng)站,再通過音箱來播放;另一種是通過藍(lán)牙設(shè)備連接手機(jī)來播放。現(xiàn)今,人們更偏向于追求簡單、方便、智能的播放方式,通過搜尋或者事先把歌曲下載才能播放音樂的傳統(tǒng)方式無法滿足用戶需求的便利性、簡單性。自2014 年亞馬遜公司上市了一款名叫“Echo”的智能音箱之后,許多科技龍頭企業(yè)都緊隨其后,紛紛推出天貓精靈、小愛音箱等智能音箱,使人們的聽覺習(xí)慣發(fā)生了根本性的變化。

當(dāng)前,許多學(xué)者都在使用各種技術(shù)來研究點(diǎn)歌系統(tǒng)。王琴將C#技術(shù)與SQL Server 技術(shù)相結(jié)合,開發(fā)了一套以C/S 為核心的KTV 點(diǎn)歌系統(tǒng)。豆利以Delphi 和SQL Server 為開發(fā)工具,利用ADD 技術(shù)對KTV 音樂點(diǎn)歌管理進(jìn)行了研究。陳 國 鋒結(jié)合MySQL 與PHP 技術(shù),利 用Dream weaver 進(jìn)行網(wǎng)頁的優(yōu)化,開發(fā)出基于PHP的在線音樂點(diǎn)歌系統(tǒng)。在互聯(lián)網(wǎng)流媒體格式音樂和爬蟲技術(shù)興起的大背景下,本文提出了一種基于Python爬蟲技術(shù)的云點(diǎn)歌系統(tǒng)。

1 相關(guān)技術(shù)

1.1 網(wǎng)絡(luò)爬蟲

網(wǎng)絡(luò)爬蟲可以被稱作網(wǎng)絡(luò)蜘蛛、螞蟻、自動(dòng)索引程序,或者FOAF 軟件中的網(wǎng)絡(luò)追逐者,是一種能夠自動(dòng)瀏覽全球信息網(wǎng)絡(luò)的網(wǎng)絡(luò)機(jī)器人,已在因特網(wǎng)搜索引擎或其它相似的站點(diǎn)上廣泛使用。通過在網(wǎng)頁上的爬行將所有內(nèi)容都收集起來,然后再由搜索引擎進(jìn)行進(jìn)一步的處理,這樣就可以讓使用者快速地找到自己想要的信息。網(wǎng)絡(luò)爬行的實(shí)質(zhì)就是模仿用戶在網(wǎng)頁上打開的頁面,從而獲得用戶所需要的信息。

1.1.1 網(wǎng)絡(luò)爬蟲的構(gòu)成及其工作原理

網(wǎng)絡(luò)爬蟲框架結(jié)構(gòu)包括三部分:解析器、控制器和索引庫,其中解析器是網(wǎng)絡(luò)爬蟲的核心,它負(fù)責(zé)對網(wǎng)頁的下載、處理,處理JS腳本、HTML標(biāo)簽、CSS代碼、空格符等內(nèi)容。

網(wǎng)絡(luò)爬蟲工作過程如下:首先把網(wǎng)址放到爬蟲器里面;其次,把所有網(wǎng)址的程序代碼下載下來,因?yàn)椴⒎侨慷际撬枰臄?shù)據(jù),因此需要進(jìn)一步篩選html 的元素,把所需結(jié)果加載到列表中,再把所有結(jié)果顯示出來。

1.1.2 網(wǎng)絡(luò)爬蟲搜索策略

網(wǎng)絡(luò)爬蟲策略可以分為深度優(yōu)先策略、寬度優(yōu)先策略、聚焦搜索策略三種。目前常見的網(wǎng)頁搜索策略為寬度優(yōu)先和聚焦搜索策略。

(1)網(wǎng)絡(luò)爬蟲的寬度優(yōu)先策略。從圖的某一節(jié)點(diǎn)開始探尋,探索該節(jié)點(diǎn)所有相鄰且未尋訪過的節(jié)點(diǎn),根據(jù)探索過的節(jié)點(diǎn)繼續(xù)進(jìn)行先廣后深的搜尋。如同樹形結(jié)構(gòu),即把同一深度的節(jié)點(diǎn)走訪完,再繼續(xù)向下一個(gè)深度搜尋,直到找到目的節(jié)點(diǎn)或遍尋全部節(jié)點(diǎn)。

要抓取一個(gè)網(wǎng)頁、分析一個(gè)網(wǎng)頁,是一件很容易的事情。那么對于搜尋引擎來說,要獲取的資源是網(wǎng)絡(luò)上的大量網(wǎng)頁,如何抓取就是一個(gè)策略問題。重要的網(wǎng)頁通常離種子比較近,比如當(dāng)我們進(jìn)入一個(gè)新聞?wù)军c(diǎn)時(shí),通常會(huì)發(fā)現(xiàn)最熱的消息;而當(dāng)我們繼續(xù)深入時(shí),你所能看見的頁面就變得不那么重要了。互聯(lián)網(wǎng)的真實(shí)深度可以達(dá)到17 層,但到達(dá)某個(gè)網(wǎng)頁總存在一條很短的路徑,廣度優(yōu)先瀏覽將會(huì)在最短時(shí)間內(nèi)訪問到該頁面。廣度優(yōu)先有助于多個(gè)爬行器之間的協(xié)作,而這種協(xié)作往往是先抓住站點(diǎn)內(nèi)部的鏈路,并且具有很強(qiáng)的封閉性。

(2)網(wǎng)絡(luò)爬蟲的聚焦搜索策略。不同于深度優(yōu)先和寬度優(yōu)先,聚焦搜索策略采用了“匹配優(yōu)先原則”的思想,利用特定的匹配算法,主動(dòng)地選取與需求主題有關(guān)的數(shù)據(jù)文檔,并限定優(yōu)先級(jí),進(jìn)而為后續(xù)的數(shù)據(jù)采集等工作做引導(dǎo)。按照“匹配優(yōu)先原則”的方式訪問,可以快速有效地獲取更多與主題有關(guān)的網(wǎng)頁。聚焦爬蟲會(huì)為其下載的網(wǎng)頁打分,然后按分?jǐn)?shù)順序?qū)⑵浼尤氲揭粋€(gè)隊(duì)列中。接下來的最佳搜索將會(huì)在彈出隊(duì)列中的首頁上進(jìn)行分析,這樣可以確保爬行器能夠?qū)ψ钣锌赡鼙绘溄拥骄W(wǎng)頁的網(wǎng)頁進(jìn)行排序。這個(gè)策略認(rèn)為,頁面擁有許多的屬性,可以認(rèn)為類似屬性的頁面其更新頻率也是類似的。如果要計(jì)算某個(gè)分類頁面的更新頻率,只需要對這一類網(wǎng)頁抽樣,以他們的更新周期作為整個(gè)類別的更新周期。

1.2 Python及網(wǎng)絡(luò)爬蟲第三方庫

Python 具備簡單、易用、功能強(qiáng)大、跨平臺(tái)、高開發(fā)效率、開源、移植性好、支持大量第三方資源庫等優(yōu)點(diǎn),目前已被廣泛地用于科學(xué)統(tǒng)計(jì)、人工智能開發(fā)、網(wǎng)絡(luò)爬蟲等領(lǐng)域。Beautiful Soup 是Python 的一個(gè)第三方庫,它的任務(wù)是從網(wǎng)頁中獲取數(shù)據(jù),它能夠?yàn)橛脩籼峁┲T如瀏覽、查找、修改分析樹等簡單的Python功能。作為一個(gè)工具包,它可以為用戶分析文件所需的資料,因其簡單易于操作,編寫一個(gè)完整的應(yīng)用程式并不需要太多的代碼。Beautiful Soup 可以把輸入的文件格式轉(zhuǎn)化為Unicode 編碼,而輸出的文件則會(huì)被轉(zhuǎn)化成UTF-8 編碼。除非該文件未指定編碼方式,否則你不必去思考如何進(jìn)行編碼,只需簡單地解釋最初的編碼方法。Beautiful Soup 不但為Python標(biāo)準(zhǔn)庫提供HTML解析器,而且也為某些第三方提供解析工具,比如xml HTML、lxml XML、html5lib 等。Beautiful Soup 的 解 析 器 對比如表1所示。

表1 Beautiful Soup解析器對比

2 云點(diǎn)歌系統(tǒng)總體框架及其功能

2.1 云點(diǎn)歌系統(tǒng)主體框架及流程

云點(diǎn)歌系統(tǒng)主要由三部分組成:主程序模塊,爬蟲模塊和語音識(shí)別模塊。主程序模塊負(fù)責(zé)視頻格式轉(zhuǎn)換和音頻播放輸出;爬蟲模塊負(fù)責(zé)根據(jù)語音識(shí)別的文字信息實(shí)時(shí)搜索音樂平臺(tái)的視頻資源,獲取相關(guān)資源信息反饋給主程序;語音識(shí)別模塊負(fù)責(zé)實(shí)時(shí)監(jiān)聽外部指令,例如“開始點(diǎn)歌”、“我要切歌”等關(guān)鍵詞語,將指令回傳給爬蟲程序進(jìn)行網(wǎng)絡(luò)搜索。

圖1 云點(diǎn)歌系統(tǒng)架構(gòu)流程圖

2.2 功能介紹

2.2.1 點(diǎn)歌功能

用戶要點(diǎn)歌時(shí),只需說出“開始點(diǎn)歌”四個(gè)字,系統(tǒng)就進(jìn)入用戶點(diǎn)歌進(jìn)程,然后彈出“請點(diǎn)歌”的語音,等待用戶說出自己喜歡的歌曲,系統(tǒng)會(huì)根據(jù)歌曲名,通過爬蟲程序到音樂平臺(tái)獲取網(wǎng)址回傳,處理好后會(huì)有語音提示“發(fā)現(xiàn)歌曲”,再過幾秒就可以聽到音樂。

2.2.2 切歌功能

歌曲在播放過程中,用戶只需講出“我要切歌”,就可以中止正在進(jìn)行播放的歌曲,回到點(diǎn)歌的進(jìn)程中。

2.3 模塊設(shè)計(jì)

2.3.1 主程序模塊

系統(tǒng)的初始運(yùn)行是由主程序模塊啟動(dòng)的,主程序模塊包含主線程、播放線程和切歌線程三個(gè)線程,如圖2所示。

圖2 主模塊線程流程圖

主線程會(huì)先執(zhí)行爬蟲程序,然后進(jìn)行語音控制;播放線程根據(jù)網(wǎng)絡(luò)資源地址播放音樂;切歌線程負(fù)責(zé)實(shí)時(shí)監(jiān)聽切歌指令、執(zhí)行中止播放操作,切歌線程一開始要等待2秒,因?yàn)椴シ啪€程要進(jìn)行網(wǎng)址轉(zhuǎn)換的過程大約需要2 至3 秒,這樣歌曲播放的時(shí)候才能做切歌的操作。

2.3.2 語音控制模塊

執(zhí)行此程序時(shí),程序?qū)崟r(shí)監(jiān)聽外部語音信息,如果獲取到用戶說出的關(guān)鍵詞“我要切歌”,音樂播放程序就會(huì)執(zhí)行中斷歌曲,或者在歌曲結(jié)束時(shí)隨便講一句話也可以將語音控制程序退出,如圖3所示。由于外部環(huán)境噪聲可能造成聲音干擾,為了提高語音的辨識(shí)度,語音程序需連續(xù)識(shí)別兩至三次切歌指令,才可以切歌。

圖3 語音控制流程圖

2.4 音樂平臺(tái)Python爬蟲實(shí)現(xiàn)

2.4.1 獲取歌曲ID號(hào)

首先從音樂平臺(tái)搜索頁面開始,使用的是chrome 瀏覽器,并設(shè)置打開瀏覽器開發(fā)模式,可以查看相關(guān)頁面的加載信息。在XHR 里面的內(nèi)容中可以找到JSON 格式的歌曲詳細(xì)信息,其中包含了所需的歌曲ID,然后調(diào)用BeautifulSoup 的庫函數(shù)解析抓取功能,拿到返回的JSON進(jìn)行解析,這樣就可以得到想要的所有數(shù)據(jù)。在很多動(dòng)態(tài)裝載站點(diǎn)中,將JSON 數(shù)據(jù)封裝成response,然后由爬行器調(diào)用loads函數(shù)將返回的JSON 數(shù)據(jù)轉(zhuǎn)化成python 的dictionary 數(shù)據(jù),這樣可以更好地進(jìn)行數(shù)據(jù)分析。有了歌曲的ID 號(hào),可以方便以后的播放源地址進(jìn)行拼接。

2.4.2 獲取音源鏈接地址

根據(jù)歌曲ID 號(hào)找到播放音樂的網(wǎng)頁,利用requests 庫的post 方式發(fā)送一個(gè)請求,對頁面的文字進(jìn)行分析,然后尋找包含mp4 的視頻源地址,再把結(jié)果返回到主程序上進(jìn)行播放。

3 結(jié)語

本文是以Python 的爬蟲技術(shù)為基礎(chǔ),完成了一款云音樂點(diǎn)歌系統(tǒng)的架構(gòu)設(shè)計(jì)。利用python 第三方庫爬取歌曲的源鏈接,只需說出想聽的歌曲名,就可以免費(fèi)聽到音樂平臺(tái)的歌曲。這種智能化聽歌方式,給人們的生活增添更多歡樂。

猜你喜歡
點(diǎn)歌爬蟲線程
實(shí)時(shí)操作系統(tǒng)RT?Thread啟動(dòng)流程剖析
點(diǎn)歌
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
Python反爬蟲設(shè)計(jì)
點(diǎn)歌
基于Scrapy框架的分布式網(wǎng)絡(luò)爬蟲的研究與實(shí)現(xiàn)
誰搶走了低價(jià)機(jī)票
為父母點(diǎn)歌
采用ScheduledThreadPoolExecutor執(zhí)行定時(shí)重試任務(wù)時(shí)內(nèi)存溢出的分析及解決
Java的多線程技術(shù)探討
怀仁县| 绥阳县| 奇台县| 鹿泉市| 禄丰县| 眉山市| 交城县| 遵义县| 东乡| 宝山区| 屏山县| 奎屯市| 清流县| 个旧市| 邯郸县| 宝山区| 商城县| 云浮市| 盐源县| 普宁市| 崇仁县| 宣化县| 关岭| 镇原县| 南部县| 罗源县| 客服| 沅江市| 武邑县| 平罗县| 东安县| 西乌珠穆沁旗| 虞城县| 磐石市| 封开县| 吕梁市| 昌邑市| 恩平市| 泾源县| 久治县| 东光县|