Retour au blog
Les techniques de web scraping
Suciu Dan26 avril 202313 minutes de lecture

Le web scraping en toute simplicité : l'importance de l'analyse des données

Le web scraping en toute simplicité : l'importance de l'analyse des données

Créer un analyseur de données

Un bon analyseur de données peut extraire des informations pertinentes d'un document HTML en se basant sur des règles prédéfinies, quel que soit le type d'analyseur utilisé. Le processus d'analyse se compose de deux étapes principales : l'analyse lexicale et l'analyse syntaxique.

L'analyse lexicale consiste à analyser les mots et les symboles individuels d'un document et à les décomposer en éléments plus petits et plus faciles à gérer.

Cela implique la tokenisation, qui consiste à décomposer un document en tokens individuels, tels que des mots-clés, des symboles et des chiffres.

Examinons ce document HTML simple :

<html>

  <head>

	<title>Scraping</title>

  </head>

  <body>

	<h1>Welcome to my scraping page</h1>

	<p>This is a paragraph.</p>

	<ul>

  	<li>First Scraping Item</li>

  	<li>Second Scraping Item</li>

	</ul>

  </body>

</html>

Le processus d'analyse lexicale tokeniserait ce document en éléments individuels tels que :

  • `<html>`
  • `<head>`
  • `<title>`
  • `Scraping`
  • `</title>`
  • `<body>`
  • `<h1>`
  • `Bienvenue sur ma page de scraping`
  • `</h1>`
  • [...]
  • `</body>`
  • `</html>`

De cette manière, chaque élément du document HTML est décomposé en tokens plus petits et plus faciles à gérer, qui peuvent ensuite être analysés et traités.

L'analyse syntaxique consiste à analyser la structure d'un document et à déterminer les relations entre les différents tokens. Cela implique d'identifier des modèles et des structures dans les données, puis d'utiliser ces informations pour créer une structure arborescente appelée « arbre de parse ».

Par exemple, la balise <html> est l'élément racine et contient les éléments <head> et <body>. À l'intérieur de l'élément <head>, il y a un élément <title>, et à l'intérieur de l'élément <body>, il y a les éléments <h1>, <p> et <a>.

En identifiant ces éléments et leurs relations, vous pouvez construire un arbre d'analyse, avec l'élément <html> comme racine, <head> et <body> comme ses enfants, et ainsi de suite.

Vous pouvez utiliser l'arbre d'analyse pour extraire des données spécifiques du document HTML, telles que le texte contenu dans l'élément <title> ou l'attribut href de l'élément <a>.

Meilleures bibliothèques d&#x27;analyse HTML

Dans cette section, nous allons explorer certaines des bibliothèques d'analyse HTML les plus populaires disponibles pour différents langages de programmation. Ces bibliothèques facilitent l'extraction de données structurées à partir d'un document HTML et peuvent constituer un excellent point de départ pour votre projet de web scraping.

De Scrapy et BeautifulSoup pour Python à Cheerio pour NodeJS et JSoup pour Java, nous examinerons chaque bibliothèque et fournirons des exemples d'utilisation.

Que vous soyez débutant ou développeur expérimenté, cette section vous permettra d'acquérir une solide compréhension des options qui s'offrent à vous lorsque vous travaillez avec des données HTML.

C'est parti !

Cheerio

Cheerio est une bibliothèque JavaScript qui permet aux développeurs d'analyser, de manipuler et de naviguer dans le DOM d'un document HTML ou XML, à l'instar de jQuery. Cet article aborde Cheerio de manière beaucoup plus détaillée et présente différents cas d'utilisation.

Voici une implémentation simple de Cheerio :

const cheerio = require('cheerio');

const $ = cheerio.load('<h2 class="title">Hello, World!</h2>');

console.log($('h2').text())

L'exécution de ce code renverra le résultat suivant :

Hello, World!

Scrapy et BeautifulSoup

Scrapy et BeautifulSoup sont des bibliothèques de web scraping en Python.

Scrapy est un puissant framework de web scraping qui vous permet d'extraire des données structurées de sites web à l'aide de sélecteurs ou d'expressions XPath.

Voici un exemple basique de Scrapy :

import scrapy

class QuotesSpider(scrapy.Spider):

    name = "quotes"

    def start_requests(self):

        urls = [

            'https://quotes.toscrape.com/page/1/',

            'https://quotes.toscrape.com/page/2/',

        ]

        for url in urls:

            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):

        page = response.url.split("/")[-2]

        filename = f'quotes-{page}.html'

        with open(filename, 'wb') as f:

            f.write(response.body)

        self.log(f'Saved file {filename}')

Vous pouvez exécuter le code à l'aide de cette commande :

scrapy crawl quotes

BeautifulSoup est une bibliothèque qui vous permet d'analyser des documents HTML et XML et d'en extraire des données de la même manière qu'un navigateur web.

Voici une implémentation simple de BeautifulSoup :

from bs4 import BeautifulSoup

html_doc = """<html><head><title>Scraper</title></head>

<body>

<h1 class="title">Hello, World!</h1>

</body>"""

soup = BeautifulSoup(html_doc, 'html.parser')

print(soup.title.string)

Ces deux bibliothèques fournissent une API simple et pratique pour parcourir, rechercher et modifier le contenu des pages web, et sont parfaitement adaptées aux projets de web scraping.

JSoup

Si votre langage de programmation de prédilection est Java, JSoup est un analyseur de données qui fournit une API pratique pour extraire et manipuler des données, en tirant le meilleur parti des méthodes DOM, CSS et de type jQuery.

Cela vous permet d'analyser et de parcourir des documents HTML, ainsi que de modifier le contenu d'un document à l'aide d'une API simple et intuitive. Cette bibliothèque est parfaitement adaptée aux projets de web scraping, de web crawling et d'extraction de données.

Voici une implémentation simple de JSoup pour extraire le texte de la balise title :

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

public class JSoupExample {

	public static void main(String[] args) {

    	String html = "<html><head><title>Example Title</title></head>"

            	+ "<body>Hello, World!</body></html>";

    	Document doc = Jsoup.parse(html);

    	// Get the title of the document

    	String title = doc.title();

    	System.out.println("Title: " + title);

	}

}

Nokogiri

Nokogiri est une bibliothèque pour Ruby qui fournit une interface facile à utiliser pour analyser et rechercher des documents XML et HTML et prend en charge les sélecteurs XPath et CSS, ce qui la rend utile pour les tâches de web scraping et d'extraction de données.

Pour une analyse plus complète des bibliothèques de parsing de données dans l'écosystème Ruby, vous pouvez lire cet article.

Utilisez cette commande pour installer le gem nokogiri :

gem install nokogiri

L'exemple de code suivant est une implémentation simple de Nokogiri :

require "nokogiri"

html = "<!DOCTYPE html><html><head><title>Hello, World!</title></head><body>Hello, World!</body></html>"

parsed_data = Nokogiri::HTML.parse(html)

puts parsed_data.title

Expressions régulières

Les expressions régulières, également appelées regex, constituent un outil puissant pour la recherche de motifs dans des chaînes de caractères. Elles sont souvent utilisées pour des tâches de traitement de texte telles que la recherche, la validation et l'extraction d'informations à partir d'un document.

Vous pouvez utiliser les expressions régulières pour extraire des informations d'un document HTML en recherchant des motifs spécifiques, par exemple pour extraire des adresses e-mail ou des titres d'un document HTML.

Par exemple, pour extraire toutes les URL d'un document HTML, vous pouvez utiliser l'expression régulière suivante :

/https?:\/\/[\w\.-]+\.[a-z]+/gi

Cette expression correspondra à toute chaîne commençant par « http » ou « https », suivie d’un « : » et de deux barres obliques, puis de n’importe quelle combinaison de caractères alphabétiques, de points et de tirets, suivie d’un point et d’une ou plusieurs lettres minuscules. L’indicateur « gi » rend la recherche globale et insensible à la casse.

L'utilisation des expressions régulières peut s'avérer un peu délicate, car la syntaxe peut être complexe, et trouver le bon motif peut nécessiter quelques essais et erreurs. Il existe également des sites tels que Regex101 ou Rubular, qui peuvent vous aider à tester et à déboguer vos expressions régulières.

Si vous ne souhaitez pas utiliser les bibliothèques disponibles ou les expressions régulières, vous pouvez toujours créer votre propre analyseur.

Créer votre propre analyseur syntaxique peut être un excellent moyen d'approfondir votre compréhension des données sur lesquelles vous travaillez et peut également être une bonne option si vous avez des exigences spécifiques auxquelles les bibliothèques ou outils existants ne répondent pas.

Créer un analyseur

Construire votre propre analyseur syntaxique peut être une tâche difficile, mais aussi très enrichissante. Le processus de construction d'un analyseur syntaxique implique la création d'un ensemble de règles et d'instructions qui spécifient comment les données sont analysées et organisées.

Vous pouvez y parvenir en utilisant diverses techniques, telles que les expressions régulières, les machines à états et l'analyse descendante récursive.

Lors de la création d'un analyseur syntaxique, il est essentiel de bien comprendre la structure et le format des données afin de pouvoir concevoir un ensemble de règles et d'instructions adapté. Le choix d'un langage de programmation approprié est également un élément important à prendre en compte.

L'un des avantages de la création de votre propre analyseur syntaxique est que vous pouvez l'adapter aux données et au cas d'utilisation en question. Cela peut aboutir à un analyseur plus efficace et performant, par rapport à l'utilisation d'une bibliothèque ou d'un outil générique.

De plus, la création de votre propre analyseur peut également constituer une excellente expérience d'apprentissage, car elle vous permet d'acquérir une compréhension plus approfondie des concepts et techniques sous-jacents de l'analyse syntaxique des données.

La création d'un analyseur syntaxique à partir de zéro présente également des inconvénients :

  • Cela peut prendre beaucoup de temps et nécessiter un effort considérable pour la conception et la mise en œuvre, surtout si vous n'êtes pas familier avec les algorithmes d'analyse et les structures de données.
  • Il peut être difficile d'obtenir des performances équivalentes à celles des bibliothèques ou outils existants, qui ont été optimisés pour la performance.
  • Il peut être difficile de maintenir et de mettre à jour le parseur au fil du temps si le format ou la structure des données change.
  • Il peut être difficile de déboguer ou de détecter des erreurs dans votre code, surtout si vous n'êtes pas familier avec le processus d'analyse.
  • Il peut être sujet à des erreurs et des bugs, ce qui pourrait empêcher le parseur de fonctionner comme prévu.
  • Dans le cas d'un analyse syntaxique complexe, il pourrait être difficile de mettre en œuvre toutes les règles et tous les cas limites.
  • Il pourrait ne pas être aussi efficace que les bibliothèques et outils préexistants, car ceux-ci ont été optimisés et sont utilisés par de nombreuses personnes.

En résumé, la création d'un analyseur personnalisé à partir de zéro présente un certain nombre d'inconvénients, tels qu'un temps de développement important, des coûts de maintenance élevés et un risque élevé d'erreurs. Il est généralement recommandé d'utiliser des bibliothèques ou des outils existants, ou de recourir à des expressions régulières si celles-ci peuvent répondre aux exigences spécifiques de votre cas d'utilisation.

Métadonnées Schema.org

L'analyse des métadonnées Schema.org permet d'extraire des données structurées à partir de pages web en utilisant les normes de schémas web. La communauté derrière Schema.org gère ces normes et encourage l'utilisation de schémas pour les données structurées sur le web.

L'analyse des métadonnées Schema peut s'avérer utile pour diverses raisons, par exemple pour trouver des informations actualisées sur des événements, ou pour les chercheurs qui collectent des données à des fins d'étude. De plus, les sites web qui agrègent des données telles que des annonces immobilières, des offres d'emploi et des prévisions météorologiques peuvent également tirer profit de l'analyse des données Schema.

Il existe différents formats de schémas que vous pouvez utiliser, notamment JSON-LD, RDFa et Microdata.

JSON-LD (JavaScript Object Notation for Linked Data) est un format permettant d'encoder des données liées à l'aide de JSON. La conception de cette norme facilite la lecture et l'écriture par les humains, ainsi que l'analyse et la génération par les machines.

Voici à quoi ressemblerait JSON-LD pour une page web consacrée à un livre :

<script type="application/ld+json">

{

  "@context": "http://schema.org",

  "@type": "Book",

  "name": "The Adventures of Tom Sawyer",

  "author": "Mark Twain",

  "datePublished": "1876-12-01",

  "description": "The Adventures of Tom Sawyer is a novel about a young boy growing up along the Mississippi River in the mid-1800s. It is a classic of American literature and has been loved by generations of readers.",

  "publisher": "Penguin Books",

  "image": "https://www.example.com/images/tom_sawyer.jpg"

}

</script>

La recommandation du World Wide Web Consortium (W3C) est RDFa, ou Resource Description Framework in Attributes, utilisé pour intégrer des déclarations RDF dans du XML et du HTML.

Vous trouverez ci-dessous un exemple de RDFa dans une page HTML. Vous remarquerez comment les attributs de balise sont utilisés pour stocker les données supplémentaires.

<!DOCTYPE html>

<html>

  <head>

    <title>RDFa Example</title>

  </head>

  <body>

    <div about="http://example.com/books/the-great-gatsby" typeof="schema:Book">

      <h1 property="schema:name">The Great Gatsby</h1>

      <div property="schema:author" typeof="schema:Person">

        <span property="schema:name">F. Scott Fitzgerald</span>

      </div>

      <div property="schema:review" typeof="schema:Review">

        <span property="schema:author" typeof="schema:Person">

          <span property="schema:name">John Doe</span>

        </span>

        <span property="schema:reviewBody">

          A classic novel that explores themes of wealth, love, and the decline of the American Dream.

        </span>

        <span property="schema:ratingValue">4.5</span>

      </div>

    </div>

  </body>

</html>

Les microdonnées sont une spécification HTML du WHATWG qui sert à imbriquer des métadonnées dans le contenu existant des pages web et qui peut utiliser schema.org ou des vocabulaires personnalisés.

Voici un exemple de microdonnées en HTML :

<div itemscope itemtype="http://schema.org/Product">

  <span itemprop="name">Shiny new gadget</span>

  <img itemprop="image" src="shinygadget.jpg" alt="A shiny new gadget" />

  <div itemprop="offerDetails" itemscope itemtype="http://schema.org/Offer">

    <span itemprop="price">$19.99</span>

    <link itemprop="availability" href="http://schema.org/InStock" />

  </div>

</div>

Il existe de nombreux outils permettant d'analyser les schémas dans différentes langues, tels qu'Extruct de Zyte et la bibliothèque RDFLib, ce qui facilite l'extraction de données structurées à partir de pages web à l'aide des normes de schémas web.

Analyseurs premium

Jusqu'à présent, nous avons abordé les principes fondamentaux de l'analyse de données, y compris les concepts sous-jacents de l'analyse lexicale et syntaxique. Nous avons également examiné diverses bibliothèques open source pour l'analyse de données, l'utilisation d'expressions régulières, la création d'un analyseur de zéro et l'analyse de données à l'aide de schema.org.

Vous pouvez toujours vous fier à un analyseur Web tel que WebScrapingAPI, SERP API ou Amazon API. Ces analyseurs Web vous permettent d'extraire des données en temps réel sans avoir à vous soucier de la maintenance, du code ou de l'infrastructure.

L'utilisation d'un analyseur Web premium présente plusieurs avantages, notamment :

  • Fiabilité : les analyseurs Web sont généralement plus stables et fiables que les alternatives gratuites ou open source, qui peuvent être sujettes à des bugs et des erreurs.
  • Vitesse : les analyseurs Web sont optimisés pour la vitesse et les performances, ce qui vous permet d'extraire des données rapidement et efficacement.
  • Évolutivité : les analyseurs Web peuvent gérer de grands volumes de données et des niveaux de trafic élevés, ce qui les rend adaptés aux projets de scraping et d'extraction de données à grande échelle.
  • Fonctionnalités avancées : les parseurs Web intègrent souvent des fonctionnalités avancées, telles que la rotation d'adresses IP, l'usurpation d'agent utilisateur et la résolution de CAPTCHA, qui peuvent vous aider à contourner les mesures anti-scraping et à accéder à des sites Web bloqués.
  • Assistance et maintenance : les parseurs Web sont accompagnés d'un service client et de mises à jour logicielles régulières, vous garantissant ainsi l'accès aux dernières fonctionnalités et aux corrections de bogues.

Mais soyons honnêtes : les parseurs Web premium ne présentent pas que des avantages. Voici quelques inconvénients :

  • Coût : les parseurs Web premium peuvent avoir un coût plus élevé que les options open source
  • Personnalisation limitée : les fonctionnalités d'un parseur Web premium peuvent être plus limitées que si vous développiez votre propre parseur
  • Dépendance vis-à-vis du service : si le service est indisponible ou rencontre des problèmes, cela peut perturber votre capacité à analyser les données
  • Contrôle limité sur les données : avec un parseur Web premium, vous pouvez avoir moins de contrôle sur les données auxquelles vous pouvez accéder et que vous pouvez traiter
  • Dépendance vis-à-vis des sources de données du fournisseur : la qualité et la pertinence des données fournies par le parseur Web premium peuvent être limitées par les sources de données du fournisseur.

Conclusion

Cet article a présenté un aperçu complet de l'analyse de données, y compris le processus d'analyse, les différents types de bibliothèques d'analyse HTML et la manière d'utiliser les métadonnées schema.org pour améliorer le référencement naturel (SEO).

Nous avons également mis en évidence les avantages et les inconvénients de la création d'un parseur personnalisé, de l'utilisation d'expressions régulières et de l'utilisation d'outils existants.

L'un des principaux enseignements à retenir est que l'analyse de données est une étape cruciale du web scraping et de l'analyse de données, car elle vous permet d'extraire et d'organiser les informations de manière utile.

Pour vous aider à vous lancer, vous pouvez essayer notre API SERP, un outil de web scraping haut de gamme qui vous permet d'extraire facilement des données des moteurs de recherche. Si vous souhaitez l'essayer, n'hésitez pas à vous inscrire à notre essai gratuit de 14 jours.

À 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.