下载是半手动的(需要自己输音乐的ID并且提供命名),因为办了QQ绿钻会员,不想再办网易的,纯粹自己用着方便
比较局限的是只能下载本身可以听的歌,会员才能听的文件下载不了。
(网易现在歌曲即使可以听,下载也是需要会员的,这个方法可以避开因此而充值会员)
音乐ID,复制右键歌曲,复制网页链接即可获得:)
比如这个:http://music.163.com/#/m/song?id=29431062
就是一串数字,然后运行文件(在终端或者任何可以运行.py文件的环境都可以),把数字输入,再输入文件名即可
注意:request模块要在gevent的补丁模块之前导入
import gevent
import urllib.request
from gevent import monkey
monkey.patch_all()
def download_song(img_url, img_name):
try:
img = urllib.request.urlopen(img_url)
with open(img_name, 'wb') as file:
while True:
img_data = img.read(1024)
if img_data:
file.write(img_data)
else:
break
except Exception as e:
print('下载失败', e)
else:
print('下载成功', img_name)
if __name__ == '__main__':
id = input('请输入音乐ID: ')
song = 'http://music.163.com/song/media/outer/url?id='+ id +'.mp3'
name = input('请输入文件名字:')
# 没搞服务器,不能查歌后自动抓ID匹配,小工具,凑合用
g1 = gevent.spawn(download_song, song, name+'.mp3')
g1.join()
PS:只能爬大众资源,网易做了版权保护的格式搞不来
注意:request模块要在gevent的补丁模块之前导入
报错信息:
/Users/cici/PycharmProjects/Web_crawlers/douban_spider_multi_.py:447: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ['urllib3.util.ssl_ (/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/util/ssl_.py)', 'urllib3.util (/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/util/__init__.py)'].
monkey.patch_all()
解决原理:
https://github.com/gevent/gevent/issues/1016
Thanks. The problem is that you're importing requests before you monkey patch. You must monkey patch before importing anything else. I can reproduce this if I patch in the incorrect order, but if I patch in the correct order it works as expected:
解决方法:
代码上就是把requests模块放到monkey.patch_all前导入。