python下载mp3文件_Python 下载Mp3
importrequests,os,time,sys,reimporturllib.requestimportrequestsfrom bs4 importBeautifulSoupimportosfrom scrapy.selector importSelectorclasswangyiyun():def __init__(self):
self.headers={‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36‘,‘Referer‘: ‘http://music.163.com/‘}
self.main_url=‘http://music.163.com/‘self.session=requests.Session()
self.session.headers=self.headers
self.song_list={}defget_songurls(self,playlist,long):‘‘‘进入所选歌单页面,得出歌单里每首歌各自的ID 形式就是“song?id=64006"‘‘‘url=self.main_url+‘playlist?id=%d‘%playlist
re= self.session.get(url) #直接用session进入网页
sel=Selector(text=re.text) #用scrapy的Selector,懒得用BS4了
songurls=sel.xpath(‘//ul[@class="f-hide"][email protected]‘).extract()
songurls= songurls[:long] #这里我只选取了列表的前long个元素
return songurls #所有歌曲组成的list
##[‘/song?id=64006‘, ‘/song?id=63959‘, ‘/song?id=25642714‘, ‘/song?id=63914‘, ‘/song?id=4878122‘, ‘/song?id=63650‘]
defget_songinfo(self,songurl):‘‘‘根据songid进入每首歌信息的网址,得到歌曲的信息
return:‘64006‘,‘陈小春-失恋王‘‘‘url=self.main_url+songurl
re=self.session.get(url)
sel=Selector(text=re.text)
song_id= url.split(‘=‘)[1]
song_name= sel.xpath("//em[@class=‘f-ff2‘]/text()").extract_first()
singer= ‘&‘.join(sel.xpath("//p[@class=‘des s-fc4‘]/span/a/text()").extract())
songname=singer +‘-‘+song_name
b=[‘\\‘,‘/‘,‘:‘,‘*‘,‘?‘,‘"‘,‘‘,‘"‘]for x inb:if x insongname:
songname=songname.replace(x,‘‘)returnstr(song_id),songnamedefdownload_song(self, i, songurl, dir_path):‘‘‘根据歌曲url,下载mp3文件‘‘‘
try:
song_id, songname= self.get_songinfo(songurl) #根据歌曲url得出ID、歌名
song_url = ‘http://music.163.com/song/media/outer/url?id=%s.mp3‘%song_id
path= dir_path + os.sep + songname + ‘.mp3‘ #文件路径
ifos.path.exists(path):print(str(i), songname+‘exists!‘,sep=‘.‘)else:
song=requests.get(song_url,headers =self.headers)
with open(path,‘wb‘) as f: #下载文件
print(str(i),songname+‘.mp3‘,sep=‘.‘)
f.write(song.content)
self.song_list[i]=pathexceptException as error_info:print(‘Error! =======‘ +songname)pass
deffileSize(self):"""判断下载下来的文件的大小,如果太小,就删掉。"""
for num inself.song_list:
file=self.song_list[num]
fsize=os.path.getsize(file)
f_kb= fsize/float(1024)if f_kb < 1024:
os.unlink(file)print(str(num),file.split(‘\\‘)[-1] + ‘Small than 1M. Has been deleted.‘,sep=‘.‘)defwork(self, playlist,long,path):
songurls= self.get_songurls(playlist,long) #输入歌单编号,得到歌单所有歌曲的url
i = 1
for songurl insongurls:
self.download_song(i,songurl, path)#下载歌曲
i += 1self.fileSize()if __name__ == ‘__main__‘:
long= int(input("How many songs do you want to download?\n"))
path= r‘D:\备份\新建文件夹‘d=wangyiyun()
d.work(400931460,long,path) #400931460是网页版歌单网址中 id 后面的参数
python下载mp3文件_Python 下载Mp3相关推荐
- python 打开word文件_python下载word文件-Python用python-docx读写word文档
备注: doc是微软的专有的文件格式,docx是Microsoft Office2007之后版本使用,其基于Office Open XML标准的压缩文件格式,比 doc文件所占用空间更小.docx格式 ...
- Linux命令行下载大文件,下载Onedrive文件
Linux命令行下载大文件,下载Onedrive文件 做深度学习实验时,经常会遇到下载数据集,下载到本地又上传到Linux服务器上,这时用rz上传会很慢,在网上找到一些方法,用curl下载One-dr ...
- GitHub:如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细攻略(图文教程)
GitHub:如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细攻略(图文教程) 目录 如何从GitHub上下载文件 1.下载整个项目文件 T1.点击download ZIP直接下 ...
- python软件在下载库文件_python – 并行下载多个文件的库或工具
我正在寻找一个python库或一个命令行工具来并行下载多个文件.我目前的解决方案是顺序下载文件缓慢.我知道你可以很容易地在python中编写一个半条线程的线程解决方案,但是在使用线程时总是遇到麻烦的问 ...
- python多线程下载大文件_Python threading多线程断点下载文件的方法
这是玩蛇网一篇关于Python多线程下载文件方法的代码实例.文中应用到的python模块和方法有httplib.Python urllib2.Python threading多线程模块.python ...
- python下载加密视频_Python下载未加密的m3u8文件(流媒体文件)
很多时候我们用手机浏览器缓存视频时发现缓存下来的文件后缀是.m3u8格式的,按文件目录找过去发现是一个几十K大小的系统不可读的文件,那我们缓存下来的文件去哪儿了呢? 其实.m3u8文件就相当于一个协议 ...
- 用python写一个文件管理程序下载_Python管理文件神器 os.walk
原标题:Python管理文件神器 os.walk 来自:CSDN,作者:诡途 [导语]:有没有想过用python写一个文件管理程序?听起来似乎没思路?其实是可以的,因为Python已经为你准备好了神器 ...
- Python requests下载超大文件/批量下载文件
(一)下载超大文件: 使用 python 下载超大文件,直接全部下载,文件过大,可能会造成内存不足,这时候要使用 requests 的 stream 模式 主要代码如下 iter_content:一块 ...
- python读取手机文件_python 读取 网络 文件
Python之pandas数据加载.存储 Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...
最新文章
- DRF序列化和反序列化
- Product Orders(生产订单)状态相关函数BAPI
- sudo: unable to resolve host ubuntu提示的解决
- 包邮送书 50 本,你还有什么理由不上进?
- 初识斯蒂尔杰斯积分(Stieltjes integral)
- 标准化(Normalization)和归一化实现
- 破格晋升!一批高校教师脱颖而出
- C#技术点--修改系统时间
- html表格编辑器退出编辑状态,易优后台编辑器取消html标签(比如表格属性等)过滤解决方法...
- PouchDB 基础
- javascript高级程序设计pdf(JavaScript高级程序设计PDF版)
- J2EE学习总结(五)------用户登录界面设计
- CATIA V6二次开发——宏应用
- 计算机国际期刊等级,计算机期刊等级(全)
- 200多个JS小技巧
- Lambda表达式的一些相关知识理解
- 关于开机USB电涌15秒关机的另类解决方法
- Python安装PEP8
- 基于多目标优化方法的电梯零部件预防性维修期决策
- es是什么意思java_Elasticsearch----java操作ES
热门文章
- 一图读懂国家标准GB/T 42012-2022《信息安全技术 即时通信服务数据安全要求》
- jquery插件chosen多选时排序问题
- jlink 下载uboot到norflash
- 阿里云账号实名认证、域名实名认证和域名备案有什么区别呢?
- 汽车零部件企业数字工厂管理系统建设方案
- 由九天创合资本及OnFund向上基金联合主办的链•全球区块链投资机构系列酒会第一站在上海顺利举办
- redis - set key value [expiration EX seconds|PX milliseconds] [NX|XX]
- 动网论坛 上传文件类型
- Any fool can do it (递归)
- ensp模拟器下简单ospf配置