Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich mit Scrapy Kugou Music-Songs crawlen?

Wie kann ich mit Scrapy Kugou Music-Songs crawlen?

PHPz
Freigeben: 2023-06-22 22:59:21
Original
2757 Leute haben es durchsucht

Mit der Entwicklung des Internets nimmt die Informationsmenge im Internet zu und die Menschen müssen Informationen von verschiedenen Websites crawlen, um verschiedene Analysen und Mining durchzuführen. Scrapy ist ein voll funktionsfähiges Python-Crawler-Framework, das Website-Daten automatisch crawlen und in strukturierter Form ausgeben kann. Kugou Music ist eine der beliebtesten Online-Musikplattformen. Im Folgenden werde ich vorstellen, wie man Scrapy zum Crawlen der Songinformationen von Kugou Music verwendet.

1. Scrapy installieren

Scrapy ist ein Framework, das auf der Python-Sprache basiert, daher müssen Sie zuerst die Python-Umgebung konfigurieren. Bevor Sie Scrapy installieren, müssen Sie zuerst die Python- und Pip-Tools installieren. Nachdem die Installation abgeschlossen ist, können Sie Scrapy über den folgenden Befehl installieren:

pip install scrapy
Nach dem Login kopieren

2. Erstellen Sie ein neues Scrapy-Projekt.

Scrapy bietet eine Reihe von Befehlszeilentools, die uns das Erstellen neuer Projekte erleichtern. Geben Sie den folgenden Code in die Befehlszeile ein:

scrapy startproject kuwo_music
Nach dem Login kopieren

Nach der Ausführung wird im aktuellen Verzeichnis ein Scrapy-Projekt mit dem Namen „kuwo_music“ erstellt. In diesem Projekt müssen wir einen neuen Crawler erstellen, um die Songinformationen von Kugou Music zu crawlen.

3. Erstellen Sie einen neuen Crawler

Im Scrapy-Projekt ist ein Crawler ein Programm, das zum Crawlen und Analysieren von Daten auf einer bestimmten Website verwendet wird. Führen Sie im Projektverzeichnis „kuwo_music“ den folgenden Befehl aus:

scrapy genspider kuwo www.kuwo.cn 
Nach dem Login kopieren

Der obige Befehl erstellt eine Datei mit dem Namen „kuwo.py“ im Verzeichnis „kuwo_music/spiders“, bei der es sich um unseren Crawler-Programmcode handelt. Wir müssen den Crawling- und Parsing-Prozess der Website-Daten in dieser Datei definieren.

4. Website-Anfrage und Seitenanalyse

In der neuen Datei „kuwo.py“ müssen Sie zunächst die erforderlichen Module importieren:

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
Nach dem Login kopieren

Über den obigen Code können wir verschiedene von Scrapy bereitgestellte Toolklassen verwenden Framework und Methoden sowie benutzerdefinierte Module im Projekt. Bevor wir mit dem Schreiben des Crawler-Codes fortfahren, müssen wir zunächst die Webseite analysieren, auf der sich die Songinformationen von Kugou Music befinden.

Öffnen Sie den Browser, besuchen Sie www.kuwo.cn, geben Sie den Songnamen in die Suchleiste ein und suchen Sie. Sie werden feststellen, dass die Webseite zur Suchergebnisseite springt. Auf der Suchergebnisseite können Sie relevante Informationen zu jedem Song sehen, wie Songname, Interpret, Spielzeit usw. Wir müssen eine Anfrage über Scrapy senden und die Suchergebnisseite analysieren, um detaillierte Informationen zu jedem Song zu erhalten.

Im Crawler-Code müssen wir die folgenden zwei Methoden implementieren:

def start_requests(self):
    ...
    
def parse(self, response):
    ...
Nach dem Login kopieren

Unter diesen wird die Methode start_requests() zum Senden der ersten Webseitenanforderung verwendet, und die Analysemethode parse() wird als Rückruffunktion bezeichnet ; während die parse()-Methode zum Parsen von Webseiten, zum Extrahieren von Daten und zum Verarbeiten von Antworten verwendet wird. Der spezifische Code lautet wie folgt:

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
Nach dem Login kopieren

Im obigen Code definieren wir zunächst die zu durchsuchenden Song-Schlüsselwörter in der Methode start_requests(), erstellen die URL jeder Song-Suchergebnisseite und senden die Anfrage. In der parse()-Methode analysieren wir die Suchergebnisseite und extrahieren relevante Informationen zu jedem Song, einschließlich Songname, Interpret, Album usw. Anschließend erstellen wir basierend auf der ID jedes Songs eine URL, um die entsprechenden Songinformationen abzurufen, und verwenden den Metadatenmechanismus (Meta) von Scrapy, um Songnamen, Sänger, Album und andere Informationen zu übertragen. Schließlich analysieren wir die Song-Informationsseite, extrahieren die Song-Wiedergabeadresse in der Methode parse_song() und geben sie an das benutzerdefinierte KuwoMusicItem-Objekt aus.

5. Datenspeicherung und -nutzung

Im obigen Code definieren wir ein benutzerdefiniertes KuwoMusicItem-Objekt, um die gecrawlten Songinformationen zu speichern. Wir können die Tool-Klasse RedisPipeline verwenden, um die gecrawlten Daten in der Redis-Datenbank zu speichern:

ITEM_PIPELINES = {
    'kuwo_music.pipelines.RedisPipeline': 300,
}
Nach dem Login kopieren

Gleichzeitig können wir auch die Tool-Klasse JsonLinesItemExporter verwenden, um die Daten in einer lokalen CSV-Datei zu speichern:

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
Nach dem Login kopieren

Führen Sie sie schließlich aus In der Befehlszeile kann der folgende Befehl den Scrapy-Crawler starten:

scrapy crawl kuwo
Nach dem Login kopieren

Das Obige ist eine detaillierte Einführung in die Verwendung des Scrapy-Frameworks zum Crawlen der Songinformationen von Kugou Music.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Scrapy Kugou Music-Songs crawlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage