Retour au blog
Guides
Suciu Dan12 octobre 20226 min de lecture

Un outil de scraping Web en C# en quelques minutes seulement !

Un outil de scraping Web en C# en quelques minutes seulement !

Eh bien, c'est légal tant que le site web que vous souhaitez scraper y consent. Vous pouvez le vérifier en ajoutant « /robots.txt » à son URL, par exemple http://httpbin.org/robots.txt, et en lisant les autorisations, ou en consultant la section des conditions d'utilisation.

Qu'est-ce que le web scraping avec C# ?

Le web scraping est une technique automatisée utilisée par des entreprises de toutes tailles pour extraire des données à des fins diverses, telles que l'optimisation des prix ou la collecte d'adresses e-mail. Les chercheurs utilisent le web scraping pour collecter des rapports de données et des statistiques, et les développeurs obtiennent de grandes quantités de données pour l'apprentissage automatique. 

Comment cela fonctionne-t-il ? Eh bien, pour la plupart des outils de web scraping, il vous suffit de spécifier l'URL du site web dont vous souhaitez extraire les données. En fonction des capacités du scraper, celui-ci extraira les informations de cette page web de manière structurée, prêtes à être analysées et manipulées comme vous le souhaitez. 

Gardez à l'esprit que certains scrapers ne consultent que le contenu HTML d'une page pour extraire les informations d'une page web dynamique. Dans ce cas, un outil de web scraping plus sophistiqué est nécessaire pour mener à bien la tâche.

L'utilisation d'un scraper web est très utile car elle permet de réduire le temps que vous passeriez normalement sur cette tâche. Copier-coller manuellement des données ne semble pas être une activité très agréable à répéter sans cesse. Imaginez le temps qu'il faudrait pour obtenir les énormes quantités de données nécessaires à l'entraînement d'une IA ! Si vous souhaitez en savoir plus sur l'utilité de l'extraction de données, jetez un œil ici !  

Voyons comment créer notre outil de web scraping en quelques minutes seulement.

Créer votre propre scraper web en C#

Dans ce tutoriel, je vais vous montrer comment écrire un scraper web en C#. Je sais qu'utiliser un autre langage de programmation, comme Python, peut être plus avantageux pour cette tâche, mais cela ne signifie pas qu'il est impossible de le faire en C#. 

Le codage en C# présente des avantages, tels que :

  • C'est un langage orienté objet ;
  • Il offre une meilleure intégrité et interopérabilité ;
  • C'est un langage multiplateforme ;

1. Choisir la page que vous souhaitez scraper

Tout d'abord, vous devez décider quelle page web extraire. Dans cet exemple, je vais extraire la page sur la Grèce sur Wikipédia et voir quels sujets sont présentés dans sa table des matières. C'est un exemple simple, mais vous pouvez l'adapter à d'autres pages web également.

2. Examiner le code du site web

À l'aide des outils de développement, vous pouvez inspecter chaque élément pour vérifier sous quelle balise se trouvent les informations dont vous avez besoin. Il suffit de cliquer avec le bouton droit de la souris sur la page web et de sélectionner « Inspecter » ; une « boîte d'inspection du navigateur » s'affichera alors.

Chrome DevTools Elements panel showing HTML for a table of contents list item

Vous pouvez rechercher la classe directement dans la section des éléments ou à l'aide de l'outil d'inspection sur la page Web, comme illustré ci-dessous.

Chrome DevTools element tooltip over a Wikipedia table of contents entry

Vous avez ainsi découvert que les données dont vous avez besoin se trouvent dans la balise span qui possède la classe toctext. La prochaine étape consiste à extraire l'intégralité du code HTML de la page, à l'analyser et à sélectionner uniquement les données contenues dans cette classe spécifique. Commençons par quelques préparatifs rapides !

3. Préparer l'espace de travail

Vous pouvez utiliser l'IDE qui vous convient le mieux. Dans cet exemple, j'utiliserai Visual Studio Code. Vous devrez également installer le SDK .NET.

Vous devez maintenant créer votre projet. Pour ce faire, vous devez bien sûr ouvrir Visual Studio Code. Ensuite, rendez-vous dans le menu des extensions et installez C# pour Visual Studio Code.

Visual Studio Code Extensions panel searching for C# extensions

Vous avez besoin d’un emplacement pour écrire et exécuter notre code. Dans la barre de menu, sélectionnez Fichier > Ouvrir un fichier (Fichier > Ouvrir… sur macOS) et, dans la boîte de dialogue, créez un dossier qui servira d’espace de travail.

Une fois l'espace de travail créé, vous pouvez créer un modèle d'application simple « Hello World » en saisissant la commande suivante dans le terminal de notre projet :

dotnet new console

Votre nouveau projet devrait ressembler à ceci :

C# code snippet printing 'Hello World!' in a console application

Ensuite, vous devez installer ces deux paquets :

  • HtmlAgilityPack est un analyseur HTML écrit en C# permettant de lire/écrire le DOM.
  • CsvHelper est un paquet utilisé pour lire et écrire des fichiers CSV.

Vous pouvez les installer à l'aide des lignes de commande suivantes dans le terminal de votre projet :

dotnet add package csvhelper
dotnet add package htmlagilitypack

4. Écriture du code

Importons les paquets que nous avons installés il y a quelques minutes, ainsi que d'autres paquets utiles pour une utilisation ultérieure :

using CsvHelper;
using HtmlAgilityPack;
using System.IO;
using System.Collections.Generic;
using System.Globalization;

En dehors de notre fonction Main, vous allez créer une classe publique pour les titres de votre table des matières.

public class Row
{
    public string Title {get; set;}
}

Revenons maintenant à la fonction Main : vous devez charger la page que vous souhaitez extraire. Comme je l'ai mentionné précédemment, nous allons voir ce que Wikipédia dit à propos de la Grèce !

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://en.wikipedia.org/wiki/Greece");

Notre prochaine étape consiste à analyser et à sélectionner les nœuds contenant les informations que vous recherchez, qui se trouvent dans les balises span avec la classe toctext.

varHeaderNames = doc.DocumentNode.SelectNodes("//span[@class='toctext']");

Que faire de ces informations maintenant ? Stockons-les dans un fichier .csv pour une utilisation ultérieure. Pour cela, vous devez d'abord parcourir chaque nœud que nous avons extrait précédemment et stocker son texte dans une liste.

CsvHelper se chargera du reste, en créant un fichier et en y écrivant les informations extraites.

var titles = new List<Row>();
foreach (var item in HeaderNames)
{
    titles.Add(new Row { Title = item.InnerText});
}
 
using (var writer = new StreamWriter("your_path_here/example.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(titles);
}

5. Exécution du code

Le code est prêt, il ne reste plus qu'à l'exécuter ! Utilisez cette ligne de commande dans le terminal. Assurez-vous d'avoir d'abord enregistré votre fichier !

dotnet run

C&#x27;est terminé !

J'espère que cet article vous a aidé à mieux comprendre les bases du web scraping avec C#.

Il est très utile de disposer de son propre scraper, mais gardez à l'esprit que vous ne pouvez scraper qu'une seule page web à la fois et que vous devez toujours sélectionner manuellement les balises dans le code HTML du site web.

Si vous souhaitez extraire plusieurs autres pages, il sera certes beaucoup plus rapide d'utiliser un scraper que de sélectionner les informations manuellement, mais tous les sites web ne peuvent pas être scrapés à l'aide de cette méthode. Certains sites web sont dynamiques, et cet exemple ne permettra pas d'extraire toutes leurs données.

Avez-vous déjà pensé à utiliser un outil prêt à l'emploi et plus avancé pour vous aider à extraire des données en masse ? 

Pourquoi ne pas découvrir ce qu'une API peut faire pour vous ? Voici un guide rédigé par WebScrapingAPI pour vous aider à choisir une API qui pourrait répondre à vos besoins.

À la prochaine !

À propos de l'auteur
Suciu Dan, cofondateur @ WebScrapingAPI
Suciu Dancofondateur

Suciu Dan est le cofondateur de WebScrapingAPI et rédige des guides pratiques destinés aux développeurs sur le web scraping avec Python et Ruby, ainsi que sur les infrastructures de proxy.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.