的目的是什么?这是一个python练习。通过本次练习,我们可以了解到:使用python发起http请求,python文件操作,python数据库操作。.理论上每段音频大致包括:id、标题、音频地址、更新时间等。在浏览器调试工具中查看http请求。环顾四周,看看是否可以找到相应的数据。看看是不是页面直接生成的,还是有额外的API获取数据。在网络分析中,快速浏览所有的http请求,查看响应结果,很快就会发现。在请求中,我们发现一个请求/revision/album/v1/getTracksList?albumId=18521227&pageNum=1,我们应该可以猜到albumId应该是专辑ID,pageNum应该是页面。让我们验证它是否与页面和响应结果相结合。错了,这是列表信息的请求URL。在json响应结果中,我们寻找更重要的信息:trackId-音频ID,title-音频标题,url-音频播放地址列表信息来源应该清楚了,我们继续看音频播放能找到音频源吗?2、分析音频播放页面打开单个音频播放地址后,和列表页一样,我们找到单个音频信息源。您应该能够找到/revision/play/v1/audio?id=247457234&ptype=1。本次请求响应结果中的src为音频地址。三、编码实现专辑列表方法1、使用requests发起http请求2、获取列表信息api并返回json结果,根据自己的需要,将列表信息保留在列表中3、方法返回列表曲目信息#获取专辑列表#album_id专辑ID#page_num页码defget_track_list(album_id,page_num):url="https://www.ximalaya.com/revision/album/v1/getTracksList?albumId="+str(album_id)+"&pageNum="+str(page_num)track_list=[]resp=requests.get(url,headers=header)result=resp.json()ifresult['ret']==200:tracks=result['data']['tracks']fortackintracks:track_list.append({'index':tack['index'],'play_count':tack['playCount'],'duration':tack['duration'],'trackId':tack['trackId'],'title':tack['title'],'url':tack['url']})#添加到字典(还没有使用)track_map[tack['trackId']]=tack['title']returntrack_list获取单条音频信息方法1,传入音频的id2,使用requests发起http请求,获取单个音频的json信息3.该方法返回音频的实际http源文本文件地址#获取音频地址defget_track_url(track_id):url="https://www.ximalaya.com/revision/play/v1/audio?id="+str(track_id)+"&ptype=1"resp=requests.get(url,headers=header)result=resp.json()ifresult['ret']==200:track_audio_play=result['data']['src']iflen(track_audio_play)>0:returntrack_audio_play在本地保存http音频文件信息1.使用requests发起http请求获取单个音频流2.保存到response的本地路径#下载音频文件defdownload_track_audio(url,file):resp=requests.get(url,headers=header,stream=True)withopen(file,"wb")asf:fordatainresp.iter_content(chunk_size=1024):ifdata:f.write(data)examplerun&saveinformationtodatabase尝试:dir="H:/Temp"#如何连接到mysql:connect('ip','user','password','dbname')con=mdb.connect(host='127.0.0.1',user='root',passwd='123456',db='py_demo',use_unicode=True,charset="utf8")#所有查询都运行在连接的模块游标上tocon=con.cursor()#执行查询#cur.execute("SELECTVERSION()")#得到前面查询的结果,是单条结果#data=cur.fetchone()track_list=get_track_list(18521227,1)sql="""insertintotrack_info_demo(id,trackId,title,play_count,duration,url,file_path)values(%s,%s,%s,%s,%s,%s,%s)"""fortrack_infointrack_list:#下载track_url=get_track_url(track_info.get('trackId'))file_path=""iftrack_url:#extensionfile_name=track_url[track_url.rindex('/'):]#文件名路径file_path=dir+file_name#下载download_track_audio(track_url,file_path)#values.append(track_info.get('index'))#values.append(track_info.get('trackId'))values=[track_info.get('index'),track_info.get('trackId'),track_info.get('title'),track_info.get('playCount'),track_info.get('duration'),track_info.get('url'),file_path]cur.execute(sql,values)con.commit()最后:如果con:#不管怎样,记得关闭连接con.close()结果数据库保存信息文件信息附:源码附件