Extraction de données d'un site web de films en ligne à l'aide de C# et d'IronWebScraper
IronWebScraper extrait des données sur les films à partir de 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 afin de constituer des ensembles de données complets sur les films. Cette bibliothèque de web scraping en C# simplifie la conversion de contenu web non structuré en données organisées et analysables.
Guide de démarrage rapide : extraire des données sur les films en C#
- Installez
IronWebScrapervia le Package Manager NuGet - Créez une classe qui hérite de ``
- Remplacer `` pour définir la licence et demander l'URL cible
- Remplacer `` pour extraire des données de films à l'aide de sélecteurs CSS
- Utilisez la méthode `` pour enregistrer les données au format JSON
-
Installez IronWebScraper avec le Gestionnaire de Packages NuGet
PM > Install-Package IronWebScraper -
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(); -
Déployez pour tester sur votre environnement de production.
Commencez à utiliser IronWebScraper dans votre projet dès aujourd'hui avec un essai gratuit
Comment configurer une classe de scraping de films ?
Commencez par un exemple concret de site web. Nous allons extraire des données d'un site web consacré au cinéma en utilisant les techniques décrites dans notre tutoriel " Web scraping en C# ".
Ajoutez une nouvelle classe et nommez-la `` :
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 la programmation orientée objet et vous permet d'étendre facilement les fonctionnalités ultérieurement.
À quoi ressemble la structure du site web cible ?
Examinez la structure du site en vue du scraping. Il est essentiel de bien comprendre la structure du site web pour effectuer un web scraping efficace. Comme dans notre guide sur l'extraction de données d'un site web de films en ligne, analysez d'abord la structure HTML :
Quels éléments HTML contiennent des données vidéo ?
Ceci fait partie du code HTML de la page d'accueil que l'on voit sur le site web. L'examen de la structure HTML permet d'identifier les sélecteurs CSS appropriés à utiliser :
<div id="movie-featured" class="movies-list movies-list-full tab-pane in fade active">
<div data-movie-id="20746" class="ml-item">
<a href="https://website.com/film/king-arthur-legend-of-the-sword-20746/">
<span class="mli-quality">CAM</span>
<img data-original="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg"
class="lazy thumb mli-thumb" alt="King Arthur: Legend of the Sword"
src="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg"
style="display: inline-block;">
<span class="mli-info"><h2>King Arthur: Legend of the Sword</h2></span>
</a>
</div>
<div data-movie-id="20724" class="ml-item">
<a href="https://website.com/film/snatched-20724/">
<span class="mli-quality">CAM</span>
<img data-original="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg"
class="lazy thumb mli-thumb" alt="Snatched"
src="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg"
style="display: inline-block;">
<span class="mli-info"><h2>Snatched</h2></span>
</a>
</div>
</div>
<div id="movie-featured" class="movies-list movies-list-full tab-pane in fade active">
<div data-movie-id="20746" class="ml-item">
<a href="https://website.com/film/king-arthur-legend-of-the-sword-20746/">
<span class="mli-quality">CAM</span>
<img data-original="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg"
class="lazy thumb mli-thumb" alt="King Arthur: Legend of the Sword"
src="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg"
style="display: inline-block;">
<span class="mli-info"><h2>King Arthur: Legend of the Sword</h2></span>
</a>
</div>
<div data-movie-id="20724" class="ml-item">
<a href="https://website.com/film/snatched-20724/">
<span class="mli-quality">CAM</span>
<img data-original="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg"
class="lazy thumb mli-thumb" alt="Snatched"
src="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg"
style="display: inline-block;">
<span class="mli-info"><h2>Snatched</h2></span>
</a>
</div>
</div>
Nous disposons d'un identifiant de film, d'un titre et d'un lien vers une page détaillée. Chaque élément est contenu dans une balise avec la classe et comprend un attribut unique `` à des fins d'identification.
Comment mettre en œuvre un scraping de base de vidéos ?
Commencez à extraire 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 :
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");
}
}
}
}
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");
}
}
}
}
Public Class MovieScraper
Inherits WebScraper
Public Overrides Sub Init()
' Initialize scraper settings
License.LicenseKey = "LicenseKey"
Me.LoggingLevel = WebScraper.LogLevel.All
Me.WorkingDirectory = AppSetting.GetAppRoot() & "\MovieSample\Output\"
' Request homepage content for scraping
Me.Request("www.website.com", AddressOf Parse)
End Sub
Public Overrides Sub Parse(ByVal response As Response)
' Iterate over each movie div within the featured movie section
For Each div In response.Css("#movie-featured > div")
If div.Attributes("class") <> "clearfix" Then
Dim movieId = Convert.ToInt32(div.GetAttribute("data-movie-id"))
Dim link = div.Css("a")(0)
Dim movieTitle = link.TextContentClean
' Scrape and store movie data as key-value pairs
Scrape(New ScrapedData() From {
{ "MovieId", movieId },
{ "MovieTitle", movieTitle }
},
"Movie.Jsonl")
End If
Next div
End Sub
End Class
À quoi sert la propriété Working Directory ?
Quelles sont les nouveautés de ce code ?
La propriété Working Directory définit le répertoire de travail principal pour toutes les données extraites et les fichiers associés. Cela garantit que tous les fichiers de sortie sont organisés en 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 dois-je utiliser les sélecteurs CSS plutôt que les attributs ?
Considérations supplémentaires :
Les sélecteurs CSS sont idéaux pour cibler des éléments en fonction de leur position structurelle ou de leurs noms de classe, tandis que l'accès direct aux attributs est préférable pour extraire des valeurs spécifiques telles que des identifiants ou des attributs de données personnalisés. Dans notre exemple, nous utilisons des sélecteurs CSS (#movie-featured > div) pour parcourir la structure DOM et des attributs (``) pour extraire des valeurs spécifiques.
Comment créer des objets typés pour les données extraites ?
Créez des objets typés pour stocker les données extraites dans des objets formatés. L'utilisation d'objets fortement typés permet une meilleure organisation du code, la prise en charge d'IntelliSense et la vérification des types lors de la compilation.
Implémentez une classe `` qui contiendra des données formatées :
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
public string URL { get; set; }
}
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
public string URL { get; set; }
}
Public Class Movie
Public Property Id As Integer
Public Property Title As String
Public Property URL As String
End Class
En quoi 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 à la place du dictionnaire générique :
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");
}
}
}
}
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");
}
}
}
}
Public Class MovieScraper
Inherits WebScraper
Public Overrides Sub Init()
' Initialize scraper settings
License.LicenseKey = "LicenseKey"
Me.LoggingLevel = WebScraper.LogLevel.All
Me.WorkingDirectory = AppSetting.GetAppRoot() & "\MovieSample\Output\"
' Request homepage content for scraping
Me.Request("https://website.com/", AddressOf Parse)
End Sub
Public Overrides Sub Parse(ByVal response As Response)
' Iterate over each movie div within the featured movie section
For Each div In response.Css("#movie-featured > div")
If div.Attributes("class") <> "clearfix" Then
Dim movie As New Movie With {.Id = Convert.ToInt32(div.GetAttribute("data-movie-id"))}
Dim link = div.Css("a")(0)
movie.Title = link.TextContentClean
movie.URL = link.Attributes("href")
' Scrape and store movie object
Scrape(movie, "Movie.Jsonl")
End If
Next div
End Sub
End Class
Quel format la méthode Scrape utilise-t-elle pour les objets typés ?
Quoi de neuf ?
- Nous avons implémenté une classe `` pour stocker les données extraites, garantissant ainsi la sécurité des types et une meilleure organisation du code.
- Nous transmettons des objets movie à la méthode ``, qui comprend notre format et l'enregistre de manière définie, comme indiqué ci-dessous :
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 extraire les pages détaillées des films ?
Commencez à extraire des pages plus détaillées. Le scraping multipages est une exigence courante, et IronWebScraper le rend simple grâce à son mécanisme de chaînage de requêtes.
Quelles données supplémentaires puis-je extraire des pages de détails ?
La page " Film " se présente comme suit et contient des métadonnées détaillées sur chaque film :
<div class="mvi-content">
<div class="thumb mvic-thumb"
style="background-image: url(https://img.gocdn.online/2017/04/28/poster/5a08e94ba02118f22dc30f298c603210-guardians-of-the-galaxy-vol-2.jpg);"></div>
<div class="mvic-desc">
<h3>Guardians of the Galaxy Vol. 2</h3>
<div class="desc">
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.
</div>
<div class="mvic-info">
<div class="mvici-left">
<p>
<strong>Genre: </strong>
<a href="https://Domain/genre/action/" title="Action">Action</a>,
<a href="https://Domain/genre/adventure/" title="Adventure">Adventure</a>,
<a href="https://Domain/genre/sci-fi/" title="Sci-Fi">Sci-Fi</a>
</p>
<p>
<strong>Actor: </strong>
<a target="_blank" href="https://Domain/actor/chris-pratt" title="Chris Pratt">Chris Pratt</a>,
<a target="_blank" href="https://Domain/actor/-zoe-saldana" title="Zoe Saldana">Zoe Saldana</a>,
<a target="_blank" href="https://Domain/actor/-dave-bautista-" title="Dave Bautista">Dave Bautista</a>
</p>
<p>
<strong>Director: </strong>
<a href="#" title="James Gunn">James Gunn</a>
</p>
<p>
<strong>Country: </strong>
<a href="https://Domain/country/us" title="United States">United States</a>
</p>
</div>
<div class="mvici-right">
<p><strong>Duration:</strong> 136 min</p>
<p><strong>Quality:</strong> <span class="quality">CAM</span></p>
<p><strong>Release:</strong> 2017</p>
<p><strong>IMDb:</strong> 8.3</p>
</div>
<div class="clearfix"></div>
</div>
<div class="clearfix"></div>
</div>
<div class="clearfix"></div>
</div>
<div class="mvi-content">
<div class="thumb mvic-thumb"
style="background-image: url(https://img.gocdn.online/2017/04/28/poster/5a08e94ba02118f22dc30f298c603210-guardians-of-the-galaxy-vol-2.jpg);"></div>
<div class="mvic-desc">
<h3>Guardians of the Galaxy Vol. 2</h3>
<div class="desc">
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.
</div>
<div class="mvic-info">
<div class="mvici-left">
<p>
<strong>Genre: </strong>
<a href="https://Domain/genre/action/" title="Action">Action</a>,
<a href="https://Domain/genre/adventure/" title="Adventure">Adventure</a>,
<a href="https://Domain/genre/sci-fi/" title="Sci-Fi">Sci-Fi</a>
</p>
<p>
<strong>Actor: </strong>
<a target="_blank" href="https://Domain/actor/chris-pratt" title="Chris Pratt">Chris Pratt</a>,
<a target="_blank" href="https://Domain/actor/-zoe-saldana" title="Zoe Saldana">Zoe Saldana</a>,
<a target="_blank" href="https://Domain/actor/-dave-bautista-" title="Dave Bautista">Dave Bautista</a>
</p>
<p>
<strong>Director: </strong>
<a href="#" title="James Gunn">James Gunn</a>
</p>
<p>
<strong>Country: </strong>
<a href="https://Domain/country/us" title="United States">United States</a>
</p>
</div>
<div class="mvici-right">
<p><strong>Duration:</strong> 136 min</p>
<p><strong>Quality:</strong> <span class="quality">CAM</span></p>
<p><strong>Release:</strong> 2017</p>
<p><strong>IMDb:</strong> 8.3</p>
</div>
<div class="clearfix"></div>
</div>
<div class="clearfix"></div>
</div>
<div class="clearfix"></div>
</div>
Comment puis-je étendre ma classe Movie pour ajouter des propriétés supplémentaires ?
Étendez la classe avec de nouvelles propriétés (, ,, ,, ,Note IMDb) mais n'utilisez que, , et pour cet exemple. L'utilisation de @@--CODEstring>-117
using System.Co/llections.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<string> Genre { get; set; }
public List<string> Actor { get; set; }
}
using System.Co/llections.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<string> Genre { get; set; }
public List<string> Actor { get; set; }
}
Imports System.Collections.Generic
Public Class Movie
Public Property Id As Integer
Public Property Title As String
Public Property URL As String
Public Property Description As String
Public Property Genre As List(Of String)
Public Property Actor As List(Of String)
End Class
Comment naviguer entre les pages pendant le scraping ?
Accédez à la page détaillée pour la scraper. IronWebScraper gère automatiquement la sécurité des threads, 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 scraping 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étadonnées facilitent-elles le passage d'objets entre les fonctions d'analyse ?
La fonctionnalité MetaData est essentielle pour maintenir l'état entre les requêtes. Pour des fonctionnalités de WEBSCRAPER plus avancées, consultez notre guide détaillé :
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>("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<string>(); // Initialize genre list
foreach(var genre in div.Css("div > p > a"))
{
movie.Genre.Add(genre.TextContentClean);
}
// Extract actors
movie.Actor = new List<string>(); // 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");
}
}
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>("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<string>(); // Initialize genre list
foreach(var genre in div.Css("div > p > a"))
{
movie.Genre.Add(genre.TextContentClean);
}
// Extract actors
movie.Actor = new List<string>(); // 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");
}
}
Public Class MovieScraper
Inherits WebScraper
Public Overrides Sub Init()
' Initialize scraper settings
License.LicenseKey = "LicenseKey"
Me.LoggingLevel = WebScraper.LogLevel.All
Me.WorkingDirectory = AppSetting.GetAppRoot() & "\MovieSample\Output\"
' Request homepage content for scraping
Me.Request("https://domain/", AddressOf Parse)
End Sub
Public Overrides Sub Parse(ByVal response As Response)
' Iterate over each movie div within the featured movie section
For Each div In response.Css("#movie-featured > div")
If div.Attributes("class") <> "clearfix" Then
Dim movie As New Movie With {.Id = Convert.ToInt32(div.GetAttribute("data-movie-id"))}
Dim link = div.Css("a")(0)
movie.Title = link.TextContentClean
movie.URL = link.Attributes("href")
' Request detailed page
Me.Request(movie.URL, AddressOf ParseDetails, New MetaData() From {
{ "movie", movie }
})
End If
Next div
End Sub
Public Sub ParseDetails(ByVal response As Response)
' Retrieve movie object from metadata
Dim movie = response.MetaData.Get(Of Movie)("movie")
Dim div = response.Css("div.mvic-desc")(0)
' Extract description
movie.Description = div.Css("div.desc")(0).TextContentClean
' Extract genres
movie.Genre = New List(Of String)() ' Initialize genre list
For Each genre In div.Css("div > p > a")
movie.Genre.Add(genre.TextContentClean)
Next genre
' Extract actors
movie.Actor = New List(Of String)() ' Initialize actor list
For Each actor In div.Css("div > p:nth-child(2) > a")
movie.Actor.Add(actor.TextContentClean)
Next actor
' Scrape and store detailed movie data
Scrape(movie, "Movie.Jsonl")
End Sub
End Class
Quelles sont les principales caractéristiques de cette approche de scraping multipages ?
Quoi de neuf ?
- Ajouter des fonctions de scraping (par exemple, ``) pour extraire des pages détaillées, à l'instar des techniques utilisées lors du scraping d'un site de vente en ligne.
- Déplacez la fonction `` qui génère des fichiers vers la nouvelle fonction, en veillant à ce que les données ne soient enregistrées qu'une fois tous les détails collectés.
- Utilisez la fonctionnalité IronWebScraper (``) pour transmettre des objets " movie " à de nouvelles fonctions de scraping, en conservant l'état des objets d'une requête à l'autre.
- Extraire des pages et économiser les données des objets vidéo dans des fichiers contenant toutes les informations.
Pour plus d'informations sur les méthodes et propriétés disponibles, consultez la référence 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.






