gevent 实现网易云音乐歌曲下载

下载是半手动的(需要自己输音乐的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前导入。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值