九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
python3學(xué)習(xí)之爬蟲—————爬取網(wǎng)易云歌詞

     接觸python也有一段時(shí)間了,一提到python,可能大部分pythoner都會(huì)想到爬蟲,沒錯(cuò),今天我們的話題就是爬蟲!作為一個(gè)小學(xué)生,關(guān)于爬蟲其實(shí)本人也只是略懂,懷著”Done is better than perfect”的態(tài)度硬著頭皮開始了這篇文章的撰寫!好了,廢話不多說!

  先說一下今天我們的目的,作為一個(gè)音癡但不影響我對(duì)于音樂的執(zhí)著,所以今天我們爬取的是網(wǎng)易云音樂,我們將會(huì)通過代碼爬取歌詞并寫入到本地。

  作為新手,我很本能就打開頁面復(fù)制了url,然后用Beautifulsoup解析了網(wǎng)頁并打印出來,然后去查找歌詞所在的標(biāo)簽,心想這不是so easy嗎!寫下了以下代碼

1 # -*- coding:utf-8 -*-2 import requests3 import json4 import re5 from bs4 import BeautifulSoup6 lrc_url = "http://music.163.com/#/song?id=191232"7 lyric = requests.get(lrc_url)8 soup = BeautifulSoup(lyric.text,'lxml')9 print(soup)

臥擦嘞,打印出來了一些什么鬼??!居然沒有找到歌詞!怎么辦!怎么辦!沉思了良久后我覺得我掉進(jìn)了一個(gè)巨坑,事情絕對(duì)沒有那么簡單!.....(心情無比悲痛,此處省略一萬字)作為平常屢試不爽的招數(shù)今天居然裝逼失??!痛定思痛,我覺得肯定是URL的問題,經(jīng)過一番思索發(fā)現(xiàn)原來我找了一個(gè)假的URL!幾經(jīng)波折,找到了這樣一個(gè)URL

'http://music.163.com/api/song/lyric?' + 'id=' + str(191232) + '&lv=1&kv=1&tv=-1'
打印出來的效果是這樣的:

這才像那么回事了,但是發(fā)現(xiàn)里面還多了一些不需要的東西。

第二步,篩選出我們需要的元素,這里我們將用到正則表達(dá)式和json,切記用之前先導(dǎo)入這兩個(gè)模塊。加入幾行代碼,帥選后的結(jié)果為:

到這里我們已經(jīng)基本上完成了我們的工作。最后一步,寫入文本就不多說了,這樣我們?cè)偌由蠋仔写a就搞定了!這里我們先貼上之前的代碼

 

按 Ctrl+C 復(fù)制代碼
按 Ctrl+C 復(fù)制代碼

 

由于本人對(duì)歌神的崇拜猶如滔滔江水之連綿不絕,幾乎他的每一首歌都很喜歡,所以我想多下幾首歌的歌詞,熱心的吃瓜群眾可能會(huì)這樣提醒我換一首歌,把URL復(fù)制進(jìn)去替換一下不就OK了嗎,但是作為一個(gè)連吃飯都舍不得下床的極度懶惰者我怎么可能會(huì)做這樣繁瑣的事呢!誒換了一首歌也只是歌曲的ID發(fā)生了變化。找到規(guī)律了!我們可以定義一個(gè)這樣的函數(shù)根據(jù)歌曲的ID去自動(dòng)下載歌曲的歌詞,我們想要下載哪首歌曲的歌詞需要輸入歌曲的ID就可以了!我們可以看到張學(xué)友的主頁有50首最熱門的單曲,我們姑且就先定一個(gè)小目標(biāo),下他個(gè)50首歌!根據(jù)我們剛剛的思路我們只需要從這個(gè)頁面篩選出這50首歌曲的ID就可以了!這時(shí)候我們又遇到了和剛剛一樣的問題,print一個(gè)居然找不到我們需要的元素。歷經(jīng)千辛萬苦終于get到了一個(gè)爭氣的URL,

'http://music.163.com/artist?id=' + str(6460)
同樣,經(jīng)過一番篩我們找到了自己需要的東西,那就是一大串的music_id!說了這么多上代碼
按 Ctrl+C 復(fù)制代碼
按 Ctrl+C 復(fù)制代碼

再來一張效果圖

 有了這些我們就可以根據(jù)一個(gè)歌手的ID爬取這個(gè)歌手的50首熱門歌曲的歌詞,定義一個(gè)函數(shù)即可,這里就不貼代碼了。就這樣我成功的爬取了歌神的50首熱門歌曲的所有歌詞!講到這里可能有的朋友說自己的偶像不是學(xué)友哥啊,我想爬取其他歌手的歌詞,比如說我們的華仔啊,周董啊,天后王菲啊.....于是我就又折騰了一下,找到這樣一個(gè)頁面“華語樂壇歌手歷史地位排行top50”(注:歌手排列順序?yàn)榫W(wǎng)上搬運(yùn),不代表單主看法,排行榜出處網(wǎng)址: http://m.icaijing.com)索性我就我把這五十個(gè)歌手的50首熱門歌曲都爬取下來吧!不料又出了一個(gè)問題!下載到某位歌手的一首歌時(shí)報(bào)錯(cuò)了!

思考了一會(huì),覺得代碼沒有問題??!于是做了一個(gè)標(biāo)記,可以讓我看到是下載到哪個(gè)歌手的哪個(gè)歌手的哪一首歌時(shí)出了錯(cuò)誤,機(jī)智的我終于找到了問題所在,原來是該歌曲沒有提供歌詞!于是又添了幾行代碼引入了異常機(jī)制!終于完美了!下面附上源代碼及效果圖

 1 # -*- coding:utf-8 -*- 2 import requests 3 from bs4 import BeautifulSoup 4 import json 5 import re 6 top50_singer_url='http://music.163.com/playlist?id=119712779' 7 web_data=requests.get(top50_singer_url) 8 soup=BeautifulSoup(web_data.text,'lxml') 9 10 R=soup.textarea.text#找到歌手ID所在的標(biāo)簽11 12 json_obj=json.loads(R)13 top50_singer_ID_set=[]14 for each in json_obj:15     singer_ID=each['artists'][0]['id']16     top50_singer_ID_set.append(singer_ID)#將排名前50的歌手的id存進(jìn)一個(gè)列表17 18 19 def func(singer_ID1):#定義一個(gè)函數(shù),通過一個(gè)歌手的id下載其最火的五十首歌的全部歌詞20 21 22     from bs4 import BeautifulSoup23     singer_url  = 'http://music.163.com/artist?id=' + str(singer_ID1)24     web_data=requests.get(singer_url)25     soup=BeautifulSoup(web_data.text,'lxml')26     singer_name=soup.select("#artist-name")27 28     singer_name=singer_name[0].get('title')29 30     r=soup.find('ul',{'class':'f-hide'}).find_all('a')31     r=(list(r))32     music_id_set=[]33     music_name_set=[]34     for each in r:35         song_name=each.text#print(each.text)36         music_name_set.append(song_name)37 38         song_id=each.attrs["href"]39         music_id_set.append(song_id[9:])40 41 42 43     dic=dict(map(lambda x,y:[x,y],music_name_set,music_id_set))#將音樂名字和音樂id組成一個(gè)字典44 45 46     from bs4 import BeautifulSoup47     def get_lyric_by_music_id(music_id):#定義一個(gè)函數(shù),通過音樂的id得到歌詞48         lrc_url = 'http://music.163.com/api/song/lyric?' + 'id=' + str(music_id) + '&lv=1&kv=1&tv=-1'49 50         lyric=requests.get(lrc_url)51         json_obj=lyric.text52         #print(json_obj)53         j=json.loads(json_obj)54         #print(type(j))#打印出來j的類型是字典55         try:#部分歌曲沒有歌詞,這里引入一個(gè)異常56             lrc=j['lrc']['lyric']57             pat=re.compile(r'\[.*\]')58             lrc=re.sub(pat,"",lrc)59             lrc=lrc.strip()60             return lrc61         except KeyError as e:62             pass63     x=064     for i in music_id_set:65         x=x+166 67 68         print(x)69         top_50_lyric=get_lyric_by_music_id(i)70 71         f=open("F:/projects/scrapy/%s.txt" % singer_name,"ab")#單個(gè)文件存儲(chǔ)一個(gè)歌手的50首熱門歌曲的歌詞并以歌手的名字命名72         try:#引入異常73             f.write(top_50_lyric.encode('utf-8'))74 75             f.close()76         except AttributeError as e2:77             pass78 for singer_ID in top50_singer_ID_set:#依次將列表中的id代表的歌手的歌詞下載下來79     singer_ID1=singer_ID80     func(singer_ID1)

至此,第一篇學(xué)習(xí)筆記就要完結(jié)了!由于本人才疏學(xué)淺,加上又是第一次寫博,文章中會(huì)出現(xiàn)一些錯(cuò)誤或者不規(guī)范的地方,希望大家諒解!也歡迎各位大佬指出不足,謝謝大家!!

 

 

 

 

 

 

 

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
爬蟲學(xué)習(xí)(十二)
【易歌詞 E
scrapy遇上ajax,抓取QQ音樂周杰倫專輯與歌詞(6)
程序員如何煉成 Python 爬蟲“王者”?
5nd音樂 現(xiàn)在就出發(fā) MP3破解并云音樂地址及Lrc歌詞(初稿)
酷狗音樂中的KRC為后綴名的文件,是歌詞文件~可以在傻丫頭特別版本中直接使用~默認(rèn)保存路徑為D盤~Kugou~Lyric文件夾
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服