Retour au blog
Guides
Sorin-Gabriel MaricaLast updated on Mar 31, 202610 min read

Apiasp.Net Core Web Scraping : votre guide incontournable pour 2023

Apiasp.Net Core Web Scraping : votre guide incontournable pour 2023

Apiasp.net : le cœur du web scraping

Le web scraping est une technique préprogrammée permettant d'extraire de grandes quantités de données à partir de sites web. La plupart de ces données sont non structurées et au format HTML. Elles sont toutefois ensuite transformées en informations structurées dans une base de données ou un tableur afin d'être utilisées dans d'autres programmes. 

Pour extraire des données de sites web, le web scraping peut être réalisé à l'aide de diverses méthodes spécifiques. Celles-ci incluent l'utilisation de services en ligne, d'API spécifiques, ou même l'écriture de votre propre code à partir de zéro pour le web scraping. Vous pouvez accéder à des données sous une forme structurée sur plusieurs sites web.

Bien que ce soit souvent la meilleure option, certains sites web ne sont pas en mesure de fournir aux utilisateurs de grands volumes de données de manière ordonnée ou ne sont pas très avancés en termes de technologie. Dans ce cas, il est préférable d'utiliser le web scraping pour collecter les données du site web.

Python est aujourd'hui le langage de programmation le plus utilisé pour le web scraping. Pour le web scraping, Python met à votre disposition plusieurs bibliothèques. .NET peut également être utilisé pour le web crawling. Nous pouvons extraire des données de nombreux sites web à l'aide d'API web tierces.

Une API populaire pour le web scraping dans .NET s'appelle WebScrapingAPI. Récemment, ils ont également inclus l'édition .NET Core pour le web scraping.

Différence entre le web scraping et l e web crawl ing

Différence entre le web scraping et le web crawling 

Les navigateurs Web sont utilisés pour afficher les métadonnées des pages Web trouvées sur Internet, qui héberge une quantité considérable de données. Les utilisateurs peuvent simplement naviguer entre les sites Web et interpréter les données à l'aide de pages d'affichage basées sur un navigateur. 

Le crawling Web et le scraping Web sont des termes utilisés pour décrire le processus d'extraction de code de vue. Le scraping Web consiste à analyser une page Web et à en extraire des informations. La recherche de liens Web et la récupération itérative de leur contenu s'appelle le crawling Web. 

Ces deux opérations sont effectuées par une application, car la découverte de nouvelles connexions nécessite le scraping de pages web. Ces deux termes, parfois utilisés comme synonymes, désignent la procédure d'obtention d'informations. Ils servent toutefois à de nombreuses fins. 

Comment et où ces connaissances peuvent-elles être mises à profit ?

On trouve en ligne plus de réponses qu'il n'y a de sites web. Cette connaissance peut être un outil précieux pour créer des applications, et comprendre comment écrire ce type de code pourrait s'appliquer aux tests web automatisés.

Dans cet article, nous aborderons deux méthodes pour explorer et extraire des données du Web à l'aide de navigateurs et de requêtes HTTP de base, ainsi que les avantages et les inconvénients de chacune.

Utilisation des requêtes HTTP et des navigateurs Web pour télécharger du contenu Web

Utilisation des requêtes HTTP et des navigateurs Web pour télécharger du contenu Web

Étant donné que presque tout se trouve en ligne de nos jours, vous pouvez sans aucun doute trouver un module permettant d'envoyer des requêtes HTTP dans n'importe quel langage de programmation. Les requêtes HTTP simples s'exécutent rapidement. Il faut plus de temps pour utiliser des navigateurs Web comme Firefox et Google Chrome comme alternative. 

Ils se comportent et s’affichent différemment, ce qui modifie la manière dont chaque activité est présentée et rend le contenu facilement lisible. Ils sont utilisés pour prendre en compte les styles d’affichage et l’exécution de scripts sur les pages web. Les navigateurs web gaspillent parfois des ressources. Par exemple, une simple requête HTTP peut suffire si vous essayez de récupérer du texte depuis une page web et de le télécharger sous forme de texte brut.

Néanmoins, comme JavaScript est très répandu, certains contenus de nombreux sites web ne peuvent pas s'afficher s'il n'est pas exécuté. Dans ce cas, le téléchargement de contenu web est facilité par l'utilisation d'un navigateur.

Analyse CSS et XPath

Analyse CSS et XPath

XPath et CSS sont deux méthodes d'analyse de texte fréquemment utilisées. XPath, un langage de balisage de requêtes, sert à identifier des éléments spécifiques dans les fichiers XML et HTML. 

Chacun possède une structure spécifique, et ce modèle peut être suivi lors de la rédaction d'une requête. Les sélecteurs CSS permettent de choisir des éléments à l'aide d'un modèle de chaîne de caractères et sont quelque peu comparables à XPath, car les styles CSS s'appliquent par-dessus la structure HTML.

Préparation de la démo

Préparation de la démo

Ces démos utilisent les environnements C# et .NET Core 3.1. Ces API doivent fonctionner sur .NET 4x, car elles n'ont pas beaucoup évolué récemment. Un site d'exemple (une application ASP.NET Core MVC) comprenant trois pages est également inclus dans le référentiel :

  • Pages avec un tableau simple 
  • Pages avec un « lien caché » et 
  • Un bouton qui n'apparaît qu'après un délai d'attente

Création d'une API Web ASP.NET Core à l'aide de Visual Studio 2022

Création d'une API Web ASP.NET Core à l'aide de Visual Studio 2022

Avec .NET 6.0, Visual Studio 2022 permet de développer une API d'application Web ASP.NET Core. Dans Visual Studio, vous devez donner un nom valide au projet et sélectionner le modèle d'API d'application Web ASP.NET Core.

Le framework .NET Core Web API 6.0 est disponible en option. De plus, vous pouvez sélectionner la prise en charge par défaut d'Open API. Pour le projet, cela générera des métadonnées Sass. 

Les API répertoriées ici doivent être installées à l'aide du gestionnaire de paquets NuGet.

Pour les pages statiques

Pour les pages statiques

Configuration

Configuration

Si vous utilisez C#, il y a de fortes chances que vous travailliez déjà avec Visual Studio. Dans cet article, nous utilisons un projet d'application web .NET Core spécifique basé sur le modèle MVC (Model View Controller). 

Utilisez le gestionnaire de paquets NuGet pour intégrer les bibliothèques requises utilisées tout au long de ce guide après avoir créé un tout nouveau projet.

Pour télécharger les paquets dans NuGet, sélectionnez l'option « Parcourir », puis saisissez « HTML Agility Pack ».

Vous êtes désormais prêt à continuer après avoir installé le package. Le tableau HTML obtenu peut être facilement analysé à l'aide de ce package pour localiser les balises et les données que vous souhaitez enregistrer. 

Les API suivantes doivent être incluses dans le code avant de commencer à coder le scraper via Visual Studio :

Utilisation de C# pour envoyer une requête HTTP à une page Web

Utilisation de C# pour envoyer une requête HTTP à une page Web

Prenons l'exemple d'un projet dans lequel vous devez parcourir Wikipédia à la recherche d'informations sur des programmeurs informatiques célèbres. S'il n'y avait pas d'article à ce sujet, Wikipédia ne serait pas Wikipédia, n'est-ce pas ?

 https://en.wikipedia.org/wiki/list-of-programmers 

Cet article contient une liste de développeurs avec des liens hypertextes vers la page Wikipédia de chacun d'entre eux. Pour une utilisation ultérieure, vous pouvez extraire cette liste et enregistrer les données au format CSV (que, par exemple, Excel peut facilement traiter).

L'idée principale derrière le web scraping en ligne est de localiser un site web contenant les données requises, d'utiliser C# pour extraire les informations et de les enregistrer pour une utilisation ultérieure. Ce n'est qu'un exemple simple de ce que vous pourriez accomplir grâce au web scraping.

Les liens hypertextes d'une page de catégorie principale peuvent être utilisés pour explorer des pages web dans le cadre de projets plus complexes. Cependant, concentrons-nous sur cette page Wikipédia spécifique pour les exemples suivants.

Récupération de HTML avec .HttpClient API Web .NET Core

Récupération de HTML avec .HttpClient API Web .NET Core

Le client HTTP intégré à .NET s'appelle HttpClient et est disponible par défaut. Aucune bibliothèque ou plugin tiers indépendant n'est nécessaire, car le domaine Net.HTTP s'occupe de tout. De plus, il inclut une prise en charge native des appels différés.

L'exemple suivant montre à quel point il est facile d'obtenir le contenu de n'importe quelle URL de manière asynchrone et non bloquante en utilisant GetStringAsync()

private static async Task<string> CallUrl(string full URL)

{

HttpClient client = new HttpClient();

var response = await client.GetStringAsync(full URL);

return response;

}

Il suffit de créer un tout nouvel objet HttpClient, d'appeler GetStringAsync(), d'« attendre » qu'il se termine, puis de renvoyer le résultat à l'appelant. Maintenant que cette fonctionnalité a été ajoutée à la classe du contrôleur, vous pouvez appeler CallUrl() depuis la méthode Index() sans autre action. Mettons cela en pratique.

public IActionResult Index(){

string url = "https://en.wikipedia.org/wiki/List_of_programmers";

var response = CallUrl(url).Result;

return View();}

Ici, nous spécifions l'URL de Wikipédia dans l'URL, l'appelons avec callUrl() et enregistrons le résultat dans les variables de retour.

Bon, le code nécessaire pour envoyer la requête HTTP est terminé. Même si nous ne l'avons pas encore traité, c'est une excellente idée d'exécuter le code immédiatement pour s'assurer que le code HTML de Wikipédia est bien reçu et qu'il n'y a pas d'erreurs.

Pour ce faire, nous allons d'abord placer un point d'arrêt à return View() dans la méthode Index(). Cela vous permettra de voir les résultats à l'aide de l'interface utilisateur du débogueur de Visual Studio.

En sélectionnant l'option « Exécuter » dans la barre d'outils de Visual Studio, vous pouvez tester le code mentionné ci-dessus : au point d'arrêt, Visual Studio s'interrompra, vous permettant de voir l'état actuel de l'application.

En survolant la variable, vous constaterez que le serveur a renvoyé une page HTML valide, ce qui indique que tout est prêt. Si vous sélectionnez « HTML Visualizer » dans le menu contextuel, vous verrez un aperçu de la page HTML.

Analyse HTML

Analyse HTML

Il est maintenant temps d'analyser le tableau HTML qui a été récupéré. Une suite d'analyseurs très appréciée, appelée HTML Agility Pack, peut par exemple être facilement intégrée à LINQ.

Vous devez comprendre la structure de la page avant d'analyser le tableau HTML afin de pouvoir identifier précisément les éléments à récupérer. Les outils de développement de votre navigateur vous seront une fois de plus utiles dans cette situation, car ils vous permettent d'examiner en détail l'arborescence DOM.

Nous verrons sur notre page Wikipédia que les liens de notre table des matières sont nombreux, nous n'en aurons donc pas besoin. Il existe également d'autres liens supplémentaires, dont certains ne sont pas absolument nécessaires pour notre collecte de données (comme les liens d'édition). 

En y regardant de plus près, nous constatons que chaque lien qui nous intéresse est contenu dans un élément parent li>. Nous savons désormais que les éléments li> sont utilisés à la fois pour le tableau de contenu de la page et pour nos véritables composants de lien, d'après l'arborescence DOM.

Comme nous ne voulons pas réellement de la table de contenu, vous devez vous assurer que ces éléments li> sont filtrés. Heureusement, ils ont des classes HTML distinctes, ce qui nous permet d'omettre facilement tout élément li> avec des classes de section dans le code.

Passons maintenant au codage ! Nous allons commencer par inclure la méthode ParseHtml dans notre classe de contrôleur ().

Ici, nous créons d'abord une instance HtmlDocument, puis nous chargeons la page HTML que nous avons précédemment téléchargée via CallUrl (). Maintenant que nous disposons d'une représentation DOM valide de notre page, nous pouvons commencer à l'extraire.

  • Nous récupérons tous les descendants li> à l'aide de Descendants ()
  • Pour filtrer les éléments qui utilisent les classes HTML susmentionnées, nous utilisons LINQ (Where()).
  • Dans nos listes de chaînes wikiLink, nous parcourons (for each) nos liens et conservons leurs URL (relatives) sous forme d'URL relatives.

Nous renvoyons la liste de chaînes à notre appelant.

XPath

XPath

Nous n'aurions pas été obligés de sélectionner les éléments individuellement, et il est important de le noter. Nous l'avons fait uniquement pour donner un bon exemple.

L'utilisation d'une requête XPath sera bien plus pratique dans les programmes réels. Cela permettrait de résumer l'ensemble de notre processus de sélection en une seule phrase.

Comme dans notre procédure classique, cela sélectionnera tous les éléments (//) li> qui ne possèdent pas la classe spécifiée (not(contains())).

Création d'un fichier pour l'exportation des données extraites

Création d'un fichier pour l'exportation des données extraites

Le texte du tableau HTML a été téléchargé depuis Wikipédia, analysé et transformé en un arbre DOM, et tous les liens nécessaires ont été extraits avec succès. Nous disposons donc désormais d'une liste générale des hyperliens de la page.

Ces liens doivent maintenant être exportés au format CSV. Pour écrire les informations de cette liste générale dans un fichier, nous allons créer une nouvelle méthode appelée WriteToCsv(). La procédure complète est présentée dans le code ci-dessous. 

Elle crée un fichier sur le disque dur local nommé « links.csv » et y enregistre les hyperliens extraits. Écrivez donc les données dans un fichier sur un disque local en utilisant les API natives du framework .NET

Conclusion

Conclusion

Avec des outils tels que WebScrapingAPI, il est très simple de créer un projet de crawler et de collecter rapidement les informations requises. C# et .NET, en général, contiennent toutes les ressources et bibliothèques nécessaires pour vous permettre de mettre en œuvre votre propre outil de scraping de données.

Les différentes méthodes pour éviter d'être bloqué ou de voir votre débit réduit par le serveur constituent un sujet que nous n'avons abordé que brièvement. En général, ce sont les obstacles non techniques qui entravent le web scraping.

Si vous préférez vous concentrer sur vos données plutôt que de gérer les user agents, les restrictions de débit, les proxys et les difficultés liées à JavaScript, découvrez les fonctionnalités de pointe de WebScrapingAPI. 

À propos de l'auteur
Sorin-Gabriel Marica, Développeur full-stack @ WebScrapingAPI
Sorin-Gabriel MaricaDéveloppeur full-stack

Sorin Marica est ingénieur Full Stack et DevOps chez WebScrapingAPI ; il développe des fonctionnalités pour les produits et assure la maintenance de l'infrastructure qui garantit le bon fonctionnement de la plateforme.

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.