2023年批量下载和改名音频专辑(多页列表)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、下载原理
多页列表有get类型的有post类型的xima的专辑多页列表属于get类型。
比如"https://www.xi__mala__ya.com/album/262212"专辑里面有1018个音频分成35页每页的json数据如下
1请求格式
https://www.xi___ma___laya.com/revision/album/v1/getTracksList?albumId=262212&pageNum=0&sort=0&pageSize=30
2返回格式
{"ret":200,"data":{"currentUid":0,"albumId":262212,"trackTotalCount":1018,"sort":0,"tracks":[{"index":1,"trackId":2968682,"isPaid":false,"tag":0,"title":"潘吉Jenny告诉你--世界杯开战","playCount":234549,"showLikeBtn":true,"isLike":false,"showShareBtn":true,"showCommentBtn":true,"showForwardBtn":true,"createDateFormat":"2014-06","url":"/sound/2968682","duration":609,"isVideo":false,"isVipFirst":false,"breakSecond":0,"length":609,"albumId":262212,"albumTitle":"潘吉Jenny告诉你-学英语聊美国","albumCoverPath":"storages/be09-audiofreehighqps/54/6E/GKwRIJIG8HemAAk3qQGehGJc.jpeg","anchorId":11119867,"anchorName":"开言英语","ximiVipFreeType":0,"joinXimi":false},{"index":2,"trackId":2968849,"isPaid":false,"tag":0,"title":"潘吉Jenny告诉你--美国血拼一族","playCount":165942,"showLikeBtn":true,"isLike":false,"showShareBtn":true,"showCommentBtn":true,"showForwardBtn":true,"createDateFormat":"2014-06","url":"/sound/2968849","duration":738,"isVideo":false,"isVipFirst":false,"breakSecond":0,"length":738,"albumId":262212,"albumTitle":"潘吉Jenny告诉你-学英语聊美国","albumCoverPath":"storages/be09-audiofreehighqps/54/6E/GKwRIJIG8HemAAk3qQGehGJc.jpeg","anchorId":11119867,"anchorName":"开言英语","ximiVipFreeType":0,"joinXimi":false
3音频地址
利用url里面 /sound/xxxx的数字可以得到音频地址
xi__ma.com/sound/2968849
此页面在点击播放后发送请求格式
https://www.xi___mala____ya.com/revision/play/v1/audio?id=2968849&ptype=1
返回的 json
{"ret":200,"data":{"trackId":2968849,"canPlay":true,"isPaid":false,"hasBuy":true,"src":"https://aod.cos.tx.xmcdn.com/group10/M0B/3B/BA/wKgDZ1WctZjjfjoAAFsf1AU2p0s242.m4a","albumIsSample":false,"sampleDuration":0,"isBaiduMusic":false,"firstPlayStatus":true,"isVipFree":false,"isXimiAhead":false,"isAlbumTimeLimited":false,"ximiVipFreeType":0,"joinXimi":false}}
其中关键的是src属性提供可以下载的音频地址。
4处理方法
我们不需要再取回网页只要分两次取回json数据即可。
第一次是目录分页的每一页的json有用的信息为 title , index, url
第二次是每个音频的json有用的信息为 音频地址。
使用者只需要提供album_id指定多页型专辑其它均自动处理。
二、代码如下
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import re
import os
from win32com.client import Dispatch
Headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
def get_list_json(album_id,pageNum):
list_url = f'https://www.xi___ma____la___ya.com/revision/album/v1/getTracksList?albumId={album_id}&pageNum={pageNum}&sort=0&pageSize=30'
#print(list_url)
wd_data = requests.get(list_url,headers=Headers)
return wd_data.json()
def get_sound_json(url):
wd_data = requests.get(url,headers=Headers)
return wd_data.json()
def get_m4a(album_id,pagelow, pagehigh):
o = Dispatch("ThunderAgent.Agent64.1")
for pageNum in range(pagelow,pagehigh):
print("Page : --------------" + str(pageNum))
list_json = get_list_json(album_id,pageNum)
for track in list_json['data']['tracks']:
#print(track)
id = track['url'][7:]
title = track['title']
index = track['index']
name = str(index) + "_" + title
m4a_url = "https://www.xi_____ma_____la____ya.com/revision/play/v1/audio?id=" + id + "&ptype=1"
m4a_json = get_sound_json(m4a_url)
m4a = m4a_json['data']['src']
print(m4a)
o.AddTask(m4a, name)
o.CommitTasks()
if __name__ == '__main__':
#url = "https://www.xi__malaya.com/album/71718770"
album_id = "262212"
get_m4a(album_id,11,20)
说明一get_m4a后面的两个数字是分页的开始页含、与结束页不含。