抓到音頻URL...
仔細(xì)分析每一條請求意外發(fā)現(xiàn)json格式的文件請求包含了音頻的下載信息
再次分析這個(gè)json網(wǎng)址荷并,很容易發(fā)現(xiàn),那數(shù)字明顯是音頻的ID
為了驗(yàn)證一下這個(gè)想法,審核元素委可。
果然是。這樣就簡單啦腊嗡。
所以程序的思路是着倾,用正則先從網(wǎng)頁源代碼中獲取所有音頻ID,然后根據(jù)這個(gè)音頻ID去拼接json網(wǎng)址燕少,用這個(gè)json網(wǎng)址去取得音頻下載地址和音頻的標(biāo)題卡者,最后下載到本地。
具體代碼如下
import requests, re, time
header = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0'}
pages = []
#獲取音頻ID模塊
for n in range(1, 3):
urls = 'http://www.ximalaya.com/4932085/album/3160816?page=' + str(n)
html = requests.get(urls, headers=header)
time.sleep(2)
page = re.findall('href="/4932085/sound/(.*?)/" hashlink title=', html.text)
pages.extend(page)
#去重音頻ID
pages = list(set(pages))
#排序音頻ID
pages.sort()
#下載音頻模塊
for m in pages:
time.sleep(2)
#開始拼接json網(wǎng)址
json_usr = 'http://www.ximalaya.com/tracks/' + m + '.json'
#開始提交json網(wǎng)址
html_json = requests.get(json_usr, headers=header)
#開始提取音頻網(wǎng)址和音頻名稱
music_url = html_json.json()['play_path_64']
music_name = html_json.json()['title']
#開始下載音頻,保存為二進(jìn)制數(shù)據(jù)
music_data = requests.get(music_url,headers = header).content
#下載到本地
with open('%s.m4a'%music_name,'wb') as f:
f.write(music_data)
print('正在下載....',music_name)