guoqc3 发表于 2020-11-12 11:02

【网易云音乐爬取】输入下载链接,爬取音乐。

本帖最后由 guoqc3 于 2020-11-13 11:32 编辑

一个简单的爬取网易云的小程序。

#!usr/bin/env python
#-*- coding:utf-8 _*-
'''
@author:
@file: 爬取网易云.py
'''

import urllib
from urllib import request
import requests
import re
import threading
import tkinter
headers={
    "Host":"music.163.com",
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "Referer":"https://music.163.com/",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400",
}

def getMusic(musicList):
    musicId=musicList[0]
    musicname = musicList[1]
    musicUrl = "http://music.163.com/song/media/outer/url?id={}.mp3".format(musicId)
    # print(musicUrl)
    # url11 = "http://music.163.com/song/media/outer/url?id=436514312.mp3"
    req = urllib.request.Request(musicUrl)
    req.add_header('User-Agent', "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400")
    res = urllib.request.urlopen(req).read()
    # res = urllib.request.urlopen(musicUrl).read()
    # print(res)
    with open('./歌曲/{}.mp3'.format(musicname), 'wb') as f:
      f.write(res)
    print(musicname+"下载完成")



def save_musci(musicname,id):
    musicUrl = "http://music.163.com/song/media/outer/url?id={}.mp3".format(id)
    with open('./歌曲/{}.mp3'.format(musicname), 'wb') as f:
      res = urllib.request.urlopen(musicUrl).read()
      f.write(res)
    var=musicname+"下载完成"
print(var)
    # t3.insert("end",var)

def get_musciId():
    try:
      url=musicUrl.get()
      yid3= '.*?id=(.*)$'
urlc3 = re.compile(yid3)
      num=urlc3.findall(url)[0]
      # print(num)
      musciId="https://music.163.com/artist?id={}".format(num)
      # print(musciId)
      respones=requests.get(url=musciId,headers=headers).content.decode("utf-8")
      yid = 'href=.*?id=({4,})">(.*?)</a>'
urlc = re.compile(yid)
      musicId=urlc.findall(respones)
      tList=[]
      # getMusic(musicId)
      for i in musicId:
            # getMusic(i)
            t=threading.Thread(target=getMusic,args=(i,))
            tList.append(t)
            t.start()
      for t in tList:
            t.join()
    exceptException as e:
      t3.insert("end","连接有误请确认")


if __name__=="__main__":
    win=tkinter.Tk()
    win.title("网易云音乐爬取")
    win.geometry("600x500+600+100")
    music_url=tkinter.Label(win,text='要下载歌手的连接:',width=50,font=('Arial',25))
    # e = tkinter.Entry(win,show=None)
    music_url.pack()
    musicUrl = tkinter.StringVar()
    entry_usr_name = tkinter.Entry(win,textvariable=musicUrl,width=40)
    entry_usr_name.pack()
    b1 = tkinter.Button(win,text='下载歌手全部歌曲',width=15,height=2,command=get_musciId)
    b1.pack()
    t3 = tkinter.Text(win,height=20)
    t3.pack()
    win.mainloop()

# url="http://music.163.com/api/song/lyric?id=449818741&lv=1&kv=1&tv=-1"







增加打包好的exe单文件,见下面百度云,注意和exe同目录需要有个img的文件夹,然后输入的网址是歌手的网址,例如张学友歌曲:https://music.163.com/#/artist?id=6460

链接:https://pan.baidu.com/s/1FmnONYziCHYfgX-abjwSlg
提取码:hz25
复制这段内容后打开百度网盘手机App,操作更方便哦

之子之一 发表于 2020-11-12 19:27


不行啊,大佬
试了很多次

2306 发表于 2020-11-12 22:50

求大神提供小程序软件

guoqc3 发表于 2020-11-13 11:25

之子之一 发表于 2020-11-12 19:27
不行啊,大佬
试了很多次

是指根据歌手进行下载歌曲,比如下载张学友的歌曲。你把这个连接黏贴进去试试。
https://music.163.com/#/artist?id=6460

我本地实测是可以的。

guoqc3 发表于 2020-11-13 11:34

2306 发表于 2020-11-12 22:50
求大神提供小程序软件

打包好的单个exe文件已经发布,等待审核完成就可以看到,按照说明进行即可。

lei050804 发表于 2020-11-13 22:33

复制链接后,点击下载没有反应啊。是不是没有设置下载地址?

lei050804 发表于 2020-11-13 22:37

好了,歌曲在IMG里面

lei050804 发表于 2020-11-13 22:50

东西很好用,如果能爬虫歌单,就更赞了。试了下,歌单不行。

+12027988887 发表于 2020-11-14 21:57

过来凑个热闹 看看 好不好用

hshcompass 发表于 2020-11-16 15:33

强烈支持,感谢分享。
页: [1] 2
查看完整版本: 【网易云音乐爬取】输入下载链接,爬取音乐。