Pythonは爬虫類に基づいて全ネットの検索を実現してそして音楽をダウンロードします。


今はブログを書いていますが、需要や本コンテンツの応用シーンを先に話すのが好きです。そうです。書いたものには応用価値がありません。実際の意味もありません。今日の一番早い需要はどのように無料でネットの上質な音楽をダウンロードするかです。私はb駅に行って大牛が作った歌の捜索器を探しました。インタフェースはこうです。

確かに使いやすいです。インターネットの上の主流の音楽サイトをカバーしています。関連のバージョンも多くて、大きいと言えます。しかし、技術者の追求ははるかにそうではありません。そこで、私はその裏の原理を知りたいです。ネットの爬虫類をしたことがある人は知っています。爬虫類はあるページか何ページかのウェブサイトの資源を取るしかないです。だから私はとても好奇心があります。その背後にはどうやって実現されますか?
筆者はこれまでPython 3.7版をベースとしたネット爬虫類を作ってきたので、この記事もこれをもとに記録を学びました。最初に登ったサイトは音楽サイトではなく、音楽チェーン検索です。そこには多くのオーディオ音楽の解析機能が集まっています。

したがって、自作の検索エンジンの思想も直感的になりました。第三者のインターフェースを利用して、直接にサーバーに要求すればいいです。そして、取得したデータを解析保存します。ここでは最近のヒット曲「白い月光と朱砂の痣」のダウンロード例を示しています。

解析の結果、上記のように、取得したデータフォーマットはjsonタイプで、さらに歌名がある以外に、音楽プラットフォームがあります。
ソースコードの実装は以下の通りです。

import requests
import jsonpath
import os
"""
  1.url
  2.       
  3.       
  4.    
"""
def song_download(url,title,author):
  #      
  os.makedirs("music",exist_ok=True)
  path = 'music\{}.mp3'.format(title)
  print('  :{0}-{1},    ...'.format(title,author))
  #   (                    )
  content = requests.get(url).content
  with open(file = title + author + '.mp3',mode='wb') as f:
    f.write(content)
  print('    ,{0}-{1},   '.format(title,author))

def get_music_name():
  """
        
  :return:
  """
  name = input("       :")
  print("1.   :netease
2.QQ:qq
3. :kugou
4. :kuwo
5. :baidu
6. :ximalaya") platfrom = input(" :") print("-------------------------------------------------------") url = 'https://music.liuzhijin.cn/' headers = { "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36", # "x-requested-with":"XMLHttpRequest", } param = { "input":name, "filter":"name", "type":platfrom, "page": 1, } res = requests.post(url=url,data=param,headers=headers) json_text = res.json() title = jsonpath.jsonpath(json_text,'$..title') author = jsonpath.jsonpath(json_text,'$..author') url = jsonpath.jsonpath(json_text, '$..url') if title: songs = list(zip(title,author,url)) for s in songs: print(s[0],s[1],s[2]) print("-------------------------------------------------------") index = int(input(" :")) song_download(url[index],title[index],author[index]) else: print(" , !") if __name__ == "__main__": get_music_name()
実行効果をデモします。

ファイルの下に対応する曲が現れます。mp 3ファイル

そして、各曲の検索はPyCharm専門版のコンソールで行われます。このようなユーザー体験は非常に悪いので、上記の二つの問題に対してソースコードを改善しました。

#     
from tkinter import *
import requests
import jsonpath
import os
from urllib.request import urlretrieve

# 2.    
"""
  1.url
  2.       
  3.       
  4.    
"""
def song_download(url,title,author):
  #      
  os.makedirs("music",exist_ok=True)
  path = 'music\{}.mp3'.format(title)
  text.insert(END,'  :{0}-{1},    ...'.format(title,author))
  #      
  text.see(END)
  #   
  text.update()
  #   
  urlretrieve(url,path)
  text.insert(END,'    ,{0}-{1},   '.format(title,author))
  #      
  text.see(END)
  #   
  text.update()

def get_music_name():
  """
        
  :return:
  """
  name = entry.get()
  platfrom = var.get()
  # name = '       '
  url = 'https://music.liuzhijin.cn/'
  headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
    #            
    "x-requested-with":"XMLHttpRequest",
  }
  param = {
    "input":name,
    "filter":"name",
    "type":platfrom,
    "page": 1,
  }
  res = requests.post(url=url,data=param,headers=headers)
  json_text = res.json()

  title = jsonpath.jsonpath(json_text,'$..title')
  author = jsonpath.jsonpath(json_text,'$..author')
  url = jsonpath.jsonpath(json_text, '$..url')
  print(title,author,url)
  song_download(url[0],title[0],author[0])


# 1.    
#     
root = Tk()
#       
root.title('       ')
#              
root.geometry('560x450+400+200')
#     
label = Label(root,text="        :",font=('  ',20))
#      
label.grid(row=0)
#      
entry = Entry(root,font=('  ',20))
entry.grid(row=0,column=1)
#     
var = StringVar()
r1 = Radiobutton(root,text='   ',variable=var,value='netease')
r1.grid(row=1,column=0)
r2 = Radiobutton(root,text='QQ',variable=var,value='qq')
r2.grid(row=1,column=1)
#    
text = Listbox(root,font=('  ',16),width=50,height=15)
text.grid(row=2,columnspan=2)
#     
button1 = Button(root,text='    ',font=('  ',15),command=get_music_name)
button1.grid(row=3,column=0)
button2 = Button(root,text='    ',font=('  ',15),command=root.quit)
button2.grid(row=3,column=1)
#     
root.mainloop()
効果を見に来ましょう。

このようにUIインターフェースと一部のコード最適化を加えたら.pyコードで.exeファイルをユーザーに公開して使用することができます。
以上がPythonです。爬虫類に基づいてネットで音楽を検索してダウンロードすることができます。python爬虫類については、他の関連記事に注目してください。