40 líneas de código implementan un rastreador de música genial con python

No hay mucho que decir directamente al código:

import requests, os


class Spider:
    def __init__(self):
        self.singer_name = input('请输入要爬取的歌手名:')
        self.pages = int(input('请输入爬取页数(一页30首歌):'))
        os.mkdir('{}'.format(self.singer_name))
        self.headers = {'Accept': ',application/json, text/plain, */*',#请求头信息
                        'Accept-Encoding': 'gzip, deflate',
                        'Accept-Language': 'zh-CN,zh;q=0.9',
                        'Connection': 'keep-alive',
                        'Cookie': '_ga=GA1.2.1637941648.1616934252; uname3=qq1616934321; t3kwid=131286315; websid=1488073791; pic3=""; t3=qq; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1617949101,1618127723,1618579672,1619099581; _gid=GA1.2.1505163314.1619099581; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1619100738; _gat=1; kw_token=XM5GXCP8M5',
                        'csrf': 'XM5GXCP8M5',
                        'Host': 'www.kuwo.cn',
                        'Referer': 'http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6',
                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}

    def main(self):
        for page in range(self.pages):
            print('正在爬取第{}页的歌曲!'.format(page + 1))#不断改变爬取的页数
            url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=30&httpsStatus=1&reqId=b4274401-a377-11eb-a99d-ef0323beeee3'.format(
                self.singer_name, page + 1)
            response = requests.get(url, headers=self.headers)
            json = response.json()#得到储存歌曲信息的json文件,下面是层层解析获取name和rid
            data = json['data']
            song_list = data['list']
            for song in song_list:
                song_name = song['name']
                song_rid = song['rid']
                song_json_url = 'http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1619102008389&httpsStatus=1&reqId=b4280751-a377-11eb-a99d-ef0323beeee3'.format(
                    song_rid)#不断改变rid以获取不同歌取的mp3地址
                print('正在爬取{}。。。'.format(song_name))
                song_url = requests.get(song_json_url, headers=self.headers).json()['url']#请求歌曲的mp3地址,将响应以二进制文件储存到本地
                with open('{}/{}.mp3'.format(self.singer_name, song_name), 'wb') as wstream:
                    wstream.write(requests.get(song_url).content)
                print('爬取成功!')
if __name__ == '__main__':
    music=Spider()
    music.main()
    os.system('pause')

Primero vaya al sitio web oficial de Kuwo Music: http://www.kuwo.cn/

Introduce el nombre del cantante a rastrear en la barra de búsqueda:

 Vaya a esta página y haga clic derecho para comprobar:

 Haga clic en orden como se muestra en la siguiente figura:

 Puede ver que la respuesta aquí es un archivo en formato json A continuación, analicemos el json

Copie esta respuesta de respuesta en un archivo json para formatear y luego expanda en secuencia:

Se encuentra que toda la información de la canción de esta página está almacenada en esta 'lista', y luego continúa expandiendo una de las canciones:

 Aquí puede encontrar el rid y el nombre de la canción. Estas dos informaciones son útiles. El rid se usa para ayudarnos a localizar el archivo mp3 donde se encuentra la canción. El nombre se usa para nombrar la canción al descargar la canción.

Vuelve a la pagina anterior:

Se encuentra que la respuesta obtenida por esta url contiene la dirección de reproducción de la canción (es decir, la url del archivo mp3), puede copiar directamente la url de la canción a la barra de direcciones para solicitar, e irá a la reproducción Interfaz de una canción:

Luego, al cambiar diferentes versiones, naturalmente obtendrá diferentes URL de canciones, y luego solicitamos directamente estas URL, y la respuesta que obtenemos es este archivo mp3, que cualquier reproductor puede abrir y reproducir después de almacenarlo localmente en forma binaria, y también puede Empaquete su programa en un archivo exe y envíelo a sus amigos para que lo usen.

Aquí solicitamos un total de tres urls:

Uno: almacena la información de la canción de la página actual (rid y nombre, etc.)

Dos: almacene una cierta identificación correspondiente a la dirección de reproducción de la URL de la canción

Tres: la canción en sí

Cuando solicitamos, debemos agregar el encabezado de la solicitud o no obtendremos la información:

Guarde los encabezados de solicitud aquí en un diccionario en el código (si tiene miedo de tener problemas, puede usar el del autor).

La siguiente clave corresponde a la palabra clave que buscaste, pn representa el número de páginas y rn es el número de canciones de cada página, podemos modificarlo independientemente para obtener las canciones y el número de canciones de diferentes cantantes:

 

La idea general es relativamente clara: solicitar la url para almacenar información de la canción (esta url puede cambiar las palabras clave de búsqueda y los números de página para obtener canciones y el número de cantantes diferentes), solicitar el almacenamiento de la url de la dirección de reproducción de la canción (esta url puede cambiarse cambiando el valor rid para obtener una dirección de reproducción de canción diferente), solicite la dirección del archivo mp3 de la canción (obtenga una respuesta binaria y guárdela localmente).

Necesita dominar las siguientes habilidades: sintaxis básica de python y tipos de datos básicos, uso simple de la biblioteca de solicitudes.

Esta es la primera publicación del autor, y espero que sea útil para los amigos que han aprendido algunos conceptos básicos de Python, y puede usarse como el primer proyecto pequeño en el campo de los reptiles. Los amigos que tengan preguntas pueden dejar un mensaje en el área de comentarios, ¡espero que todos apoyen!

                                                                                       Si hay algún error u omisión, gracias por contactar y corregir.

                                                                                       Si hay alguna infracción, póngase en contacto para eliminarla.

Supongo que te gusta

Origin blog.csdn.net/m0_52726759/article/details/119145600
Recomendado
Clasificación