Web Scraping d'un Blog en C# avec IronWebScraper
Utilisons Iron WebScraper pour extraire le contenu d'un blog en utilisant C# ou VB.NET.
Ce tutoriel explique comment faire du web scraping sur un blog WordPress (ou similaire) à l'aide de .NET.
// Define a class that extends WebScraper from IronWebScraper
public class BlogScraper : WebScraper
{
/// <summary>
/// Override this method to initialize your web-scraper.
/// Set at least one start URL and configure domain or URL patterns.
/// </summary>
public override void Init()
{
// Set your license key for IronWebScraper
License.LicenseKey = "YourLicenseKey";
// Enable logging for all actions
this.LoggingLevel = WebScraper.LogLevel.All;
// Set a directory to store output and cache files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\BlogSample\Output\";
// Enable caching with a specific duration
EnableWebCache(new TimeSpan(1, 30, 30));
// Request the start URL and specify the response handler
this.Request("http://blogSite.com/", Parse);
}
}
// Define a class that extends WebScraper from IronWebScraper
public class BlogScraper : WebScraper
{
/// <summary>
/// Override this method to initialize your web-scraper.
/// Set at least one start URL and configure domain or URL patterns.
/// </summary>
public override void Init()
{
// Set your license key for IronWebScraper
License.LicenseKey = "YourLicenseKey";
// Enable logging for all actions
this.LoggingLevel = WebScraper.LogLevel.All;
// Set a directory to store output and cache files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\BlogSample\Output\";
// Enable caching with a specific duration
EnableWebCache(new TimeSpan(1, 30, 30));
// Request the start URL and specify the response handler
this.Request("http://blogSite.com/", Parse);
}
}
' Define a class that extends WebScraper from IronWebScraper
Public Class BlogScraper
Inherits WebScraper
''' <summary>
''' Override this method to initialize your web-scraper.
''' Set at least one start URL and configure domain or URL patterns.
''' </summary>
Public Overrides Sub Init()
' Set your license key for IronWebScraper
License.LicenseKey = "YourLicenseKey"
' Enable logging for all actions
Me.LoggingLevel = WebScraper.LogLevel.All
' Set a directory to store output and cache files
Me.WorkingDirectory = AppSetting.GetAppRoot() & "\BlogSample\Output\"
' Enable caching with a specific duration
EnableWebCache(New TimeSpan(1, 30, 30))
' Request the start URL and specify the response handler
Me.Request("http://blogSite.com/", Parse)
End Sub
End Class
Comme d'habitude, nous créons un Scraper et héritons de la classe WebScraper. Dans ce cas, il s'agit de "BlogScraper".
Nous avons défini un répertoire de travail sur " \BlogSample\Output\ " où tous nos fichiers de sortie et de cache peuvent être placés.
Ensuite, nous activons le cache web pour enregistrer les pages demandées dans le dossier cache " WebCache ".
Écrivons maintenant une fonction d'analyse syntaxique :
/// <summary>
/// Override this method to handle the Http Response for your web scraper.
/// Add additional methods if you handle multiple page types.
/// </summary>
/// <param name="response">The HTTP Response object to parse.</param>
public override void Parse(Response response)
{
// Iterate over each link found in the section navigation
foreach (var link in response.Css("div.section-nav > ul > li > a"))
{
switch(link.TextContentClean)
{
case "Reviews":
{
// Handle reviews case
}
break;
case "Science":
{
// Handle science case
}
break;
default:
{
// Save the link title to a file
Scrape(new ScrapedData() { { "Title", link.TextContentClean } }, "BlogScraper.Jsonl");
}
break;
}
}
}
/// <summary>
/// Override this method to handle the Http Response for your web scraper.
/// Add additional methods if you handle multiple page types.
/// </summary>
/// <param name="response">The HTTP Response object to parse.</param>
public override void Parse(Response response)
{
// Iterate over each link found in the section navigation
foreach (var link in response.Css("div.section-nav > ul > li > a"))
{
switch(link.TextContentClean)
{
case "Reviews":
{
// Handle reviews case
}
break;
case "Science":
{
// Handle science case
}
break;
default:
{
// Save the link title to a file
Scrape(new ScrapedData() { { "Title", link.TextContentClean } }, "BlogScraper.Jsonl");
}
break;
}
}
}
''' <summary>
''' Override this method to handle the Http Response for your web scraper.
''' Add additional methods if you handle multiple page types.
''' </summary>
''' <param name="response">The HTTP Response object to parse.</param>
Public Overrides Sub Parse(ByVal response As Response)
' Iterate over each link found in the section navigation
For Each link In response.Css("div.section-nav > ul > li > a")
Select Case link.TextContentClean
Case "Reviews"
' Handle reviews case
Case "Science"
' Handle science case
Case Else
' Save the link title to a file
Scrape(New ScrapedData() From {
{ "Title", link.TextContentClean }
},
"BlogScraper.Jsonl")
End Select
Next link
End Sub
Dans la méthode Parse, nous récupérons tous les liens vers les pages de catégories (Films, Science, Critiques, etc.) à partir du menu supérieur.
Nous passons ensuite à une méthode d'analyse appropriée en fonction de la catégorie du lien.
Préparons notre modèle d'objet pour la page scientifique :
/// <summary>
/// Represents a model for Science Page
/// </summary>
public class ScienceModel
{
/// <summary>
/// Gets or sets the title.
/// </summary>
public string Title { get; set; }
/// <summary>
/// Gets or sets the author.
/// </summary>
public string Author { get; set; }
/// <summary>
/// Gets or sets the date.
/// </summary>
public string Date { get; set; }
/// <summary>
/// Gets or sets the image.
/// </summary>
public string Image { get; set; }
/// <summary>
/// Gets or sets the text.
/// </summary>
public string Text { get; set; }
}
/// <summary>
/// Represents a model for Science Page
/// </summary>
public class ScienceModel
{
/// <summary>
/// Gets or sets the title.
/// </summary>
public string Title { get; set; }
/// <summary>
/// Gets or sets the author.
/// </summary>
public string Author { get; set; }
/// <summary>
/// Gets or sets the date.
/// </summary>
public string Date { get; set; }
/// <summary>
/// Gets or sets the image.
/// </summary>
public string Image { get; set; }
/// <summary>
/// Gets or sets the text.
/// </summary>
public string Text { get; set; }
}
''' <summary>
''' Represents a model for Science Page
''' </summary>
Public Class ScienceModel
''' <summary>
''' Gets or sets the title.
''' </summary>
Public Property Title() As String
''' <summary>
''' Gets or sets the author.
''' </summary>
Public Property Author() As String
''' <summary>
''' Gets or sets the date.
''' </summary>
Public Property [Date]() As String
''' <summary>
''' Gets or sets the image.
''' </summary>
Public Property Image() As String
''' <summary>
''' Gets or sets the text.
''' </summary>
Public Property Text() As String
End Class
Passons maintenant à la mise en œuvre d'une extraction de données sur une seule page :
/// <summary>
/// Parses the reviews from the response.
/// </summary>
/// <param name="response">The HTTP Response object.</param>
public void ParseReviews(Response response)
{
// A list to hold Science models
var scienceList = new List<ScienceModel>();
foreach (var postBox in response.Css("section.main > div > div.post-list"))
{
var item = new ScienceModel
{
Title = postBox.Css("h1.headline > a")[0].TextContentClean,
Author = postBox.Css("div.author > a")[0].TextContentClean,
Date = postBox.Css("div.time > a")[0].TextContentClean,
Image = postBox.Css("div.image-wrapper.default-state > img")[0].Attributes["src"],
Text = postBox.Css("div.summary > p")[0].TextContentClean
};
scienceList.Add(item);
}
// Save the science list to a JSONL file
Scrape(scienceList, "BlogScience.Jsonl");
}
/// <summary>
/// Parses the reviews from the response.
/// </summary>
/// <param name="response">The HTTP Response object.</param>
public void ParseReviews(Response response)
{
// A list to hold Science models
var scienceList = new List<ScienceModel>();
foreach (var postBox in response.Css("section.main > div > div.post-list"))
{
var item = new ScienceModel
{
Title = postBox.Css("h1.headline > a")[0].TextContentClean,
Author = postBox.Css("div.author > a")[0].TextContentClean,
Date = postBox.Css("div.time > a")[0].TextContentClean,
Image = postBox.Css("div.image-wrapper.default-state > img")[0].Attributes["src"],
Text = postBox.Css("div.summary > p")[0].TextContentClean
};
scienceList.Add(item);
}
// Save the science list to a JSONL file
Scrape(scienceList, "BlogScience.Jsonl");
}
''' <summary>
''' Parses the reviews from the response.
''' </summary>
''' <param name="response">The HTTP Response object.</param>
Public Sub ParseReviews(ByVal response As Response)
' A list to hold Science models
Dim scienceList = New List(Of ScienceModel)()
For Each postBox In response.Css("section.main > div > div.post-list")
Dim item = New ScienceModel With {
.Title = postBox.Css("h1.headline > a")(0).TextContentClean,
.Author = postBox.Css("div.author > a")(0).TextContentClean,
.Date = postBox.Css("div.time > a")(0).TextContentClean,
.Image = postBox.Css("div.image-wrapper.default-state > img")(0).Attributes("src"),
.Text = postBox.Css("div.summary > p")(0).TextContentClean
}
scienceList.Add(item)
Next postBox
' Save the science list to a JSONL file
Scrape(scienceList, "BlogScience.Jsonl")
End Sub
Une fois notre modèle créé, nous pouvons analyser l'objet de réponse pour examiner en détail ses principaux éléments (titre, auteur, date, image, texte).
Ensuite, nous enregistrons nos résultats dans un fichier séparé en utilisant Scrape(object, fileName).
Cliquez ici pour consulter le tutoriel complet sur l'utilisation d'IronWebScraper
Commencez à utiliser IronWebscraper
Questions Fréquemment Posées
Comment puis-je créer un scraper web de blog en C# ?
Pour créer un scraper web de blog en C#, vous pouvez utiliser la bibliothèque IronWebScraper. Commencez par définir une classe qui étend la classe WebScraper, définissez une URL de départ, configurez le scraper pour gérer différents types de pages et utilisez la méthode Parse pour extraire les informations souhaitées des réponses HTTP.
Quelle est la fonction de la méthode Parse dans le scraping web ?
Dans le scraping web avec IronWebScraper, la méthode Parse est essentielle pour traiter les réponses HTTP. Elle aide à extraire les données en analysant le contenu des pages, en identifiant les liens et en catégorisant les types de pages telles que les articles de blog ou d'autres sections.
Comment puis-je gérer efficacement les données de scraping web ?
IronWebScraper permet une gestion efficace des données en configurant le cache pour stocker les pages demandées et en définissant un répertoire de travail pour les fichiers de sortie. Cette organisation aide à suivre les données extraites et réduit l'extraction répétée inutile de pages.
Comment IronWebScraper aide-t-il dans le scraping des blogs WordPress ?
IronWebScraper simplifie le scraping des blogs WordPress en fournissant des outils pour naviguer dans les structures de blogs, extraire les détails des publications et gérer divers types de pages. Vous pouvez utiliser la bibliothèque pour parser les publications pour obtenir des informations telles que le titre, l'auteur, la date, l'image et le texte.
Puis-je utiliser IronWebScraper pour both C# et VB.NET ?
Oui, IronWebScraper est compatible avec C# et VB.NET, ce qui en fait un choix polyvalent pour les développeurs qui préfèrent l'un de ces langages .NET.
Comment puis-je gérer différents types de pages dans un blog ?
Vous pouvez gérer différents types de pages dans un blog en remplissant la méthode Parse dans IronWebScraper. Cette approche vous permet de classer les pages dans différentes sections, telles que Avis et Science, et d'appliquer une logique d'analyse spécifique à chacune.
Existe-t-il un moyen d'enregistrer les données de blog extraites dans un format structuré ?
Oui, en utilisant IronWebScraper, vous pouvez enregistrer les données de blog extraites dans un format structuré comme JSONL. Ce format est utile pour stocker chaque donnée dans un format JSON ligne par ligne, ce qui facilite sa gestion et son traitement ultérieur.
Comment puis-je définir un répertoire de travail pour mon scraper web ?
Dans IronWebScraper, vous pouvez définir un répertoire de travail en configurant le scraper pour spécifier l'emplacement où les fichiers de sortie et de cache doivent être stockés. Cela aide à organiser efficacement les données extraites.
Quels sont des scénarios de dépannage courants dans le scraping web ?
Les scénarios de dépannage courants dans le scraping web incluent la gestion des modifications dans la structure du site web, la gestion des limites de débit et la gestion des mesures anti-scraping. En utilisant IronWebScraper, vous pouvez implémenter une gestion des erreurs et une journalisation pour diagnostiquer et résoudre ces problèmes.
Où puis-je trouver des ressources pour en savoir plus sur l'utilisation de IronWebScraper ?
Vous pouvez trouver des ressources et des tutoriels sur l'utilisation de IronWebScraper sur le site Web d'Iron Software, qui propose des guides détaillés et des exemples dans la section des tutoriels de scraping web.


