整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          一篇文章帶你用Python網絡爬蟲實現網易云音樂歌詞

          一篇文章帶你用Python網絡爬蟲實現網易云音樂歌詞抓取

          幾天小編給大家分享了數據可視化分析,在文尾提及了網易云音樂歌詞爬取,今天小編給大家分享網易云音樂歌詞爬取方法。 本文的總體思路如下: 找到正確的URL,獲取源碼; 利用bs4解析源碼,獲取歌曲名和歌曲ID; 調用網易云歌曲API,獲取歌詞; 將歌詞寫入文件,并存入本地。 本文的目的是獲取網易云音樂的歌詞,并將歌詞存入到本地文件。整體的效果圖如下所示:

          本文以民謠歌神趙雷為數據采集對象,專門采集他的歌曲歌詞,其他歌手的歌詞采集方式可以類推,下圖展示的是《成都》歌詞。

          一般來說,網頁上顯示的URL就可以寫在程序中,運行程序之后就可以采集到我們想要的網頁源碼。But在網易云音樂網站中,這條路行不通,因為網頁中的URL是個假URL,真實的URL中是沒有/#號的。廢話不多說,直接上代碼。

          本文利用requests、bs4、json和re模塊來采集網易云音樂歌詞,記得在程序中添加headers和反盜鏈referer以模擬瀏覽器,防止被網站拒絕訪問。這里的get_html方法專門用于獲取源碼,通常我們也要做異常處理,未雨綢繆。獲取到網頁源碼之后,分析源碼,發現歌曲的名字和ID藏的很深,縱里尋她千百度,發現她在源碼的294行,藏在下圖的標簽下,如下圖所示:


          接下來我們利用美麗的湯來獲取目標信息,直接上代碼,如下圖:

          此處要注意獲取ID的時候需要對link進行切片處理,得到的數字便是歌曲的ID;另外,歌曲名是通過get_text()方法獲取到的,最后利用zip函數將歌曲名和ID一一對應并進行返回。得到ID之后便可以進入到內頁獲取歌詞了,但是URL還是不給力,如下圖:

          雖然我們可以明白的看到網頁上的白紙黑字呈現的歌詞信息,但是我們在該URL下卻無法獲取到歌詞信息。小編通過抓包,找到了歌詞的URL,發現其是POST請求還有一大堆看不懂的data,總之這個URL是不能為我們效力。那該點解呢?莫慌,小編找到了網易云音樂的API,只要把歌曲的ID放在API鏈接上便可以獲取到歌詞了,代碼如下:

          在API中歌詞信息是以json格式加載的,所以需要利用json將其進行序列化解析出來,并配合正則表達式進行清洗歌詞,如果不用正則表達式進行清洗的話,得到原始的數據如下所示(此處以趙雷的歌曲《成都》為例):

          很明顯歌詞前面有歌詞呈現的時間,對于我們來說其屬于雜質信息,因此需要利用正則表達式進行匹配。誠然,正則表達式并不是唯一的方法,小伙伴們也可以采取切片的方式或者其他方法進行數據清洗,在此就不贅述了。得到歌詞之后便將其寫入到文件中去,并存入到本地文件中,代碼如下:

          現在只要我們運行程序,輸入歌手的ID之后,程序將自動把該歌手的所唱歌曲的歌詞抓取下來,并存到本地中。如本例中趙雷的ID是6731,輸入數字6731之后,趙雷的歌詞將會被抓取到,如下圖所示:

          之后我們就可以在腳本程序的同一目錄下找到生成的歌詞文本,歌詞就被順利的爬取下來了。相信大家對網易云歌詞爬取已經有了一定的認識了,不過easier said than down,小編建議大家動手親自敲一下代碼,在實踐中你會學的更快,學的更多的。這篇文章教會大家如何采集網易云歌詞,那網易云歌曲如何采集呢?且聽小編下回分解~~~

          想學習更多Python網絡爬蟲與數據挖掘知識,可前往專業網站:http://pdcfighting.com/

          擊上方關注,All in AI 中國

          披頭士是一個巨大的文化現象。他們永恒的音樂至今仍與人們產生共鳴,無論是年輕人還是老年人。就我個人而言,我是他們的超級粉絲。依我拙見,他們是很棒的搖滾樂隊。他們的歌曲充滿了有趣的歌詞和深刻的思想。例如:

          然而,披頭士樂隊之所以偉大,是因為他們多才多藝。他們的一些歌曲深沉而有思想,而另一些則有趣而輕松。毫無疑問,貫穿他們歌詞的最大主題是愛。這里有這樣一句詞:

          事實上,這些歌詞并不是你所知道的披頭士寫的。不是約翰·列儂、 保羅·麥卡特尼、喬治·哈里森、甚至也不是林戈·斯塔爾。它們實際上是由機器學習模型生成的,即OpenAI的GPT-2。盡管這使用了他們最小的模型,結果卻相當驚人。

          但在我們過于超前之前,讓我們后退一步,看看這一切是如何運作的。和往常一樣,我的Github上有完整的可用代碼。GitHub - EugenHotaj/beatles: Automatic Beatles lyrics generation.

          語言建模

          語言模型試圖學習語言的結構(例如英語或披頭士的歌詞)。它們是使用監督學習訓練的生成模型。與其他監督學習任務一樣,語言模型試圖預測給定某些特征的標簽。然而,與大多數有監督的學習任務不同,它沒有明確的標簽,而是語言本身就具有一定的特征和標簽。

          在更高的層次上,語言模型所要做的是根據前面的單詞序列預測下一個單詞。例如,一個好的語言模型可以預測"milk"是"to buy a gallon of ____."這一短語的邏輯結論。

          通過猜測下一個出現的單詞,我們真正要做的是學習一個基于我們目前所見詞語的詞匯概率分布。也就是說,我們想要學習

          其中w_i是我們詞匯表中的單詞。

          因為我們明確地為這個分布建模,我們可以用它做一些很酷的事情,比如用它生成我們以前沒有見過的單詞。我們可以做到這一點的方法是從這個分布中反復采樣下一個單詞,然后當我們采樣下一個單詞時,用它作為條件,以此類推。為了讓它更加具體,讓我們看看這在Python中可能是什么樣子。如果我們有一個帶有樣本方法的模型對象,那么我們可以通過這樣做來生成新的樣本:

          如何從語言模型中生成句子。

          當然,我跳過了一些細節,但希望隨著時間的推移,這些會變得更加清晰。現在,讓我們看一下世界上最簡單的語言模型unigram。

          unigram模型忽略任何條件,只是從訓練數據中隨機選擇一個單詞。這相當于把我們的訓練數據扔進攪拌機,攪拌10分鐘后就把里面的內容倒出來。有人說,我們不會創造出任何類似英語的東西(當然,除非我們有足夠的機會和條件)。「鏈接」

          Bigram模型

          在一元模型之上的一個步驟是二元模型。正如你可能從名稱中猜到的那樣,bigram模型學習的分布僅受前一個單詞的限制,即

          由于bigram模型非常簡單,所以很容易在Python中實現,這將使我們更深入地理解語言模型的工作原理。

          收集數據

          在開始實現之前,我們首先需要一些數據。我們的最終目標是創作出讓披頭士引以為豪的歌曲,所以讓我們從收集他們所有已知的歌詞開始。

          我發現這個網站收錄了他們曾經發行的每首歌的歌詞。它還有一個有用的索引頁,其中有指向各個歌曲的鏈接,我們可以用它來抓取網站。我編寫了一個簡單的腳本來方便瀏覽歌曲,解析其HTML以提取歌詞,并將歌詞轉儲到一個文件中,每行一首歌曲。如果你打算跟著做,或者你自己只想要披頭士的歌詞,我強烈建議你使用它,因為抓取HTML是非常繁瑣的,即使使用像Beautiful Soup這樣的工具。

          一旦我們有了一個漂亮的、干凈的格式的數據,剩下的就很簡單了。但不要只相信我的話,從這張圖表中可以看出:

          數據清理和組織占了數據科學項目的最大一塊。

          建筑模型

          如上所述,bigram模型只是根據前一個單詞對下一個單詞進行采樣。我們可以做到這一點的一個簡單方法是跟蹤當前單詞后面的單詞,以及它們的出現頻率。也就是說,我們在訓練數據中為每個單詞current_word保存一個字典,然后每次看到一個next_word,我們就更新current_word[next_word] +=1。然后,為了生成單詞,我們只需在current_word字典中查找所有單詞和計數,并對一個與計數成正比的單詞進行采樣。 這是一個完整模型在Python中的樣子:

          bigram語言模型的草圖。

          最后要注意的是,我們可能想通過添加一些特殊的標記來對歌詞進行預處理,以表示行和歌曲的開始/結束。這是為了迫使我們的模型在生成新歌詞時維護一些歌曲結構,否則模型只會吐出大量沒有結尾的文本。在我的代碼中,我使用XXSL、XXEL、XXSS和XXES分別表示起始行,結束行,開始歌曲和結束歌曲。

          最后,要生成歌曲,我們可以從XXSS令牌開始,并一直調用model.predict(),直到遇到XXES令牌為止。

          使用bigram模型生成一首歌。

          從理論上講,一旦循環停止,我們將產生一首從未見過的披頭士歌曲。但這有什么好處嗎?

          一首前所未有的披頭士的歌曲

          下面是bigram模型生成的歌曲的一小段:

          生成的樣本似乎不是很契合實際,但只有感同身受的人才覺得有意義。

          我們可以繼續擴展bigram模型來考慮前面兩個單詞。這就是所謂的 trigram模型。你可能會發現, trigram模型實際上可以產生更好的歌詞。這是因為三個單詞組合較少,因此模型在每個步驟中的選擇較少,而在某些步驟中它只有一個選擇。通常,我們可以通過考慮前面的n個單詞來創建一個任意的n-gram模型。當n等于整首歌的長度時,你可能會發現這個模型在生成披頭士的歌曲方面是完美的。不幸的是,它生成的歌曲已經存在。

          走向更好的模式

          bigram模型最突出的問題之一是,它只使用在訓練數據中看到的單詞和短語。雖然我們想要創作出聽起來像披頭士樂隊寫的歌詞,但我們不想只局限于他們使用的詞。例如,如果披頭士從未使用過單詞"parade",那么bigram模型將不會生成任何關于"parade"的歌曲。當然,由于我們只是在訓練披頭士的歌詞,我們不可能指望我們的模型使用從未見過的單詞。我們需要的是對大量的語料庫進行訓練,比如維基百科或Reddit。

          然而,即使我們對所有的維基百科都進行了訓練,并且看到了英語中的每一個單詞,我們的bigram模型仍然過于死板。例如,以短語"高個的男人"為例。每個對英語有基本了解的人都會認識到,"tall"只是"man"的修飾語,與之無關。相反,"tall"可以用來修飾無數的其他事物,比如"woman"、"boy"、"building"、"giraffe"等等。然而,我們的bigram模型不能學習這個,它必須在使用"tall"之前至少看到一次"tall"的用法。所以如果模型只看到過"高個男人"、"高個男孩"、"高個女人",而沒有看到過"高個女孩",那么就連"高個女孩"這個詞都不存在。

          因此,我們想要的是一個擁有更豐富的詞匯量和更深入理解詞匯中詞匯之間關系的模型。幸運的是,聰明的研究人員已經發明了如此強大的模型,我們可以用它們來創作更好的歌曲。

          GPT-2模型

          OpenAI的GPT-2模型,最近因為"太危險而不能發布"而成為頭條新聞。"模型生成這樣的令人信服的文本,作者認為這可能是用于惡意用途。相反,他們發布了兩個更小的版本供人們玩耍和實驗。我們將使用其中最小的一個來生成披頭士的歌詞。

          GPT-2是一個基于transformer的模型。在訓練期間,它能夠學習一個非常好的英語模型(或者至少是Reddit上使用的英語版本)。這意味著它能夠理解像"高"這樣的東西,它可以適用于人類、建筑物或長頸鹿。此外,由于它在Reddit上的訓練占很大一部分,它很可能看到了99.9%的英語單詞和短語。這對我們來說是個好消息,因為這正是我們一直在尋找的:一個龐大的詞匯表和對如何使用這個詞匯的深刻理解。

          然而,如果我們打開這個模型,讓它生成一些東西,它幾乎不可能產生類似披頭士的歌詞。這是因為模型不知道我們所傾向的是生成披頭士的歌詞,畢竟這不是它被訓的方向。相反,我們需要推動模型去做我們想讓它做的事情。我們可以通過遷移學習來做到這一點。

          遷移學習

          遷移學習是指我們可以通過做一件事來利用我們所學到的信息,并將其應用于解決相關的問題。例如,當你開始閱讀這篇文章時,你不需要重新學習單詞是什么,哪些單詞跟在哪些單詞后面,或者它們是如何組合成句子的。想象一下那將是多么乏味。相反,你利用了所有閱讀的文學書籍的時間來理解我現在所談論的內容(我想 Huck Fin畢竟派上了用場)。

          以類似的方式,我們可以利用GPT-2通過閱讀Reddit上數百小時的帖子所學到的知識,并將其遷移到生成披頭士歌詞的任務中。高層次的想法是采用預先訓練的模型,并將其訓練更長時間。不過,我們將只使用披頭士的歌詞,而不是Reddit上的帖子。這將使模型嚴重偏向于生成類似披頭士的歌曲。

          我將跳過如何做這個,因為它將采取另一個類似長度的帖子來解釋一切。

          新的披頭士樂隊

          就像所有優秀的深度學習成果一樣,我在引言中發布的歌詞也是精心挑選的。生成的歌曲并不都是那么的好,它們的質量取決于微調階段的位置。當模型仍然嚴重不適合訓練數據時,對大約100個小批量進行微調后,你可能會得到以下結果:

          這樣再寫10-15行。至少比Lil'Pump還要好。

          說正經的,我最感興趣的是前兩行。在訓練數據中,每首歌的開頭第一行是標題,第二行是作者,下面幾行是歌詞。即使在這個早期階段,該模型也設法了解了我們數據的結構:第一行和第二行是特殊的;在第二行中,可能出現的單詞組合很少,最有可能出現的是列儂和麥卡特尼。

          如果我們微調約350個小批量,模型開始產生更可信的歌詞,如在介紹,或這一個:

          不完美,但還不錯。最后,如果我們進行太長時間的微調,會發生以下情況:

          模型開始過度擬合,生成的樣本很可能出現在訓練數據中,如重復的"列儂&麥卡特尼"臺詞、"黃色潛水艇"等。我發現大約300-500步的微調能產生最好的歌詞。

          結論

          希望你現在對語言模型的工作原理有了更好的了解,并且了解我們如何利用最先進的模型來盡力的改進后續任務。

          話雖如此,GPT-2模型還有很多值得探索的地方。我生成的示例使用默認的suboptimal hyperparameters。如果把更多的時間花在正確的微調上,看看生成的歌詞能有多好會很有趣。我也只使用了發布的最小型號,因為我是用筆記本電腦訓練的。我相信更大的模型會產生更美好的結果。最后,OpenAI最近發布了MuseNet,它能夠生成非常逼真的音樂。如果將GPT-2和MuseNet放在一起(它們基本上是相同的模型),并生成歌詞和伴奏音樂,那該有多棒?如果我有更多的時間、金錢,或者對我正在做的事情有任何想法,我愿意用機器學習來創作一首成熟的歌曲,然后讓真正有天賦的人來表演。

          、建立站點后,在文件夾上右鍵新建一個文件,改名為音樂制作網頁,然后雙擊進入網頁,首先,插入表格,17行,2列,表格寬度和表格粗細都為0,確定。選中表格,下邊的對齊方式為,居中對齊

          2、選中第一個格,按住Ctrl鍵再選中第二個格,右鍵,表格,合并單元格,點擊插入,圖像,選擇建的站點下的素材,確定

          3、用剛才的方法合并第二行單元格,填寫導航欄文字,選擇拆分,找到對應代碼位置,填寫空格代碼 在文字前后都添加空格,使導航欄文字間隙均勻,下邊背景顏色改為紫色

          4、編寫下一行文字,背景顏色為綠色,金曲列表文字,下邊,HTML,格式為標題5,歌曲下載文字,下邊,HTML,格式為標題3,找到代碼中金曲列表文字對應位置,添加空格代碼

          5、在歌曲下載文字后面插入,圖像,選擇下載圖標圖片,點擊圖片,選擇連接指向你的歌曲MP3文件

          6、在每個格中加入歌名,每個都要插入,布局對象,Div標簽,然后添加歌曲名稱

          7、右半部分,前兩行合并,插入布局對象,添加文字那女孩對我說,HTML格式改為標題2,然后將下邊剩余所有行合并,插入布局,添加歌詞

          8、選擇歌詞,將HTML的格式改為標題5

          9、點擊代碼,找到歌詞位置,復制空格,在每一行歌詞前面招貼空格,刷新一下,使歌詞居中一些

          10、按F12預覽

          小伙伴們,有沒有看懂呢,看不懂可以去看視頻呦!


          主站蜘蛛池模板: 大屁股熟女一区二区三区| 视频一区在线免费观看| 在线日韩麻豆一区| 久久久久久免费一区二区三区| 亚洲高清日韩精品第一区| 无码人妻精品一区二区三区蜜桃| 一区二区三区四区精品视频| 在线观看国产一区二三区| 国产一区二区三区亚洲综合| 蜜臀Av午夜一区二区三区| 国产精久久一区二区三区| 国产成人亚洲综合一区| 无码精品一区二区三区| 欧美日韩精品一区二区在线观看| 国产成人久久精品麻豆一区| 亚洲国产欧美一区二区三区 | 制服美女视频一区| 久久人妻无码一区二区| 无码一区二区波多野结衣播放搜索| 国产一区二区久久久| 欲色影视天天一区二区三区色香欲 | 风间由美在线亚洲一区| 国产乱码精品一区二区三区麻豆 | 国产人妖在线观看一区二区| 国产SUV精品一区二区88L| 无码人妻啪啪一区二区| 久久精品国产一区二区三| 国产在线观看一区精品| 综合久久一区二区三区 | 高清一区二区三区| tom影院亚洲国产一区二区| 国产日韩AV免费无码一区二区 | 变态拳头交视频一区二区| 国产精品一区二区AV麻豆| 国产一区二区三区不卡在线观看| 在线成人综合色一区| 成人无码一区二区三区| 国产福利电影一区二区三区,亚洲国模精品一区| 亚洲av日韩综合一区在线观看| 久久91精品国产一区二区| 日韩AV无码久久一区二区|