Extraire des données d'un site de vente en ligne en C

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

Apprenez à gratter des catégories de produits et des articles à partir de sites Web d'achat en utilisant C# avec le framework WebScraper, en extrayant des données structurées à partir d'éléments HTML dans des modèles personnalisés. Ce guide complet vous accompagne dans la construction d'un scraper de commerce électronique robuste à l'aide de la bibliothèque IronWebScraper.

Quickstart : Scrape Shopping Website in C#

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;
    
    public class QuickShoppingScraper : WebScraper
    {
        public override void Init()
        {
            // Apply your license key
            License.LicenseKey = "YOUR-LICENSE-KEY";
    
            // Set the starting URL
            this.Request("https://shopping-site.com", Parse);
        }
    
        public override void Parse(Response response)
        {
            // Extract product data
            foreach (var product in response.Css(".product-item"))
            {
                var item = new
                {
                    Name = product.Css(".product-name").First().InnerText,
                    Price = product.Css(".price").First().InnerText,
                    Image = product.Css("img").First().Attributes["src"]
                };
    
                Scrape(item, "products.jsonl");
            }
        }
    }
    
    // Run the scraper
    var scraper = new QuickShoppingScraper();
    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
  1. Créez un nouveau projet Console App nommé "ShoppingSiteSample"
  2. Ajoutez une classe nommée "ShoppingScraper" qui hérite de WebScraper
  3. Créer des modèles pour les données Category et Product
  4. Surchargez Init() pour définir l'URL de départ et la méthode Parse() pour le scraping
  5. Exécutez le scraper pour extraire les catégories et les produits dans des fichiers JSONL

Comment analyser la structure HTML d'un site d'achat?

Sélectionnez un site d'achat pour analyser la structure de son contenu. La compréhension de la structure HTML est essentielle à la réussite du web scraping. Avant d'écrire le moindre code, prenez le temps d'analyser la structure du site web cible à l'aide des outils de développement du navigateur.

Page d'accueil du site de commerce électronique de Jumia avec bannière promotionnelle du Ramadan et menu de navigation

Comme le montre l'image, la barre latérale gauche contient des liens vers les catégories de produits du site. La première étape consiste à étudier le code HTML du site et à planifier l'approche du scraping. Cette phase d'analyse est essentielle pour élaborer une stratégie de scraping efficace.

Menu de navigation d'un site de commerce électronique montrant les catégories de produits, les sous-catégories et les sections de marques

Pourquoi la compréhension de la structure HTML est-elle importante?

Les catégories du site de mode comportent des sous-catégories (Hommes, Femmes, Enfants). La compréhension de cette structure hiérarchique permet de concevoir des modèles de données et une logique de scraping appropriés. Lorsque l'on travaille avec des fonctions avancées de web scraping, une analyse HTML correcte devient encore plus critique.

<li class="menu-item" data-id="">
    <a href="https://domain.com/fashion-by-/" class="main-category">
        <i class="cat-icon osh-font-fashion"></i>
        <span class="nav-subTxt">FASHION </span>
        <i class="osh-font-light-arrow-left"></i><i class="osh-font-light-arrow-right"></i>
    </a>
    <div class="navLayerWrapper" style="width: 633px; display: none;">
        <div class="submenu">
            <div class="column">
                <div class="categories">
                    <a class="category" href="https://domain.com/fashion-by-/?sort=newest&amp;dir=desc&amp;viewType=gridView3">New Arrivals !</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/men-fashion/">Men</a>
                    <a class="subcategory" href="https://domain.com/mens-shoes/">Shoes</a>
                    <a class="subcategory" href="https://domain.com/mens-clothing/">Clothing</a>
                    <a class="subcategory" href="https://domain.com/mens-accessories/">Accessories</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/women-fashion/">Women</a>
                    <a class="subcategory" href="https://domain.com/womens-shoes/">Shoes</a>
                    <a class="subcategory" href="https://domain.com/womens-clothing/">Clothing</a>
                    <a class="subcategory" href="https://domain.com/womens-accessories/">Accessories</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/girls-boys-fashion/">Kids</a>
                    <a class="subcategory" href="https://domain.com/boys-fashion/">Boys</a>
                    <a class="subcategory" href="https://domain.com/girls/">Girls</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/maternity-clothes/">Maternity Clothes</a>
                </div>
            </div>
            <div class="column">
                <div class="categories">
                    <span class="category defaultCursor">Men Best Sellers</span>
                    <a class="subcategory" href="https://domain.com/mens-casual-shoes/">Casual Shoes</a>
                    <a class="subcategory" href="https://domain.com/mens-sneakers/">Sneakers</a>
                    <a class="subcategory" href="https://domain.com/mens-t-shirts/">T-shirts</a>
                    <a class="subcategory" href="https://domain.com/mens-polos/">Polos</a>
                </div>
                <div class="categories">
                    <span class="category defaultCursor">Women Best Sellers</span>
                    <a class="subcategory" href="https://domain.com/womens-sandals/">Sandals</a>
                    <a class="subcategory" href="https://domain.com/womens-sneakers/">Sneakers</a>
                    <a class="subcategory" href="https://domain.com/women-dresses/">Dresses</a>
                    <a class="subcategory" href="https://domain.com/women-tops/">Tops</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/womens-curvy-clothing/">Women's Curvy Clothing</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/fashion-bundles/v/">Fashion Bundles</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/hijab-fashion/">Hijab Fashion</a>
                </div>
            </div>
            <div class="column">
                <div class="categories">
                    <a class="category" href="https://domain.com/brands/fashion-by-/">SEE ALL BRANDS</a>
                    <a class="subcategory" href="https://domain.com/adidas/">Adidas</a>
                    <a class="subcategory" href="https://domain.com/converse/">Converse</a>
                    <a class="subcategory" href="https://domain.com/ravin/">Ravin</a>
                    <a class="subcategory" href="https://domain.com/dejavu/">Dejavu</a>
                    <a class="subcategory" href="https://domain.com/agu/">Agu</a>
                    <a class="subcategory" href="https://domain.com/activ/">Activ</a>
                    <a class="subcategory" href="https://domain.com/oxford--bellini--tie-house--milano/">Tie House</a>
                    <a class="subcategory" href="https://domain.com/shoe-room/">Shoe Room</a>
                    <a class="subcategory" href="https://domain.com/town-team/">Town Team</a>
                </div>
            </div>
        </div>
    </div>
</li>
<li class="menu-item" data-id="">
    <a href="https://domain.com/fashion-by-/" class="main-category">
        <i class="cat-icon osh-font-fashion"></i>
        <span class="nav-subTxt">FASHION </span>
        <i class="osh-font-light-arrow-left"></i><i class="osh-font-light-arrow-right"></i>
    </a>
    <div class="navLayerWrapper" style="width: 633px; display: none;">
        <div class="submenu">
            <div class="column">
                <div class="categories">
                    <a class="category" href="https://domain.com/fashion-by-/?sort=newest&amp;dir=desc&amp;viewType=gridView3">New Arrivals !</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/men-fashion/">Men</a>
                    <a class="subcategory" href="https://domain.com/mens-shoes/">Shoes</a>
                    <a class="subcategory" href="https://domain.com/mens-clothing/">Clothing</a>
                    <a class="subcategory" href="https://domain.com/mens-accessories/">Accessories</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/women-fashion/">Women</a>
                    <a class="subcategory" href="https://domain.com/womens-shoes/">Shoes</a>
                    <a class="subcategory" href="https://domain.com/womens-clothing/">Clothing</a>
                    <a class="subcategory" href="https://domain.com/womens-accessories/">Accessories</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/girls-boys-fashion/">Kids</a>
                    <a class="subcategory" href="https://domain.com/boys-fashion/">Boys</a>
                    <a class="subcategory" href="https://domain.com/girls/">Girls</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/maternity-clothes/">Maternity Clothes</a>
                </div>
            </div>
            <div class="column">
                <div class="categories">
                    <span class="category defaultCursor">Men Best Sellers</span>
                    <a class="subcategory" href="https://domain.com/mens-casual-shoes/">Casual Shoes</a>
                    <a class="subcategory" href="https://domain.com/mens-sneakers/">Sneakers</a>
                    <a class="subcategory" href="https://domain.com/mens-t-shirts/">T-shirts</a>
                    <a class="subcategory" href="https://domain.com/mens-polos/">Polos</a>
                </div>
                <div class="categories">
                    <span class="category defaultCursor">Women Best Sellers</span>
                    <a class="subcategory" href="https://domain.com/womens-sandals/">Sandals</a>
                    <a class="subcategory" href="https://domain.com/womens-sneakers/">Sneakers</a>
                    <a class="subcategory" href="https://domain.com/women-dresses/">Dresses</a>
                    <a class="subcategory" href="https://domain.com/women-tops/">Tops</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/womens-curvy-clothing/">Women's Curvy Clothing</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/fashion-bundles/v/">Fashion Bundles</a>
                </div>
                <div class="categories">
                    <a class="category" href="https://domain.com/hijab-fashion/">Hijab Fashion</a>
                </div>
            </div>
            <div class="column">
                <div class="categories">
                    <a class="category" href="https://domain.com/brands/fashion-by-/">SEE ALL BRANDS</a>
                    <a class="subcategory" href="https://domain.com/adidas/">Adidas</a>
                    <a class="subcategory" href="https://domain.com/converse/">Converse</a>
                    <a class="subcategory" href="https://domain.com/ravin/">Ravin</a>
                    <a class="subcategory" href="https://domain.com/dejavu/">Dejavu</a>
                    <a class="subcategory" href="https://domain.com/agu/">Agu</a>
                    <a class="subcategory" href="https://domain.com/activ/">Activ</a>
                    <a class="subcategory" href="https://domain.com/oxford--bellini--tie-house--milano/">Tie House</a>
                    <a class="subcategory" href="https://domain.com/shoe-room/">Shoe Room</a>
                    <a class="subcategory" href="https://domain.com/town-team/">Town Team</a>
                </div>
            </div>
        </div>
    </div>
</li>
HTML

Comment mettre en place le projet de récupération de données sur le web?

Mettez en place un projet en suivant les meilleures pratiques pour le web scraping C#.

  1. Créez une nouvelle application console ou ajoutez un nouveau dossier pour l'exemple nommé "ShoppingSiteSample"
  2. Ajoutez une nouvelle classe nommée "ShoppingScraper"
  3. Commencez par récupérer les catégories du site et leurs sous-catégories
  4. Installez IronWebScraper via le gestionnaire de paquets NuGet ou la console du gestionnaire de paquets :
Install-Package IronWebScraper
Install-Package IronWebScraper
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Quel modèle de données dois-je utiliser pour les catégories ? Créer un modèle de catégories qui représente correctement la structure hiérarchique découverte : ```csharp public class Category { /// /// Gets or sets the name. /// /// /// The name. /// public string Name { get; set; } /// /// Gets or sets the URL. /// /// /// The URL. /// public string URL { get; set; } /// /// Gets or sets the subcategories. /// /// /// The subcategories. /// public List SubCategories { get; set; } // Additional properties for enhanced data collection public int ProductCount { get; set; } public DateTime LastScraped { get; set; } public string CategoryType { get; set; } } ``` ## Comment construire la logique de base du scraper? Créez la logique du scraper, en n'oubliant pas de [appliquer votre clé de licence](https://ironsoftware.com/csharp/webscraper/get-started/license-keys/) avant d'exécuter le scraper : ```csharp public class ShoppingScraper : WebScraper { /// /// Initialize the web scraper, setting the start URLs and allowed/banned domains or URL patterns. /// public override void Init() { // Apply your license key - get one from https://ironsoftware.com/csharp/webscraper/licensing/ License.LicenseKey = "LicenseKey"; this.LoggingLevel = WebScraper.LogLevel.All; this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\"; // Configure request settings for better performance this.Request("www.webSite.com", Parse); } /// /// Parses the HTML document of the response to scrap the necessary data. /// /// The HTTP Response object to parse. public override void Parse(Response response) { var categoryList = new List(); // Iterate through each link in the menu and extract the category data. foreach (var Links in response.Css("#menuFixed > ul > li > a")) { var cat = new Category { URL = Links.Attributes["href"], Name = Links.InnerText, LastScraped = DateTime.Now }; categoryList.Add(cat); } // Save the scraped data into a JSONL file. Scrape(categoryList, "Shopping.jsonl"); } } ```

Quels sont les éléments ciblés dans le menu ? L'extraction des liens du menu nécessite des sélecteurs CSS précis. La [référence API](https://ironsoftware.com/csharp/webscraper/object-reference/api/) fournit des informations détaillées sur les méthodes de sélection disponibles :

Fichier JSON dans Notepad montrant la structure des catégories de commerce électronique avec des sous-catégories et des URL imbriquées

## Comment récupérer les catégories principales et les sous-catégories? Mettre à jour le code pour récupérer les catégories principales et tous les sous-liens. Cette approche garantit une saisie complète de la structure de navigation : ```csharp public override void Parse(Response response) { // List of Category Links (Root) var categoryList = new List(); // Traverse each 'li' under the fixed menu foreach (var li in response.Css("#menuFixed > ul > li")) { // List of Main Links foreach (var Links in li.Css("a")) { var cat = new Category { URL = Links.Attributes["href"], Name = Links.InnerText, SubCategories = new List(), LastScraped = DateTime.Now }; // List of Subcategories Links foreach (var subCategory in li.Css("a[class=subcategory]")) { var subcat = new Category { URL = subCategory.Attributes["href"], Name = subCategory.InnerText, CategoryType = "Subcategory" }; // Check if subcategory link already exists if (cat.SubCategories.Find(c => c.Name == subcat.Name && c.URL == subcat.URL) == null) { // Add sublinks cat.SubCategories.Add(subcat); } } // Update product count based on subcategories cat.ProductCount = cat.SubCategories.Count; // Add Main Category to the list categoryList.Add(cat); } } // Save the scraped data into a JSONL file. Scrape(categoryList, "Shopping.jsonl"); } ```

Comment extraire des informations sur les produits à partir des pages de catégories ? Les liens vers toutes les catégories du site étant disponibles, commencez à rechercher des produits dans chaque catégorie. Lorsqu'il s'agit de pages de produits, [thread safety](https://ironsoftware.com/csharp/webscraper/troubleshooting/thread-safety/) devient important pour des performances optimales. Naviguez vers n'importe quelle catégorie et examinez le contenu :

Page de liste de produits de commerce électronique montrant des chaussures et des accessoires avec des prix, des évaluations et des contrôles de filtrage

### À quoi ressemble la structure HTML du produit? Examinez la structure HTML pour comprendre l'organisation du produit : ```html
```

Quel modèle de produit dois-je créer ? Créez un modèle de produit pour ce contenu. Lorsque vous travaillez avec [shopping website scraping](https://ironsoftware.com/csharp/webscraper/how-to/scraping-from-a-shopping-website/), saisissez tous les détails pertinents sur les produits : ```csharp public class Product { /// /// Gets or sets the name. /// /// /// The name. /// public string Name { get; set; } /// /// Gets or sets the price. /// /// /// The price. /// public string Price { get; set; } /// /// Gets or sets the image. /// /// /// The image. /// public string Image { get; set; } // Additional properties for comprehensive data collection public string Brand { get; set; } public string OldPrice { get; set; } public string Discount { get; set; } public float Rating { get; set; } public int ReviewCount { get; set; } public List AvailableSizes { get; set; } public string ProductUrl { get; set; } public string SKU { get; set; } public DateTime ScrapedDate { get; set; } } ``` ### Comment ajouter une fonctionnalité de récupération de produits? Pour récupérer les pages de catégories, ajoutez une nouvelle méthode de récupération avec gestion des erreurs et validation des données : ```csharp public void ParseCategory(Response response) { // List of Products var productList = new List(); // Iterate through product links in the product section foreach (var Links in response.Css("section.products > div > a")) { try { var product = new Product { Name = Links.Css("h2.title > span.name").First().InnerText, Brand = Links.Css("h2.title > span.brand").FirstOrDefault()?.InnerText ?? "Unknown", Price = Links.Css("div.price-container > span.price-box > span.price > span[data-price]").First().InnerText, Image = Links.Css("div.image-wrapper.default-state > img").First().Attributes["src"], ProductUrl = Links.Attributes["href"], SKU = Links.ParentNode.Attributes["data-sku"], ScrapedDate = DateTime.Now }; // Extract old price if available var oldPriceElement = Links.Css("span.price.-old > span[data-price]").FirstOrDefault(); if (oldPriceElement != null) { product.OldPrice = oldPriceElement.InnerText; } // Extract discount percentage var discountElement = Links.Css("span.sale-flag-percent").FirstOrDefault(); if (discountElement != null) { product.Discount = discountElement.InnerText; } // Extract rating information var ratingWidth = Links.Css("div.stars").FirstOrDefault()?.Attributes["style"]; if (!string.IsNullOrEmpty(ratingWidth)) { var width = System.Text.RegularExpressions.Regex.Match(ratingWidth, @"(\d+)%").Groups[1].Value; if (int.TryParse(width, out int ratingPercent)) { product.Rating = ratingPercent / 20.0f; // Convert percentage to 5-star scale } } // Extract review count var reviewText = Links.Css("div.total-ratings").FirstOrDefault()?.InnerText; if (!string.IsNullOrEmpty(reviewText)) { var reviewCount = System.Text.RegularExpressions.Regex.Match(reviewText, @"\d+").Value; if (int.TryParse(reviewCount, out int count)) { product.ReviewCount = count; } } // Extract available sizes product.AvailableSizes = Links.Css("div.list.-sizes > span.sku-size") .Select(s => s.InnerText) .ToList(); productList.Add(product); } catch (Exception ex) { // Log error and continue with next product Console.WriteLine($"Error parsing product: {ex.Message}"); } } // Save the scraped product data into a JSONL file. Scrape(productList, "Products.jsonl"); // Handle pagination if needed var nextPageLink = response.Css("a.pagination-next").FirstOrDefault(); if (nextPageLink != null) { var nextPageUrl = nextPageLink.Attributes["href"]; this.Request(nextPageUrl, ParseCategory); } } ``` Cette approche globale du scraping de sites web d'achat garantit la capture de toutes les informations pertinentes sur les produits, tout en gérant les erreurs de manière élégante. Pour des scénarios plus avancés, explorez les [fonctions avancées de web scraping](https://ironsoftware.com/csharp/webscraper/tutorials/webscraping-in-c-sharp-advanced/) disponibles dans `IronWebScraper`.

Questions Fréquemment Posées

Comment extraire des données sur les produits à partir de sites web d'achat en C# ?

IronWebScraper facilite l'extraction de données sur les produits à partir de sites web d'achat en utilisant des sélecteurs CSS. Vous pouvez créer une classe WebScraper, surcharger la méthode Parse et utiliser response.Css() pour cibler des éléments HTML spécifiques tels que les noms de produits, les prix et les images. Les données extraites peuvent être enregistrées dans différents formats, notamment les fichiers JSON et JSONL.

Quelles sont les étapes de base pour créer un scraper de site d'achat ?

Pour créer un scraper de site d'achat avec IronWebScraper : 1) Créez un projet Console App, 2) Ajoutez une classe qui hérite de WebScraper, 3) Créez des modèles de données pour les catégories et les produits, 4) Surchargez la méthode Init() pour définir votre URL de départ, 5) Surchargez la méthode Parse() pour extraire les données à l'aide de sélecteurs CSS, et 6) Exécutez le scraper pour enregistrer les données dans le format de votre choix.

Comment puis-je gérer les structures de catégories hiérarchiques lorsque je récupère des sites de commerce électronique ?

IronWebScraper vous permet de gérer des structures hiérarchiques en créant des modèles de données appropriés qui reflètent les relations parent-enfant (comme Fashion > Men > Shoes). Vous pouvez naviguer dans des éléments HTML imbriqués à l'aide de sélecteurs CSS et construire l'arborescence de vos catégories de manière programmatique, ce qui est particulièrement utile lorsque vous travaillez avec les fonctionnalités avancées d'IronWebscraper.

Quelle est la meilleure façon d'analyser la structure HTML d'un site d'achat avant le scraping ?

Avant d'utiliser IronWebscraper pour récupérer un site d'achat, utilisez les outils de développement du navigateur pour inspecter la structure HTML. Recherchez des modèles cohérents dans les classes CSS et les hiérarchies d'éléments. Cette analyse vous aide à identifier les sélecteurs CSS corrects à utiliser dans votre méthode IronWebScraper Parse() pour cibler avec précision les informations sur les produits, les catégories et d'autres éléments de données.

Puis-je extraire les listes de produits et la navigation par catégorie d'une même page ?

Oui, IronWebscraper vous permet d'extraire plusieurs types de données d'une même page. Dans votre méthode Parse(), vous pouvez utiliser différents sélecteurs CSS pour cibler simultanément les liens de catégorie (comme '.category-item') et les listes de produits (comme '.product-item'), puis les enregistrer dans des fichiers de sortie ou des structures de données distincts.

Comment enregistrer les données de produits récupérées dans un fichier ?

IronWebscraper fournit une méthode intégrée Scrape() qui enregistre automatiquement les données extraites. Il suffit de transmettre votre objet de données et le nom du fichier à Scrape(item, "products.jsonl"). La bibliothèque prend en charge différents formats de sortie, notamment JSON, JSONL et CSV, ce qui facilite l'exportation des données de commerce électronique extraites en vue d'un traitement ultérieur.

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