Maison >développement back-end >Tutoriel Python >Comment utiliser Scrapy pour explorer les chansons de Kugou Music ?

Comment utiliser Scrapy pour explorer les chansons de Kugou Music ?

PHPz
PHPzoriginal
2023-06-22 22:59:212773parcourir

Avec le développement d'Internet, la quantité d'informations sur Internet augmente et les utilisateurs doivent explorer les informations de différents sites Web pour effectuer diverses analyses et explorations. Scrapy est un framework d'exploration Python entièrement fonctionnel qui peut analyser automatiquement les données d'un site Web et les afficher sous une forme structurée. Kugou Music est l'une des plateformes de musique en ligne les plus populaires. Ci-dessous, je vais vous présenter comment utiliser Scrapy pour explorer les informations sur les chansons de Kugou Music.

1. Installez Scrapy

Scrapy est un framework basé sur le langage Python, vous devez donc d'abord configurer l'environnement Python. Avant d'installer Scrapy, vous devez d'abord installer les outils Python et pip. Une fois l'installation terminée, vous pouvez installer Scrapy via la commande suivante :

pip install scrapy

2. Créer un nouveau projet Scrapy

Scrapy fournit un ensemble d'outils de ligne de commande pour nous faciliter la création de nouveaux projets. Entrez le code suivant dans la ligne de commande :

scrapy startproject kuwo_music

Après exécution, un projet Scrapy nommé "kuwo_music" sera créé dans le répertoire courant. Dans ce projet, nous devons créer un nouveau robot pour explorer les informations sur les chansons de Kugou Music.

3. Créer un nouveau robot d'exploration

Dans le projet Scrapy, un robot d'exploration est un programme utilisé pour explorer et analyser les données d'un site Web spécifique. Dans le répertoire du projet "kuwo_music", exécutez la commande suivante :

scrapy genspider kuwo www.kuwo.cn 

La commande ci-dessus créera un fichier nommé "kuwo.py" dans le répertoire "kuwo_music/spiders", qui est le code de notre programme de robot d'exploration. Nous devons définir le processus d'exploration et d'analyse des données du site Web dans ce fichier.

4. Demande de site Web et analyse de page

Dans le nouveau fichier "kuwo.py", vous devez d'abord importer les modules nécessaires :

import scrapy
from kuwo_music.items import KuwoMusicItem
from scrapy_redis.spiders import RedisSpider
from scrapy_redis import get_redis_from_settings
from scrapy.utils.project import get_project_settings

Grâce au code ci-dessus, nous pouvons utiliser différentes classes d'outils fournies par Scrapy cadre et méthodes, ainsi que des modules personnalisés dans le projet. Avant de continuer à écrire le code du robot, nous devons d'abord analyser la page Web où se trouvent les informations sur la chanson Kugou Music.

Ouvrez le navigateur, visitez www.kuwo.cn, entrez le nom de la chanson dans la barre de recherche et effectuez une recherche, vous constaterez que la page Web passe à la page des résultats de recherche. Dans la page des résultats de recherche, vous pouvez voir des informations pertinentes sur chaque chanson, telles que le nom de la chanson, l'artiste, la durée de lecture, etc. Nous devons envoyer une demande via Scrapy et analyser la page de résultats de recherche pour obtenir les détails de chaque chanson.

Dans le code du programme de robot d'exploration, nous devons implémenter les deux méthodes suivantes :

def start_requests(self):
    ...
    
def parse(self, response):
    ...

Parmi elles, la méthode start_requests() est utilisée pour envoyer la requête initiale de page Web, et la méthode d'analyse parse() est désignée comme rappel function; tandis que la méthode parse() est utilisée pour analyser les pages Web, extraire des données et traiter les réponses. Le code spécifique est le suivant :

class KuwoSpider(RedisSpider):
    name = 'kuwo'
    allowed_domains = ['kuwo.cn']
    redis_cli = get_redis_from_settings(get_project_settings())

    def start_requests(self):
        keywords = ['爱情', '妳太善良', '说散就散']
        # 搜索结果页面的url
        for keyword in keywords:
            url = f'http://www.kuwo.cn/search/list?key={keyword}&rformat=json&ft=music&encoding=utf8&rn=8&pn=1'
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        data = json.loads(response.text)
        # 获取搜索结果页面的每个歌曲信息
        song_list = data['data']['list']
        for song in song_list:
            music_id = song['musicrid'][6:]
            song_name = song['name']
            singer_name = song['artist']
            album_name = song['album']

            # 根据歌曲id获取歌曲详细信息
            url = f'http://www.kuwo.cn/url?format=mp3&rid=MUSIC_{music_id}&response=url&type=convert_url3&br=128kmp3&from=web&t=1639056420390&httpsStatus=1&reqId=6be77da1-4325-11ec-b08e-11263642326e'
            meta = {'song_name': song_name, 'singer_name': singer_name, 'album_name': album_name}
            yield scrapy.Request(url=url, callback=self.parse_song, meta=meta)

    def parse_song(self, response):
        item = KuwoMusicItem()
        item['song_name'] = response.meta.get('song_name')
        item['singer_name'] = response.meta.get('singer_name')
        item['album_name'] = response.meta.get('album_name')
        item['song_url'] = response.text.strip()
        yield item

Dans le code ci-dessus, nous définissons d'abord les mots-clés de la chanson à rechercher dans la méthode start_requests(), construisons l'URL de chaque page de résultats de recherche de chanson et envoyons la requête. Dans la méthode parse(), nous analysons la page de résultats de recherche et extrayons les informations pertinentes sur chaque chanson, notamment le nom de la chanson, l'artiste, l'album, etc. Ensuite, sur la base de l'identifiant de chaque chanson, nous construisons une URL pour obtenir les informations sur la chanson correspondante et utilisons le mécanisme de métadonnées (méta) de Scrapy pour transférer le nom de la chanson, le chanteur, l'album et d'autres informations. Enfin, nous analysons la page d'informations sur la chanson, extrayons l'adresse de lecture de la chanson dans la méthode parse_song(), et la transmettons à l'objet KuwoMusicItem personnalisé.

5. Stockage et utilisation des données

Dans le code ci-dessus, nous définissons un objet KuwoMusicItem personnalisé pour stocker les informations sur la chanson analysée. Nous pouvons utiliser la classe d'outils RedisPipeline pour stocker les données analysées dans la base de données Redis :

ITEM_PIPELINES = {
    'kuwo_music.pipelines.RedisPipeline': 300,
}

En même temps, nous pouvons également utiliser la classe d'outils JsonLinesItemExporter pour stocker les données dans un fichier csv local :

from scrapy.exporters import JsonLinesItemExporter
import csv

class CsvPipeline(object):
    # 将数据存储到csv文件
    def __init__(self):
        self.file = open('kuwo_music.csv', 'w', encoding='utf-8', newline='')
        self.exporter = csv.writer(self.file)
        self.exporter.writerow(['song_name', 'singer_name', 'album_name', 'song_url'])

    def close_spider(self, spider):
        self.file.close()

    def process_item(self, item, spider):
        self.exporter.writerow([item['song_name'], item['singer_name'], item['album_name'], item['song_url']])
        return item

Enfin, exécutez-le dans la ligne de commande La commande suivante peut démarrer le robot d'exploration Scrapy :

scrapy crawl kuwo

Ce qui précède est une introduction détaillée sur la façon d'utiliser le framework Scrapy pour explorer les informations sur les chansons de Kugou Music. J'espère qu'il pourra vous fournir des références et de l'aide.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn