python爬取網(wǎng)易云音樂熱歌榜單(獲取iframe中數(shù)據(jù),src為空)

一.分析思路

網(wǎng)易云音樂熱歌榜的頁(yè)面采用嵌入內(nèi)聯(lián)框架的方式抄沮,若爬蟲直接從官網(wǎng)入口進(jìn)入訪問熱歌榜
http://music.163.com/#/discover/toplist?id=3778678髓迎,是無(wú)法獲取到iframe框架內(nèi)的數(shù)據(jù)的,因此應(yīng)當(dāng)用另外的方法進(jìn)行訪問份乒。當(dāng)然最簡(jiǎn)單的方法可以用selenium+chrome的方式進(jìn)行獲取數(shù)據(jù)(使用switch_to.frame方法,網(wǎng)上有很多教程)腕唧。

第二種方法采用分析api的方式進(jìn)行或辖,內(nèi)嵌的框架實(shí)際上也是一個(gè)網(wǎng)頁(yè)資源,因此只要我們找到它的鏈接四苇,然后獲取到這一頁(yè)面,自然也能獲取到數(shù)據(jù)方咆。本文采取此方式進(jìn)行分析和編寫程序月腋。

二.分析需求

獲取熱歌榜上所有歌曲名稱,以及歌手瓣赂,歌曲時(shí)長(zhǎng)榆骚,專輯等信息。

三.使用chrome開發(fā)工具分析頁(yè)面

1.打開網(wǎng)易云音樂熱歌榜頁(yè)面煌集,按下F12妓肢,打開chrome的開發(fā)者工具,找到iframe元素苫纤,發(fā)現(xiàn)其src為空碉钠,并且可以看到iframe中的內(nèi)容是使用javascript生成的:

image.png

2.因此我們需要分析api找到我們所需的鏈接。再選擇network卷拘,選擇Doc,然后重新加載界面喊废,發(fā)現(xiàn)文件有兩個(gè):


image.png

3.分別在這兩文件的response中搜索榜單上的任意一首歌,發(fā)現(xiàn)榜單在第二個(gè)document中:

image.png

4.右鍵這一Doc栗弟,選擇copy/copy link address獲取內(nèi)嵌框架的鏈接污筷。
5.用此鏈接另外打開一個(gè)界面發(fā)現(xiàn)界面又跳回原來(lái)的頁(yè)面,因此我們?cè)谠瓉?lái)的網(wǎng)頁(yè)右擊選擇查看框架源代碼乍赫,搜索后發(fā)現(xiàn)榜單數(shù)據(jù)是以json的格式存在<textarea>這一標(biāo)簽下:
image.png

6.我們采用chrome擴(kuò)展插件json handle來(lái)分析這些json數(shù)據(jù):
image.png

這樣就獲取到我們想要的數(shù)據(jù)了
四.編寫程序
代碼如下:

#—*—coding=utf-8
import requests
import sys
import json
import time
reload(sys)
sys.setdefaultencoding('utf8')
from bs4 import BeautifulSoup
url1 = 'http://music.163.com/discover/toplist?id=3778678'#云音樂熱歌榜
#UA必須要設(shè)置瓣蛀,未設(shè)置獲取的網(wǎng)頁(yè)不完整
headers = {  
    'Cookie':'__e_=1515461191756; _ntes_nnid=af802a7dd2cafc9fef605185da6e73fb,1515461190617; _ntes_nuid=af802a7dd2cafc9fef605185da6e73fb; JSESSIONID-WYYY=HMyeRdf98eDm%2Bi%5CRnK9iB%5ChcSODhA%2Bh4jx5t3z20hhwTRsOCWhBS5Cpn%2B5j%5CVfMIu0i4bQY9sky%5CsvMmHhuwud2cDNbFRD%2FHhWHE61VhovnFrKWXfDAp%5CqO%2B6cEc%2B%2BIXGz83mwrGS78Goo%2BWgsyJb37Oaqr0IehSp288xn5DhgC3Cobe%3A1515585307035; _iuqxldmzr_=32; __utma=94650624.61181594.1515583507.1515583507.1515583507.1; __utmc=94650624; __utmz=94650624.1515583507.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=94650624.4.10.1515583507',  
    'Host':'music.163.com',  
    'Refere':'http://music.163.com/',  
    'Upgrade-Insecure-Requests':'1',  
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'  
}  

response = requests.get(url1,headers=headers)
print response.status_code

html = response.text
soup = BeautifulSoup(html,'lxml')
update_time = soup.find('span',attrs={'class':'sep s-fc3'}).text
print update_time

#找到j(luò)son數(shù)據(jù)
textarea = soup.find('textarea').text
i = 1
contents = json.loads(str(textarea))

#將數(shù)據(jù)輸出到wangyi.log文件中
fo = open('wangyi.log','w')
sys.stdout = fo
for a in range(len(contents)):
    #發(fā)行時(shí)間
    t1 = time.localtime(contents[a].get('publishTime')/1000)
    t2 = time.strftime("%Y-%m-%d %H:%M:%S",t1)
    #歌曲時(shí)長(zhǎng)
    t3 = contents[a].get('duration')/1000
    min = str(t3/60)
    sec = str(t3%60)
    if len(sec)<2:
        sec = '0'+str(sec)
    #歌手
    artist = contents[a].get('artists')[0].get('name')
    #歌名
    music_name = contents[a].get('name')
    #專輯
    album = contents[a].get('album').get('name')
    print i,'.',music_name,u' 播放時(shí)長(zhǎng):',min+':'+str(sec)#.encode('gbk','ignore')
    print u'歌手:',artist
    print u'專輯:',album
    #其他信息
    if contents[a].get('alias'):
        alias = contents[a].get('alias')[0]
        print alias
    print u'發(fā)行時(shí)間:',t2
    i += 1
    print'--------------------------------------------------------------------'

輸出結(jié)果:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雷厂,隨后出現(xiàn)的幾起案子惋增,更是在濱河造成了極大的恐慌,老刑警劉巖改鲫,帶你破解...
    沈念sama閱讀 211,496評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件器腋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纫塌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門诊县,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人措左,你說我怎么就攤上這事依痊。” “怎么了怎披?”我有些...
    開封第一講書人閱讀 157,091評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵胸嘁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我凉逛,道長(zhǎng)性宏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,458評(píng)論 1 283
  • 正文 為了忘掉前任状飞,我火速辦了婚禮毫胜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诬辈。我一直安慰自己酵使,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,542評(píng)論 6 385
  • 文/花漫 我一把揭開白布焙糟。 她就那樣靜靜地躺著口渔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪穿撮。 梳的紋絲不亂的頭發(fā)上缺脉,一...
    開封第一講書人閱讀 49,802評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音悦穿,去河邊找鬼枪向。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咧党,可吹牛的內(nèi)容都是我干的秘蛔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,945評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼傍衡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼深员!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛙埂,我...
    開封第一講書人閱讀 37,709評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤倦畅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绣的,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叠赐,經(jīng)...
    沈念sama閱讀 44,158評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欲账,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,502評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芭概。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赛不。...
    茶點(diǎn)故事閱讀 38,637評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖罢洲,靈堂內(nèi)的尸體忽然破棺而出踢故,到底是詐尸還是另有隱情,我是刑警寧澤惹苗,帶...
    沈念sama閱讀 34,300評(píng)論 4 329
  • 正文 年R本政府宣布殿较,位于F島的核電站,受9級(jí)特大地震影響桩蓉,放射性物質(zhì)發(fā)生泄漏淋纲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,911評(píng)論 3 313
  • 文/蒙蒙 一院究、第九天 我趴在偏房一處隱蔽的房頂上張望洽瞬。 院中可真熱鬧,春花似錦儡首、人聲如沸片任。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至位他,卻和暖如春氛濒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹅髓。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工舞竿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窿冯。 一個(gè)月前我還...
    沈念sama閱讀 46,344評(píng)論 2 360
  • 正文 我出身青樓骗奖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親醒串。 傳聞我的和親對(duì)象是個(gè)殘疾皇子执桌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,500評(píng)論 2 348