爬虫類は大量にクールな私の音楽をダウンロードします(クールな私の音楽のクライアントを使います)

2820 ワード

0 x 01注意点
標準json文字列はjson.loads(result)変換、中には多くのコロンがあり、二重引用符でオンラインで簡単に観察できます.https://www.json.cn/
単一引用符は標準jsonではありません.これは処理方式の違いを決定します.loadsは二重引用符で辞書を回転します.evalは単一引用符で辞書を回転します.
hot_songs = json.loads(result)
songs=eval(music_list)

0 x 02使用概要
name_リストに歌手の名前を入れてmusic関数は音楽をダウンロードします.原理は聴くときに手に入れたリンクなので、音質はあまり高くありません.ダウンロードした音楽はaac形式の音楽プレーヤーで開くことができます.にダウンロードされます./music/歌手名カタログ下
    name_list=["   "]
    for name in name_list:
        download_music(name)

このエラーは、ネットワークのせいか、ローカルネットワークが通じないか、ipが閉鎖されているかのいずれかです.
ConnectionResetError: [Errno 104] Connection reset by peer

0 x 03コード
# -*- coding:utf-8 -*-

import requests
import time
import urllib
import os
def get(url):
    response=requests.get(url)
    response.encoding=response.apparent_encoding
    return response.text

#               ,    ( 0  ),rn         
def search_by_name(name,pn=0,rn=100):
    url="https://search.kuwo.cn/r.s?pn="+str(pn)+"&rn="+str(rn)+"&all="+name+"&ft=music&newsearch=1&alflac=1&itemset=web_2013&client=kt&cluster=0&vermerge=1&rformat=json&encoding=utf8&show_copyright_off=1&pcmp4=1&ver=mbox&plat=pc&vipver=MUSIC_9.0.2.0_PQ&devid=51016591&newver=1"
    music_list=get(url)
    songs=eval(music_list)['abslist']


    for song in songs:
        #            
        song_name=song["SONGNAME"].replace(" "," ")
        song_id=song["MUSICRID"].replace("MUSIC_","")
        yield song_name,song_id


    #       json

    #  json    json.loads(result)   ,    :      

    # result = music_list
    # hot_songs = json.loads(result)["hotsong"]  #       
    # for hot_song in hot_songs:
    #     song_name = hot_song["name"]
    #     print(song_name)

    yield song_name

#            
def search_by_music(song_id):
    url="http://antiserver.kuwo.cn/anti.s?rid=MUSIC_"+song_id+"&format=aac|mp3&type=convert_url&response=url"
    print(url)
    return get(url)

#       
def search_lirycs_name(song_id):
    url="http://www.kuwo.cn/play_detail/"+song_id
    return get(url)


def download_music(name="   "):
    path="./music/"+name
    music_names=search_by_name(name)
    for name in music_names:
        os.makedirs(path,exist_ok=True)

        song_url=search_by_music(name[1])

        # song_lirycs=search_lirycs_name(name[1])
        print(name[0],song_url)

        urllib.request.urlretrieve(song_url, path +"/"+ name[0]+".aac")

if __name__=="__name__":
    name_list=["   "]
    for name in name_list:
        download_music(name)