python爬取音乐的代码。
2026/7/22 21:33:28 网站建设 项目流程
importrequestsimportosfromtqdmimporttqdmfromurllib.parseimporturlparseimporttimedefdownload_audio_with_progress(url,output_filename=None,chunk_size=8192):""" 下载音频文件并显示进度条 Args: url: 音频文件的URL output_filename: 输出文件名(可选) chunk_size: 下载块大小 """# 如果未指定输出文件名ifoutput_filenameisNone:parsed_url=urlparse(url)filename=os.path.basename(parsed_url.path)iffilename.endswith('.m4a'):filename=filename[:-4]+'.mp3'else:filename='audio.mp3'output_filename=filename# 确保是mp3扩展名ifnotoutput_filename.endswith('.mp3'):output_filename+='.mp3'# 请求头headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Referer':'https://music.163.com/','Accept-Encoding':'identity',# 不压缩,避免进度条计算错误}try:print(f"开始下载:{url}")print(f"目标文件:{output_filename}")# 先发送HEAD请求获取文件信息head_response=requests.head(url,headers=headers,timeout=10,allow_redirects=True)ifhead_response.status_code!=200:print(f"无法访问文件,状态码:{head_response.status_code}")returnFalse# 获取文件大小total_size=int(head_response.headers.get('content-length',0))iftotal_size==0:print("无法获取文件大小,使用简单下载方式...")response=requests.get(url,headers=headers,timeout=30)ifresponse.status_code==200:withopen(output_filename,'wb')asf:f.write(response.content)print(f"下载完成:{output_filename}")returnTrueelse:print(f"下载失败,状态码:{response.status_code}")returnFalseprint(f"文件大小:{total_size}bytes ({total_size/1024/1024:.2f}MB)")# 下载文件response=requests.get(url,headers=headers,stream=True,timeout=30)response.raise_for_status()# 使用进度条progress_bar=tqdm(total=total_size,unit='B',unit_scale=True,desc="下载进度")start_time=time.time()downloaded=0withopen(output_filename,'wb')asfile:forchunkinresponse.iter_content(chunk_size=chunk_size):ifchunk:file.write(chunk)downloaded+=len(chunk)progress_bar.update(len(chunk))progress_bar.close()# 计算下载速度download_time=time.time()-start_time download_speed=downloaded/download_time/1024# KB/sprint(f"\n✓ 下载完成!")print(f"文件:{output_filename}")print(f"大小:{downloaded}bytes ({downloaded/1024/1024:.2f}MB)")print(f"用时:{download_time:.2f}秒")print(f"平均速度:{download_speed:.2f}KB/s")returnTrueexceptrequests.exceptions.RequestExceptionase:print(f"网络请求错误:{e}")returnFalseexceptExceptionase:print(f"下载过程出错:{e}")returnFalse# 使用示例if__name__=="__main__":url="https://m804.music.126.net/20260109213219/ee92fda0d2911d7370c96aa34eb815cb/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/32476997212/2f07/079a/b3d6/8d7289ffa74ff0440ef61a183f2bb5a3.m4a?vuutv=MRWyryPhgRfUqVNXymxtqJwVWD7my2buPLQ0Tfa7IqdyJXX+CoI8CokjgMRbmooCGheI8cBob0+D9z7L3f+8ktVpmdJEeFic3eXu9BX++G0=&authSecret=0000019ba2de593002870a64a80a0006"# 指定输出文件名output_filename="my_music.mp3"# 下载文件success=download_audio_with_progress(url,output_filename)ifsuccess:print("\n🎵 音频文件下载完成!")else:print("\n❌ 下载失败")

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询