抓到音频URL...
仔细分析每一条请求意外发现json格式的文件请求包含了音频的下载信息
再次分析这个json网址,很容易发现,那数字明显是音频的ID
为了验证一下这个想法,审核元素。
果然是。这样就简单啦。
所以程序的思路是,用正则先从网页源代码中获取所有音频ID,然后根据这个音频ID去拼接json网址,用这个json网址去取得音频下载地址和音频的标题,最后下载到本地。
具体代码如下
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网址
json_usr = 'http://www.ximalaya.com/tracks/' + m + '.json'
#开始提交json网址
html_json = requests.get(json_usr, headers=header)
#开始提取音频网址和音频名称
music_url = html_json.json()['play_path_64']
music_name = html_json.json()['title']
#开始下载音频,保存为二进制数据
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)