Heim  >  Artikel  >  Backend-Entwicklung  >  Scrapy in Aktion: Daten zu Douban-Filmen durchsuchen und Beliebtheitsrankings bewerten

Scrapy in Aktion: Daten zu Douban-Filmen durchsuchen und Beliebtheitsrankings bewerten

WBOY
WBOYOriginal
2023-06-22 13:49:402356Durchsuche

Scrapy ist ein Open-Source-Python-Framework zum schnellen und effizienten Scrapen von Daten. In diesem Artikel verwenden wir Scrapy, um die Daten zu crawlen und die Beliebtheit von Douban-Filmen zu bewerten.

  1. Vorbereitung

Zuerst müssen wir Scrapy installieren. Sie können Scrapy installieren, indem Sie den folgenden Befehl in die Befehlszeile eingeben:

pip install scrapy

Als nächstes erstellen wir ein Scrapy-Projekt. Geben Sie in der Befehlszeile den folgenden Befehl ein:

scrapy startproject doubanmovie

Dadurch wird ein Scrapy-Projekt namens doubanmovie erstellt. Anschließend gehen wir in das Projektverzeichnis und erstellen einen Spider namens douban.py. Geben Sie in der Befehlszeile den folgenden Befehl ein:

cd doubanmovie
scrapy genspider douban douban.com

Jetzt haben wir einen Spider einsatzbereit. Als nächstes definieren wir das Verhalten der Spinne, um die erforderlichen Daten zu erhalten.

  1. Filmdaten crawlen

Wir werden Spider verwenden, um Douban-Filmdaten zu crawlen. Konkret erhalten wir folgende Informationen:

  • Filmname
  • Regisseur
  • Schauspieler
  • Genre
  • Land
  • Sprache
  • Erscheinungsdatum
  • Länge
  • Bewertung
  • Anzahl der Rezensionen ers

Open do uban .py-Datei hinzufügen, fügen wir den folgenden Code hinzu:

import scrapy

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for movie in movie_list:
            yield {
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

In diesem Code verwenden wir XPath, um die Informationen auszuwählen, die wir benötigen. Wir verwenden yield, um diese Informationen zu generieren und return, um sie an den Benutzer zurückzugeben.

Wenn wir jetzt unseren Spider ausführen (führen Sie den folgenden Befehl aus: scrapy crawl douban), crawlt er die Daten für die 250 besten Filme und gibt sie an die Befehlszeile zurück.

  1. Bewertungs-Beliebtheitsranking erhalten

Jetzt haben wir erfolgreich die Daten der 250 besten Filme erhalten. Als nächstes erhalten wir das Ranking ihrer Beliebtheitsbewertung.

Wir müssen zuerst einen neuen Spider erstellen, um die TOP250-Liste der Douban-Filme zu crawlen. Wir werden diese Liste verwenden, um die Rangfolge der Filme zu ermitteln.

In der Datei douban.py fügen wir den folgenden Code hinzu:

import scrapy

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for movie in movie_list:
            yield {
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            url = response.urljoin(next_page[0].get())
            yield scrapy.Request(url, callback=self.parse)

Im Code verwenden wir eine Variable namens next_page, um zu überprüfen, ob wir die letzte Seite erreicht haben. Wenn wir die letzte Seite noch nicht erreicht haben, crawlen wir weiter zur nächsten Seite.

Als nächstes müssen wir die Parse-Methode aktualisieren, um die Rangfolge des Films zu erhalten. Wir werden die Enumerate-Funktion von Python verwenden, um jedem Film eine Rangfolge zuzuordnen.

In der Datei douban.py ersetzen wir die ursprüngliche Parse-Methode durch:

def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for i, movie in enumerate(movie_list):
            yield {
                'rank': i + 1,
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            url = response.urljoin(next_page[0].get())
            yield scrapy.Request(url, callback=self.parse)

Wenn wir nun unseren Spider erneut ausführen, ruft er die Daten für die ersten 250 Filme ab und gibt sie an die Befehlszeile zurück. An dieser Stelle sehen wir die Rangliste aller Filme.

  1. Fazit

Scrapy ist ein sehr leistungsstarkes und flexibles Tool zum schnellen und effizienten Scrapen von Daten. In diesem Artikel haben wir Scrapy erfolgreich verwendet, um Douban-Filmdaten zu crawlen und Beliebtheitsrankings zu bewerten.

Wir verwenden Python-Code und XPath, um selektiv Informationen auf der Webseite abzurufen und verwenden Yield-Anweisungen, um sie an den Benutzer zurückzugeben. Während des gesamten Prozesses bietet Scrapy eine einfache und effektive Möglichkeit, große Datenmengen zu verwalten und zu crawlen, sodass wir Daten schnell analysieren und verarbeiten können.

Das obige ist der detaillierte Inhalt vonScrapy in Aktion: Daten zu Douban-Filmen durchsuchen und Beliebtheitsrankings bewerten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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