美文网首页Python爬虫分析
喜马拉雅音频批量下载Python

喜马拉雅音频批量下载Python

作者: 北冥神君 | 来源:发表于2017-12-28 00:12 被阅读458次
分析过程: image.png

抓到音频URL...
仔细分析每一条请求意外发现json格式的文件请求包含了音频的下载信息


image.png
image.png
再次分析这个json网址,很容易发现,那数字明显是音频的ID

为了验证一下这个想法,审核元素。


image.png

果然是。这样就简单啦。

所以程序的思路是,用正则先从网页源代码中获取所有音频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)

相关文章

网友评论

    本文标题:喜马拉雅音频批量下载Python

    本文链接:https://www.haomeiwen.com/subject/mvapgxtx.html