Python抓取百度音樂。

來源:互聯網
上載者:User

標籤:

今天挑戰下百度音樂抓取,先用Chrome分析下請求的連結。

最關鍵的就是這個連結

http://play.baidu.com/data/music/songlink

請求這個帶上songid就能返回給你音樂的json,那麼怎麼來擷取songid呢?

點開 http://music.baidu.com/tag,找個標籤進去。然後查看頁面源碼。發現有以下片段。

在每首歌曲的li元素的data-songitem裡面恰巧包含我們需要的sid。ok,目標明確了,首先請求百度音樂的音樂標籤頁,然後獲得sid。然後請求

http://play.baidu.com/data/music/songlink

並且帶上我們組裝好的sid。最後根據返回json擷取我們需要的資訊。

代碼如下(剛學Python,寫的不是太好):

#!/usr/bin/python#coding=utf-8__author__ = ‘zhm‘import urllibimport urllib2import refrom json import *#SONG_TAG_URL = ‘http://music.baidu.com/tag/%E7%BB%8F%E5%85%B8%E8%80%81%E6%AD%8C‘SONG_LINK_URL = ‘http://play.baidu.com/data/music/songlink‘def getContent(url,pattern):    try:        f=urllib2.urlopen(url)        result =  f.read();        content = re.compile(pattern, re.DOTALL)        style = content.search(result)        if style:            result = style.group(0)            return result        else:            return None    except Exception ,e:        print eif  __name__=="__main__":    for i in range(0,1000,25):        #根據給出的百度音樂分類位址解析出songid        result = getContent(SONG_TAG_URL+‘?start=‘+unicode(i)+‘&size=25&third_type=0‘,‘<ul>.*?</ul>‘)        sids = []        sidPattern = re.findall("&quot;sid&quot;:.*?,&quot;",result)        for sid in sidPattern:            sids.append(re.sub(‘,&quot;‘,‘‘,re.sub(‘&quot;sid&quot;:‘,‘‘,sid)))        # print sids        #將songid構造成post請求參數        formdata = { "songIds" : ",".join(sids)}        data_encoded = urllib.urlencode(formdata)        # print data_encoded        songList = urllib2.urlopen(SONG_LINK_URL,data_encoded)        songListJson = songList.read()        # print songListJson         #json 轉字典        song_dict = JSONDecoder().decode(songListJson)        #擷取songList        song_data_dict = song_dict.get("data").get("songList")        for sond_data in song_data_dict:            song_name = sond_data.get(‘songName‘)            song_artistName = sond_data.get(‘artistName‘)            song_format = sond_data.get(‘format‘)            song_link = sond_data.get(‘songLink‘)            if song_name is None or                             song_artistName is None or                             song_format is None or                             song_link is None:                continue            print song_name+‘--‘+song_artistName+‘.‘+song_format+u‘     下載連結為:‘+song_link            #下載方法此處就省略了。


Python抓取百度音樂。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.