• 简体
    • 繁体
    • 英语
  • 注册
  • 电脑软件 电脑软件 关注:1982 内容:3293

    9ku多线程音乐下载

  • 查看作者
  • 打赏作者
  • 当前位置: 零次元社区 > 软件圈 > 电脑软件 > 正文
    • 电脑软件
    • 9ku音乐网站多线程音乐下载
      不废话9ku音乐网的资源都还不错 通过浏览器猫抓一个一个下载 速度有点慢 而且费人工   所以写了一个脚本  然后通过 pyinstaller 打包成exe 可能存在报毒

      注意:没有做线程限制 会无限创建线程 如网络以及电脑性能较差 请不要轻易尝试
      没做打印优化  下载完以后会自动关闭

      多线程下载.jpg (48.78 KB, 下载次数: 1)

      下载附件

      2021-5-12 17:32 上传

      默认下载到运行目录下的music文件夹中
      外链: 链接密码:foyl

      [Python] 纯文本查看 复制代码
      '''
      批量下载9KU音乐网站的demo
      通过xpath筛选带有Value值的 id 再通过9ku的js解析返回json内容进行下载
      需要有列表也就是需要有勾选项
      '''
      import wget,requests,json,base64,_thread,time,os,threading
      from lxml import etree
      from urllib import request
      header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
      testurl="https://www.9ku.com/laoge/500shou.htm"   #列表路径
      print("请输入9ku音乐网列表链接")
      print("例如:"+ testurl)
      url =input()
      if url.find("9ku") == -1:
      print("啥玩意儿哦  少拿其他玩意儿来忽悠我")
      req=request.Request(url,headers=header)
      data_html=request.urlopen(req).read().decode()
      html=etree.HTML(data_html)
      xp1= "//@value"
      Ths = 0
      idlist = html.xpath(xp1)
      Songid=[]
      Songid.extend(idlist)
      #print(Songid)
      print("请输入保存文件名称")
      dirs = input()  # 文件夹名称  当前目录下的music路径
      if not os.path.exists(dirs):
      os.makedirs(dirs)
      def download_music(Songid,j):
      global Ths
      Ths +=1 #多线程标识
      jsurl = "https://www.9ku.com/html/playjs/65/" + Songid[j].split("@")[0] + ".js"
      #print(jsurl)
      req = request.Request(jsurl, headers=header)
      data_html1 = request.urlopen(req).read().decode()
      data1 = data_html1.split("(", 1)[1]#请求回来的json带有()  需要去除以后才能进行json解析
      data1 = data1.rsplit(")", 1)[0]
      # print(data1)
      par = json.loads(data1)
      SongPath = par["wma"] #音乐文件地址
      SongM = SongPath.rsplit(".", 1)[1]#音乐文件类型
      SongName = par["singer"] + "-" + par["mname"] + "." + SongM#拼接下载文件名称
      SavePath =os.getcwd()+"/"+dirs+"/"+SongName  #保存地址及文件名称
      print(SavePath)
      print("正在下载第%d首歌       " % (j + 1) + "歌曲名称:" + SongName)
      wget.download(SongPath,SavePath) #开始下载
      Ths-=1 #多线程标识
      for j in range(0,len(Songid)):
      time.sleep(0.01)#不加这个太快了 多线程会出现奇葩问题
      _thread.start_new_thread(download_music, (Songid,j,))
      #等待下载完成 避免因主线程运行完后退出 导致下载未完成  再ide里面输出挺整齐的 但是打包exe以后会出现wget进度条
      while (Ths >0):
      print("剩余下载数:%d" % (Ths))
      time.sleep(0.5)
      print("下载完成了 ")
      time.sleep(10000)
      



      后续有空了看有没有必要做一个ui界面出来   以及单首音乐+自定义多选项下载

      请登录之后再进行评论

      登录
      软件圈
    • 今日 7
    • 帖子 3293
    • 关注 1982
    • 做任务
    • 实时动态
    • 偏好设置
    • 到底部
    • 帖子间隔 侧栏位置: