老规矩,先上代码
import requests
import os
import urllib
# json文件地址
json_url = "https://www.ximalaya.com/sets/8912476.ext.json"
# 仿冒Chrome浏览器进行访问,否则会无法访问
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = requests.get(json_url, headers=headers)
# 获取json文件
full_json = response.json()
# 找到所有的声音
tracks = full_json['tracks']
# 创建下载文件夹
if not os.path.exists('download'):
os.makedirs('download')
# 逐个下载
for track in tracks:
# 获取json中的下载地址和标题
url = track['play_url']
title = track['title']
# 用标题作为文件名
filename = "download/"+title+".mp3"
# 下载
with urllib.request.urlopen(url) as web:
with open(filename, 'wb+') as outfile:
outfile.write(web.read())
# 输出下载结果
print(title," downloaded.")
print('Download is done.')
这次的抓取是顺着上一篇,上一次在抓取iTunes的时候看到有些音频的源是来自喜马拉雅的,所以,我顺便去喜马拉雅转了一下。
- 每一个喜马拉雅的专辑,例如:郭德纲21年相声精选,都会有一个分享链接,点开后,选择“展开获取专辑链接”,这时候会有“html代码”、“通用代码”和“微电台”三个选项,选择html代码,并复制链接:
https://www.ximalaya.com/thirdparty/player/album/player.html?id=9723091&type=red
。 - 把上面的HTML代码的地址复制到浏览器中打开,并使用浏览器的开发者工具跟踪网络情况,会发现一个xhr里面包含该专辑所有的音频信息,地址为
https://www.ximalaya.com/sets/9723091.ext.json
,只需要分析该json的字段就可以抓紧了。 - python代码没有什么难度。
路人:“禅师,喜马拉雅上面这些免费资源随时可以收听,流量也不算大,为什么还要下载呢?”
禅师微微一笑,指着面前一把木锤对路人道:“看看它你就明白了。”
路人参详许久,若有所思道:“大师的意思是否是说,下载的意义就像这把木锤一样,看似平淡无奇,但是有一种工匠精神?”
大师闭上眼睛道:“非也!我意思是,我下载关你锤子事。”