Scraping d'un site web de films en ligne à l'aide de C# ; et IronWebscraper

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronWebScraper extrait les données cinématographiques des sites web en analysant les éléments HTML, en créant des objets typés pour le stockage de données structurées et en naviguant entre les pages à l'aide de métadonnées pour construire des ensembles de données d'informations cinématographiques complets. Cette bibliothèque C# Web Scraper simplifie la conversion de contenu web non structuré en données organisées et analysables.

Quickstart : Scrape Movies in C#

  1. Installer IronWebscraper via le gestionnaire de paquets NuGet
  2. Créez une classe qui hérite de WebScraper
  3. Surchargez Init() pour définir la licence et demander l'URL cible
  4. Surchargez Parse() pour extraire les données d'un film à l'aide de sélecteurs CSS
  5. Utiliser la méthode Scrape() pour enregistrer les données au format JSON

Nuget IconCommencez dès maintenant à créer des PDF avec NuGet :

  1. Installez IronWebScraper avec le gestionnaire de packages NuGet

    PM > Install-Package IronWebScraper

  2. Copiez et exécutez cet extrait de code.

    using IronWebScraper;
    using System;
    
    public class QuickstartMovieScraper : WebScraper
    {
        public override void Init()
        {
            // Set your license key
            License.LicenseKey = "YOUR-LICENSE-KEY";
    
            // Configure scraper settings
            this.LoggingLevel = LogLevel.All;
            this.WorkingDirectory = @"C:\MovieData\Output\";
    
            // Start scraping from the homepage
            this.Request("https://example-movie-site.com", Parse);
        }
    
        public override void Parse(Response response)
        {
            // Extract movie titles using CSS selectors
            foreach (var movieDiv in response.Css(".movie-item"))
            {
                var title = movieDiv.Css("h2")[0].TextContentClean;
                var url = movieDiv.Css("a")[0].Attributes["href"];
    
                // Save the scraped data
                Scrape(new { Title = title, Url = url }, "movies.json");
            }
        }
    }
    
    // Run the scraper
    var scraper = new QuickstartMovieScraper();
    scraper.Start();
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronWebScraper dans votre projet dès aujourd'hui grâce à un essai gratuit.
    arrow pointer

Comment configurer une classe Movie Scraper?

Commencez par un exemple de site web réel. Nous allons gratter un site web de films en utilisant les techniques décrites dans notre tutoriel Webscraping in C#.

Ajoutez une nouvelle classe et nommez-la MovieScraper :

Boîte de dialogue Visual Studio Ajouter un nouvel élément montrant les options du modèle Visual C# pour le projet IronScraperSample

La création d'une classe de scraper dédiée permet d'organiser votre code et de le rendre réutilisable. Cette approche suit les principes de l'orientation objet et vous permet d'étendre facilement les fonctionnalités par la suite.

À quoi ressemble la structure du site web cible?

Examinez la structure du site en vue d'un éventuel "scraping". La compréhension de la structure du site web est cruciale pour un web scraping efficace. Comme dans notre guide sur La récupération à partir d'un site Web de films en ligne, analysez d'abord la structure HTML :

Interface d'un site de streaming de films montrant une grille d'affiches de films avec des onglets de navigation et des indicateurs de qualité

Quels sont les éléments HTML qui contiennent des données sur les films ? Il s'agit d'une partie de la page d'accueil HTML que nous voyons sur le site web. L'examen de la structure HTML permet d'identifier les sélecteurs CSS à utiliser : ```html ``` Nous disposons d'un identifiant de film, d'un titre et d'un lien vers une page détaillée. Chaque film est contenu dans un élément `div` avec la classe `ml-item` et comprend un attribut `data-movie-id` unique pour l'identification. ## Comment implémenter le scraping de films de base? Commencez à récupérer cet ensemble de données. Avant d'exécuter un scraper, assurez-vous d'avoir correctement configuré votre clé de licence comme indiqué ci-dessous : ```csharp public class MovieScraper : WebScraper { public override void Init() { // Initialize scraper settings License.LicenseKey = "LicenseKey"; this.LoggingLevel = WebScraper.LogLevel.All; this.WorkingDirectory = AppSetting.GetAppRoot() + @"\MovieSample\Output\"; // Request homepage content for scraping this.Request("www.website.com", Parse); } public override void Parse(Response response) { // Iterate over each movie div within the featured movie section foreach (var div in response.Css("#movie-featured > div")) { if (div.Attributes["class"] != "clearfix") { var movieId = Convert.ToInt32(div.GetAttribute("data-movie-id")); var link = div.Css("a")[0]; var movieTitle = link.TextContentClean; // Scrape and store movie data as key-value pairs Scrape(new ScrapedData() { { "MovieId", movieId }, { "MovieTitle", movieTitle } }, "Movie.Jsonl"); } } } } ``` ### À quoi sert la propriété Working Directory? *Qu'y a-t-il de nouveau dans ce code?* La propriété Répertoire de travail définit le répertoire de travail principal pour toutes les données extraites et les fichiers connexes. Cela permet de s'assurer que tous les fichiers de sortie sont organisés dans un seul emplacement, ce qui facilite la gestion des projets de scraping à grande échelle. Le répertoire sera créé automatiquement s'il n'existe pas. ### Quand utiliser les sélecteurs CSS plutôt que les attributs? *Considérations supplémentaires:* Les sélecteurs CSS sont idéaux pour cibler les éléments en fonction de leur position structurelle ou de leur nom de classe, tandis que l'accès direct aux attributs est préférable pour extraire des valeurs spécifiques telles que les identifiants ou les attributs de données personnalisés. Dans notre exemple, nous utilisons des sélecteurs CSS (`#movie-featured > div`) pour naviguer dans la structure DOM et des attributs (`data-movie-id`) pour extraire des valeurs spécifiques. ## Comment créer des objets typés pour les données récupérées? Construire des objets typés pour contenir des données scrappées dans des objets formatés. L'utilisation d'objets fortement typés permet une meilleure organisation du code, une prise en charge IntelliSense et une vérification des types au moment de la compilation. Implémentez une classe `Movie` qui contiendra des données formatées : ```csharp public class Movie { public int Id { get; set; } public string Title { get; set; } public string URL { get; set; } } ```

Comment l'utilisation d'objets typés améliore-t-elle l'organisation des données ? Mettez à jour le code pour utiliser la classe typée `Movie` au lieu du dictionnaire générique `ScrapedData` : ```csharp public class MovieScraper : WebScraper { public override void Init() { // Initialize scraper settings License.LicenseKey = "LicenseKey"; this.LoggingLevel = WebScraper.LogLevel.All; this.WorkingDirectory = AppSetting.GetAppRoot() + @"\MovieSample\Output\"; // Request homepage content for scraping this.Request("https://website.com/", Parse); } public override void Parse(Response response) { // Iterate over each movie div within the featured movie section foreach (var div in response.Css("#movie-featured > div")) { if (div.Attributes["class"] != "clearfix") { var movie = new Movie { Id = Convert.ToInt32(div.GetAttribute("data-movie-id")) }; var link = div.Css("a")[0]; movie.Title = link.TextContentClean; movie.URL = link.Attributes["href"]; // Scrape and store movie object Scrape(movie, "Movie.Jsonl"); } } } } ```

Quel format la méthode Scrape utilise-t-elle pour les objets typés ? *Qu'est-ce qu'il y a de nouveau?* 1. Nous avons mis en œuvre une classe `Movie` pour contenir les données récupérées, ce qui permet d'assurer la sécurité des types et une meilleure organisation du code. 2. Nous transmettons des objets vidéo à la méthode `Scrape` qui comprend notre format et l'enregistre d'une manière définie, comme indiqué ci-dessous :

Fenêtre du Bloc-notes montrant une base de données de films JSON avec des données de films structurées comprenant des titres, des URL et des champs de métadonnées

Le résultat est automatiquement sérialisé au format JSON, ce qui facilite son importation dans des bases de données ou d'autres applications. ## Comment récupérer les pages détaillées d'un film? Commencez à récupérer des pages plus détaillées. Le scraping de plusieurs pages est un besoin courant, et IronWebscraper le rend simple grâce à son mécanisme de chaînage des requêtes.

Quelles données supplémentaires puis-je extraire des pages détaillées ? La page des films se présente comme suit, contenant de nombreuses métadonnées sur chaque film :

Page d'information sur le film Les Gardiens de la Galaxie Vol. 2 avec l'affiche et les détails du film, y compris les acteurs et les classifications

```html

Guardians of the Galaxy Vol. 2

Set to the backdrop of Awesome Mixtape #2, Marvel's Guardians of the Galaxy Vol. 2 continues the team's adventures as they travel throughout the cosmos to help Peter Quill learn more about his true parentage.

Duration: 136 min

Quality: CAM

Release: 2017

IMDb: 8.3

``` ### Comment étendre ma classe de film pour obtenir des propriétés supplémentaires? Étendre la classe `Movie` avec de nouvelles propriétés (`Description`, `Genre`, `Acteur`, `Réalisateur`, `Pays`, `Durée`, `IMDb Score`) mais n'utilisez que `Description`, `Genre`, et `Acteur` pour cet échantillon. L'utilisation de `List` pour les genres et les acteurs permet de traiter les valeurs multiples de manière élégante : ```csharp using System.Collections.Generic; public class Movie { public int Id { get; set; } public string Title { get; set; } public string URL { get; set; } public string Description { get; set; } public List Genre { get; set; } public List Actor { get; set; } } ``` ## Comment naviguer entre les pages lors du scraping? Naviguez jusqu'à la page détaillée pour l'extraire. IronWebScraper gère [thread safety](https://ironsoftware.com/csharp/webscraper/troubleshooting/thread-safety/) automatiquement, ce qui permet de traiter plusieurs pages simultanément.

Pourquoi utiliser plusieurs fonctions d'analyse pour différents types de pages ? IronWebScraper permet d'ajouter plusieurs fonctions de scrape pour gérer différents formats de pages. Cette séparation des préoccupations rend votre code plus facile à maintenir et permet une gestion appropriée des différentes structures de page. Chaque fonction d'analyse peut se concentrer sur l'extraction de données à partir d'un type de page spécifique.

Comment les méta-données aident-elles à passer des objets entre les fonctions d'analyse ? La fonction MetaData est cruciale pour le maintien de l'état entre les requêtes. Pour plus de [fonctionnalités avancées de webscraping](https://ironsoftware.com/csharp/webscraper/tutorials/webscraping-in-c-sharp-advanced/), consultez notre guide détaillé : ```csharp public class MovieScraper : WebScraper { public override void Init() { // Initialize scraper settings License.LicenseKey = "LicenseKey"; this.LoggingLevel = WebScraper.LogLevel.All; this.WorkingDirectory = AppSetting.GetAppRoot() + @"\MovieSample\Output\"; // Request homepage content for scraping this.Request("https://domain/", Parse); } public override void Parse(Response response) { // Iterate over each movie div within the featured movie section foreach (var div in response.Css("#movie-featured > div")) { if (div.Attributes["class"] != "clearfix") { var movie = new Movie { Id = Convert.ToInt32(div.GetAttribute("data-movie-id")) }; var link = div.Css("a")[0]; movie.Title = link.TextContentClean; movie.URL = link.Attributes["href"]; // Request detailed page this.Request(movie.URL, ParseDetails, new MetaData() { { "movie", movie } }); } } } public void ParseDetails(Response response) { // Retrieve movie object from metadata var movie = response.MetaData.Get("movie"); var div = response.Css("div.mvic-desc")[0]; // Extract description movie.Description = div.Css("div.desc")[0].TextContentClean; // Extract genres movie.Genre = new List(); // Initialize genre list foreach(var genre in div.Css("div > p > a")) { movie.Genre.Add(genre.TextContentClean); } // Extract actors movie.Actor = new List(); // Initialize actor list foreach (var actor in div.Css("div > p:nth-child(2) > a")) { movie.Actor.Add(actor.TextContentClean); } // Scrape and store detailed movie data Scrape(movie, "Movie.Jsonl"); } } ``` ### Quelles sont les principales caractéristiques de cette approche de scraping multi-pages ? *Qu'est-ce qu'il y a de nouveau?* 1. Ajouter des fonctions de balayage (par exemple, `ParseDetails`) pour balayer des pages détaillées, semblables aux techniques utilisées pour [balayer à partir d'un site web d'achat](https://ironsoftware.com/csharp/webscraper/how-to/scraping-from-a-shopping-website/). 2. Déplacer la fonction `Scrape` qui génère des fichiers vers la nouvelle fonction, en veillant à ce que les données ne soient sauvegardées qu'une fois tous les détails collectés. 3. Utilisez la fonctionnalité IronWebScraper (`MetaData`) pour transmettre des objets de film à de nouvelles fonctions de scrape, en conservant l'état de l'objet à travers les requêtes. 4. Scraper les pages et enregistrer les données des objets vidéo dans des fichiers contenant des informations complètes.

Fenêtre du bloc-notes montrant la base de données JSON des films avec les titres, les descriptions, les URL et les métadonnées de genre

Pour plus d'informations sur les méthodes et propriétés disponibles, consultez la [Référence API](https://ironsoftware.com/csharp/webscraper/object-reference/api/). IronWebScraper fournit un cadre robuste pour l'extraction de données structurées à partir de sites web, ce qui en fait un outil essentiel pour les projets de collecte et d'analyse de données.

Questions Fréquemment Posées

Comment extraire des titres de films à partir de HTML à l'aide de C# ?

IronWebScraper fournit des méthodes de sélection CSS pour extraire les titres de films du code HTML. Utilisez la méthode response.Css() avec des sélecteurs appropriés tels que '.movie-item h2' pour cibler les éléments de titre, puis accédez à la propriété TextContentClean pour obtenir la valeur du texte propre.

Quelle est la meilleure façon de naviguer entre plusieurs pages de films ?

IronWebScraper gère la navigation dans les pages par le biais de la méthode Request(). Vous pouvez extraire les liens de pagination à l'aide de sélecteurs CSS, puis appeler Request() avec chaque URL pour extraire des données de plusieurs pages et constituer automatiquement des ensembles complets de données sur les films.

Comment puis-je enregistrer les données de films récupérées dans un format structuré ?

Utilisez la méthode Scrape() d'IronWebscraper pour enregistrer des données au format JSON. Créez des objets anonymes ou des classes typées contenant des propriétés de films telles que le titre, l'URL et l'évaluation, puis passez-les à Scrape() avec un nom de fichier pour sérialiser et enregistrer automatiquement les données.

Quels sélecteurs CSS dois-je utiliser pour extraire des informations sur les films ?

IronWebscraper prend en charge les sélecteurs CSS standard. Pour les sites web de films, utilisez des sélecteurs tels que '.movie-item' pour les conteneurs, 'h2' pour les titres, 'a[href]' pour les liens, et des noms de classe spécifiques pour les classements ou les genres. La méthode Css() renvoie des collections que vous pouvez parcourir.

Comment gérer les indicateurs de qualité des films tels que "CAM" dans les données récupérées ?

IronWebscraper vous permet d'extraire et de traiter des indicateurs de qualité en ciblant leurs éléments HTML spécifiques. Utilisez des sélecteurs CSS pour localiser les badges de qualité ou le texte, puis incluez-les en tant que propriétés dans vos objets de données récupérées pour obtenir des informations complètes sur les films.

Puis-je mettre en place un système de journalisation pour mes opérations de "movie scraping" ?

Oui, IronWebscraper comprend une fonctionnalité de journalisation intégrée. Définissez la propriété LoggingLevel à LogLevel.All dans votre méthode Init() pour suivre toutes les activités de scraping, les erreurs et les progrès, ce qui permet de déboguer et de surveiller l'extraction des données de votre film.

Quelle est la bonne façon de configurer les répertoires de travail pour les données récupérées ?

IronWebscraper vous permet de définir une propriété WorkingDirectory dans la méthode Init(). Spécifiez un chemin d'accès tel que "C#MovieData\Output\" où les fichiers de données de films scrappés seront sauvegardés. Cela permet de centraliser la gestion de la sortie et d'organiser les données.

Comment hériter correctement de la classe WebScraper ?

Créez une nouvelle classe qui hérite de la classe de base WebScraper d'IronWebscraper. Surchargez la méthode Init() pour la configuration et la méthode Parse() pour la logique d'extraction des données. Cette approche orientée objet rend votre racleur de films réutilisable et facile à maintenir.

Darrius Serrant
Ingénieur logiciel Full Stack (WebOps)

Darrius Serrant est titulaire d'un baccalauréat en informatique de l'université de Miami et travaille comme ingénieur marketing WebOps Full Stack chez Iron Software. Attiré par le codage dès son plus jeune âge, il a vu l'informatique comme à la fois mystérieuse et accessible, en faisant le ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 126,948 | Version : 2025.12 vient de sortir