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

WBOY
Libérer: 2023-06-22 13:49:40
original
2426 Les gens l'ont consulté

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
Copier après la connexion

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

scrapy startproject doubanmovie
Copier après la connexion

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
Copier après la connexion

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(),
            }
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal