Maison  >  Article  >  développement back-end  >  Scrapy en action : analyse des données du film Douban et classement de popularité

Scrapy en action : analyse des données du film Douban et classement de popularité

WBOY
WBOYoriginal
2023-06-22 13:49:402355parcourir

Scrapy est un framework Python open source permettant de récupérer des données rapidement et efficacement. Dans cet article, nous utiliserons Scrapy pour explorer les données et la popularité des films Douban.

  1. Préparation

Tout d'abord, nous devons installer Scrapy. Vous pouvez installer Scrapy en tapant la commande suivante sur la ligne de commande :

pip install scrapy

Ensuite, nous créerons un projet Scrapy. Sur la ligne de commande, entrez la commande suivante :

scrapy startproject doubanmovie

Cela créera un projet Scrapy appelé doubanmovie. Nous allons ensuite aller dans le répertoire du projet et créer un Spider appelé douban.py. Sur la ligne de commande, entrez la commande suivante :

cd doubanmovie
scrapy genspider douban douban.com

Maintenant, nous avons un Spider prêt à l'emploi. Ensuite, nous définirons le comportement de l'araignée pour obtenir les données requises.

  1. Exploration des données de film

Nous utiliserons Spider pour explorer les données de film Douban. Plus précisément, nous obtiendrons les informations suivantes :

  • Nom du film
  • Réalisateur
  • Acteurs
  • Type
  • Pays
  • Langue
  • Date de sortie
  • Longueur
  • Note
  • Nombre de critiques

Ouvrez do uban .py, nous ajouterons le code suivant :

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(),
            }

Dans ce code, nous utilisons XPath pour sélectionner les informations que nous devons obtenir. Nous utilisons le rendement pour générer ces informations et revenons pour les restituer à l'utilisateur.

Si nous exécutons notre Spider maintenant (exécutez la commande suivante : scrapy crawl douban), il explorera les données des 250 meilleurs films et les renverra à la ligne de commande.

  1. Obtenez le classement de popularité

Maintenant, nous avons obtenu avec succès les données des 250 meilleurs films. Ensuite, nous obtiendrons leur classement de popularité.

Nous devons d'abord créer un nouveau Spider pour explorer la liste TOP250 des films Douban. Nous utiliserons cette liste pour obtenir le classement des films.

Dans le fichier douban.py, nous ajouterons le code suivant :

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)

Dans le code, nous utilisons une variable appelée next_page pour vérifier si nous avons atteint la dernière page. Si nous n'avons pas encore atteint la dernière page, nous continuons à explorer la page suivante.

Ensuite, nous devons mettre à jour la méthode d'analyse pour obtenir le classement du film. Nous utiliserons la fonction enumerate de Python pour associer un classement à chaque film.

Dans le fichier douban.py, nous remplacerons la méthode d'analyse d'origine par :

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)

Maintenant, si nous exécutons à nouveau notre spider, il obtiendra les données des 250 premiers films et les renverra à la ligne de commande. À ce stade, nous verrons le classement de tous les films.

  1. Conclusion

Scrapy est un outil très puissant et flexible pour récupérer des données rapidement et efficacement. Dans cet article, nous avons utilisé avec succès Scrapy pour explorer les données des films Douban et les classements de popularité.

Nous utilisons le code Python et XPath pour obtenir sélectivement des informations sur la page Web et utilisons des instructions de rendement pour les renvoyer à l'utilisateur. Tout au long du processus, Scrapy fournit un moyen simple et efficace de gérer et d'explorer de grandes quantités de données, nous permettant d'effectuer rapidement l'analyse et le traitement des données.

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