python 으로 음악 다운로드 기 만 들 기

머리말
어느 밤,나 는 자신의 폴 더 를 열 고 지루 해 보 이 는 코드 를 많이 쓴 것 을 발견 했다.그래서 한 가지 생각 이 저절로 생 겼 다."생활 이 이미 지루 해 졌 으 니 좀 더 지루 한 것 이 낫 겠 다."
하 겠 다 면 하 겠 습 니 다.그럼 주 제 를 열 겠 습 니 다.우 리 는 kimol 군의 지루 한 발명 이 라 고 부 릅 니 다.
묘..아~~
바로 주제 로!본 논문 의 주 제 는 python 으로 음악 다운로드 기(MusicLover)를 만 드 는 것 입 니 다.바로 위의 그림 입 니 다.

이곳 을 보 실 수 있 을 것 입 니 다.여러분 의 머 릿 속 에는 이미 각종 JS 복호화,파라미터 분석 등 초보 자 들 을 골 치 아 프 게 하 는 것 이 머 릿 속 에 있 습 니 다.
하지만 그 럴 생각 은 없습니다.
본 고 는 매우 우호 적 이 고 초보 자 에 게 도 적합 하 며 기능 도 여전히 강하 다!
후 사 를 알 고 싶 으 시 면,손님 께 서 는 다음 에 오 십시오~
1.기술 실현
1.앞 사람 이 나 무 를 심 으 면 뒷사람 이 더 위 를 식 힌 다
복잡 한 분석 과 해석 과정 을 피하 기 위해 저 는 특정한 클 라 우 드 음악,특정한 Q 음악 이 바로 간 입 니 다.인터넷 검색 을 통 해 나 는 웹 사 이 트 를 찾 았 다.
테스트 를 통 해 나 는 그것 이 여러 음악 플랫폼 의 음악 다운 로드 를 지원 할 수 있다 는 것 을 발견 했다.그렇다면 내 가 왜 그 기초 위 에서 개발 을 하지 않 겠 는가?이른바'선인 이 나 무 를 심 으 면 후세 사람들 이 더 위 를 식 힌 다'는 것 이 어찌 좋 지 않 겠 는가?
2.앞으로 오 는 사람 이 상승한다
브 라 우 저 를 통 해 자체 적 으로 가 져 온 도구(F12 누 르 기)를 통 해 네트워크 캡 처 를 차단 하면 POST 요청 을 알 수 있 고 4 개의 인자 만 있 습 니 다.

그러면 requests 라 이브 러 리 를 통 해 이 요 구 를 잘 실현 할 수 있 습 니 다.

#       
url = 'https://music.sonimei.cn' #     
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0',
      'Accept':'application/json, text/javascript, */*; q=0.01',
      'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
      'Accept-Encoding':'gzip, deflate, br',
      'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
      'X-Requested-With':'XMLHttpRequest',
      'Content-Length':'53',
      'Connection':'keep-alive'} #    
data = {'input':'   ',
    'filter':'name',
    'type':'qq',
    'page':1} #     
res = requests.post(url,headers=headers,data=data)
돌아 오 는 데 이 터 는 제 이 슨 형식 으로 음악의 이름,작가,음악 다운로드 주소 등 정 보 를 포함한다.주 소 를 받 은 후에 우 리 는 그것 을 로 컬 에 다운로드 하면 된다.

with open('test.m4a','wb') as f:
  res = requests.get('http://dl.stream.qqmusic.qq.com/C1000045NGM43ZAUXG.m4a?fromtag=38')
  f.write(res.content)
여기까지 기본 기능 은 이미 실현 되 었 다.우 리 는 선인 의 어깨 위 에 서서 이미'후임자 가 위 를 차지한다'는 것 을 실현 했다.다음은 그것들 에 대해 포장 과 집적 만 하면 된다.
3.집대성 자
포장 방식 은 여러 가지 일 수 있 습 니 다.여기 서 제 생각 을 제공 합 니 다.참고 하 시기 바 랍 니 다.전체 코드 는 다음 과 같 습 니 다.

# =============================================================================
# MusicLover by kimol
# =============================================================================
import os
import requests
from tqdm import tqdm

#       
url = 'https://music.sonimei.cn' #     
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0',
      'Accept':'application/json, text/javascript, */*; q=0.01',
      'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
      'Accept-Encoding':'gzip, deflate, br',
      'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
      'X-Requested-With':'XMLHttpRequest',
      'Content-Length':'53',
      'Connection':'keep-alive'} #    
data = {'input':'',
    'filter':'name',
    'type':'qq',
    'page':1} #     
savePath = './musics' #       

#           
if not os.path.exists(savePath):
  os.mkdir(savePath)

#     
welcome = '''

        __ ___      _   __            
        / |/ /_ _______(_)____/ /  ____ _  _____ _____
       / /|_/ / / / / ___/ / ___/ /  / __ \ | / / _ \/ ___/
       / / / / /_/ (__ ) / /__/ /___/ /_/ / |/ / __/ /  
      /_/ /_/\__,_/____/_/\___/_____/\____/|___/\___/_/   
                                

     '''
os.system('cls')
os.system('mode con cols=85 lines=25')
print(welcome)
#     
while True:
  choice = input('>>>     (   ):')
  if choice == 'quit':
    print('      ~')
    break
  data['input'] = choice
  res = requests.post(url,headers=headers,data=data)
  d_json = res.json() #     
  musics = d_json['data']
  if d_json['code'] != 200:
    print('      ,     ')
    continue
  else:
    print('*'*45)
    print('{0:{3}<4}{1:{3}<10}{2:{3}^10}{3}'.format('  ','  ','  ',chr(12288)))
    print('*'*45)
    N = 1 #   
    for m in musics:
      print('{0:{3}<4}{1:{3}<10}{2:{3}^10}{3}'.format(N,m['title'],m['author'],chr(12288)))
      N += 1
    print('*'*45)
    choice = input('>>>          :')
    n = int(choice)
    name = musics[n-1]['title'] #   
    url_download = musics[n-1]['url'] #     
    bar = tqdm(range(1),ncols=60) #    
    for b in bar:
      res = requests.get(url_download)
      with open('%s/%s.m4a'%(savePath,name),'wb') as f:
        f.write(res.content)
      bar.set_description('   ')
    
테스트 해 보 니 다운로드 에 성 공 했 습 니 다.

2.후속 개선
분명히 내 가 제공 한 코드 는 아주 기본 적 인 demo 일 뿐 이 고 보완 할 수 있 는 부분 이 많다.예 를 들 어:
  • 화면 을 미화 하고 혼합 문자 정렬 문 제 를 해결한다
  • 다 중 스 레 드 를 가입 하여 다운로드 속 도 를 증가 합 니 다
  • GUI 를 추가 하여 조작 을 더욱 편리 하 게 한다
  • 4.567917.다 중 선택 기능 을 추가 하여 원 키 다운 로드 를 실현 합 니 다할 수 있 는 것 이 너무 많아 서 저 는 벽돌 을 던 져 옥 을 끌 어 올 릴 뿐 입 니 다.여러분 은 자신의 무한 한 상상 을 발휘 할 수 있 습 니 다.
    이상 은 python 으로 음악 다운로드 기 를 만 드 는 상세 한 내용 입 니 다.python 음악 다운로드 기 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기