zoukankan      html  css  js  c++  java
  • 7.6批量下载网易云歌曲

    2018-7-16 11:10:07 学了多进程再优化一下自己的代码,采用多进程下载,发现速度大有提高,在main() 中修改了一下,放上代码

    #!/usr/bin/env python
    #!--*--coding:utf-8 --*--
    #!@Time    :2018/7/6 12:13
    #!@Author   TrueNewBee
    #爬取并批量下载网易云歌单歌曲
    #根据URL下载音乐  https://music.163.com/#/playlist?id=2269661190
    
    import requests
    import time
    from multiprocessing import Pool
    from bs4 import BeautifulSoup
    from urllib.request import urlretrieve
    from multiprocessing import  Process
    
    
    #1.获取页面源代码
    def get_page():
        """获取网页源代码(选择自己喜欢的网易云歌单连接)"""
        # 去掉原链接里面的   #/
        url ="https://music.163.com/playlist?id=2269661190"
        #请求头
        headers ={
            'Host':'music.163.com',
            'Referer':'https://music.163.com/',
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
        }
        #获取网页源代码
        res = requests.get(url,headers=headers).text
        #创建对象  解析网页
        r = BeautifulSoup(res,"html.parser")
    
    #2.获取ID
        music_dict = {}
        #找源代码中的a标签
        result = r.find("ul",{'class':'f-hide'}).find_all('a')
        for music in result:
            music_id = music.get('href').strip("/song?id=")#去掉/song?id
            music_name = music.text #获取其中的文字
            music_dict[music_id] = music_name
        return music_dict
    
    
    #3.下载歌曲
    def download_song(music_dict):
        """下载音乐"""
        for song_id in music_dict:
            song_url = "http://music.163.com/song/media/outer/url?id=%s.mp3"%song_id
            #下载地址(地址填写自己的地址)
            path="C:\UsersAdministratorDesktop网易云音乐\%s.mp3"%music_dict[song_id]#通过键值对来查找歌曲名字
            #下载音乐  urlretriver (地址  路径)
            time.sleep(1)
            urlretrieve(song_url,path)
            print("下载完成%s"%music_dict[song_id])
    
    
    def  main():
        music_dict =get_page()
        #采用了多线程式下载,速度更快了
        for i in range(3):
            p = Process(target=download_song,args=(music_dict,))
            p.start()
    if __name__ == '__main__':
        main()

    已经优化过了,有那么一丢丢小小成就感只是用被人的视频看的罢了!不过里面有值得学的地方,就是昨天猫眼使用的正则选取有用东西,而今天的则是用的bs4库里面的

    from bs4 import BeautifulSoup      github连接 :https://github.com/TrueNewBee/pythonDemo

    r = BeautifulSoup(res,"html.parser")
    #2.获取ID
        music_dict = {}
        #找源代码中的a标签
        result = r.find("ul",{'class':'f-hide'}).find_all('a')     #这样看着更省事一点,我过会优化一下我的猫眼代码
        for music in result:
            music_id = music.get('href').strip("/song?id=")#去掉/song?id
            music_name = music.text #获取其中的文字
            music_dict[music_id] = music_name
    

     放上我的所有源代码,我也想放到Github,给谁没有的样

    #!/usr/bin/env python
    #!--*--coding:utf-8 --*--
    #!@Time    :2018/7/6 12:13
    #!@Author   TrueNewBee
    #爬取并批量下载网易云歌单歌曲
    #根据URL下载音乐  https://music.163.com/#/playlist?id=2269661190
    
    import requests
    import time
    from multiprocessing import Pool
    from bs4 import BeautifulSoup
    from urllib.request import urlretrieve
    
    
    #1.获取页面源代码
    def get_page():
        """获取网页源代码(选择自己喜欢的网易云歌单连接)"""
        # 去掉原链接里面的   #/
        url ="https://music.163.com/playlist?id=2269661190"
        #请求头
        headers ={
            'Host':'music.163.com',
            'Referer':'https://music.163.com/',
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
        }
        #获取网页源代码
        res = requests.get(url,headers=headers).text
        #创建对象  解析网页
        r = BeautifulSoup(res,"html.parser")
    
    #2.获取ID
        music_dict = {}
        #找源代码中的a标签
        result = r.find("ul",{'class':'f-hide'}).find_all('a')
        for music in result:
            music_id = music.get('href').strip("/song?id=")#去掉/song?id
            music_name = music.text #获取其中的文字
            music_dict[music_id] = music_name
        return music_dict
    
    
    #3.下载歌曲
    def download_song(music_dict):
        """下载音乐"""
        for song_id in music_dict:
            song_url = "http://music.163.com/song/media/outer/url?id=%s.mp3"%song_id
            #下载地址(地址填写自己的地址)
            path="C:\UsersAdministratorDesktop网易云音乐\%s.mp3"%music_dict[song_id]#通过键值对来查找歌曲名字
            #下载音乐  urlretriver (地址  路径)
            time.sleep(1)
            urlretrieve(song_url,path)
            print("正在下载%s"%music_dict[song_id])
    
    
    def  main():
        music_dict =get_page()
        download_song(music_dict)
    
    if __name__ == '__main__':
        main()
    

      

  • 相关阅读:
    深入解析 float
    解决 css 浮动后 父元素高度失效问题
    高性能 Socket 组件 HP-Socket v3.2.1-RC1 公布
    基于lucene.net 和ICTCLAS2014的站内搜索的实现1
    史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发
    【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
    栈模拟队列 队列模拟栈
    状态机的两种写法
    Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器
    OpenGLES 与 WebGL 中顶点属性的组织格式的误解
  • 原文地址:https://www.cnblogs.com/zhen1996/p/9273361.html
Copyright © 2011-2022 走看看