---
title: "Scraping Web avec Scala et jsoup en 2026"
slug: web-scraping-with-scala
date: 2025-06-09T08:04:25+00:00
modified: 2025-11-04T08:49:35+00:00
permalink: https://brightdata.fr/blog/donnees-web/web-scraping-with-scala
type: blog
---

[ Blog ](https://brightdata.fr/blog "Blog") / [Données Web](https://brightdata.fr/blog/donnees-web)







 [Données Web](https://brightdata.fr/blog/donnees-web)

# Scraping Web avec Scala et jsoup en 2026

Découvrez des techniques efficaces pour extraire des données dynamiques de Pinterest à l’aide de Playwright et des API de scraper pour un scraping web rapide et évolutif.

 9 min de lecture





 [ ![Jacob Nulty](https://media.brightdata.fr/2024/12/Jacob-Nulty-50x50.jpg) ](https://brightdata.com/blog/authors/jake-nulty)

 [Jake Nulty

Technical Writer

 ](https://brightdata.com/blog/authors/jake-nulty)





 ![Web Scraping With Scala blog image](https://media.brightdata.fr/2025/02/Web-Scraping-With-Scala.svg)





Python et JavaScript dominent l’ensemble de l’industrie du scraping. Si vous avez besoin de performances ou de portabilité, Scala offre une alternative solide. Scala nous offre une base compilée, portable et fortement typée pour travailler.

Aujourd’hui, nous allons voir comment faire du scraping en utilisant Scala et [jsoup](/blog/savoir-faire/web-scraping-with-jsoup). Bien qu’il ne soit pas écrit aussi souvent que le [web scraping avec Python](/blog/savoir-faire/web-scraping-with-python), Scala fournit une base solide et des outils de scraping décents.

## <a></a>Pourquoi Scala ?

Il y a plusieurs raisons de choisir Scala plutôt que Python ou JavaScript.

- **Performance**: Scala est compilé dans la JVM (Java Virtual Machine). Les compilateurs traduisent notre code en bytecode exécutable par la machine. Il est donc intrinsèquement plus rapide que Python.
- **Typage statique**: Le contrôle de type offre une couche supplémentaire de sécurité. De nombreux bogues courants sont détectés avant même que le programme ne s’exécute.
- **Portabilité**: Scala est compilé en bytecode JVM (Java Virtual Machine). Le bytecode JVM peut être exécuté partout où Java est installé.
- **Entièrement compatible avec Java**: Vous pouvez utiliser des dépendances Java dans votre code Scala. Cela élargit considérablement l’écosystème dont vous disposez.

## <a></a>Pour commencer

Avant de commencer, vous devez vous assurer que Scala est installé. Vous trouverez ci-dessous des instructions pour Ubuntu, macOS et Windows.

Vous pouvez consulter la documentation complète sur l’installation [ici.](https://docs.scala-lang.org/getting-started/install-scala.html)

#### <a></a>Ubuntu

```none
curl -fL https://github.com/coursier/coursier/releases/latest/download/cs-x86_64-pc-linux.gz | gzip -d > cs && chmod +x cs && ./cs setup

```

#### <a></a>macOS

```none
brew install coursier && coursier setup

```

#### <a></a>Fenêtres

Télécharger le [programme d’installation de Scala pour Windows](https://github.com/coursier/coursier/releases/latest/download/cs-x86_64-pc-win32.zip).

## <a></a>Création d’un grattoir

Créez un nouveau dossier de projet et accédez-y à l’aide d’`un cédérom`.

```none
mkdir quote-scraper
cd quote-scraper

```

Initialiser un nouveau projet Scala. La commande convertit notre nouveau dossier en projet Scala et crée un fichier `build.sbt` pour contenir nos dépendances.

```none
sbt new scala/scala3.g8

```

Maintenant, ouvrez le `fichier build.sbt.` Vous devrez ajouter jsoup comme dépendance. Votre fichier de compilation complet devrait ressembler à ceci.

```none
val scala3Version = "3.6.3"

lazy val root = project
  .in(file("."))
  .settings(
    name := "quote-scraper",
    version := "0.1.0-SNAPSHOT",

    scalaVersion := scala3Version,

    libraryDependencies += "org.scalameta" %% "munit" % "1.0.0" % Test,

    libraryDependencies += "org.jsoup" % "jsoup" % "1.18.3"
  )

```

Ensuite, copiez et collez le code ci-dessous dans votre fichier `Main.scala.`

```none
import org.jsoup.Jsoup
import scala.jdk.CollectionConverters._

@main def QuotesScraper(): Unit =
  val url = "http://quotes.toscrape.com"

  try
    val document = Jsoup.connect(url).get()
    //find all objects on the page with the quote class
    val quotes = document.select(".quote")

    for quote <- quotes.asScala do
      //find the first object with the class "text" and return its text
      val text = quote.select(".text").text()
      //find the first object with the class "author" and return its text
      val author = quote.select(".author").text()
      println(s"Quote: $text")
      println(s"Author: $author")
      println("-" * 50)

  catch case e: Exception => println(s"Error: ${e.getMessage}")

```

### <a></a>Utilisation du grattoir

Pour lancer notre scraper, exécutez la commande suivante à partir de la racine du projet.

```none
sbt run

```

Vous devriez obtenir un résultat similaire à celui ci-dessous.

```none
Quote: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
Author: Albert Einstein
--------------------------------------------------
Quote: “It is our choices, Harry, that show what we truly are, far more than our abilities.”
Author: J.K. Rowling
--------------------------------------------------
Quote: “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
Author: Albert Einstein
--------------------------------------------------
Quote: “The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
Author: Jane Austen
--------------------------------------------------
Quote: “Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
Author: Marilyn Monroe
--------------------------------------------------
Quote: “Try not to become a man of success. Rather become a man of value.”
Author: Albert Einstein
--------------------------------------------------
Quote: “It is better to be hated for what you are than to be loved for what you are not.”
Author: André Gide
--------------------------------------------------
Quote: “I have not failed. I've just found 10,000 ways that won't work.”
Author: Thomas A. Edison
--------------------------------------------------
Quote: “A woman is like a tea bag; you never know how strong it is until it's in hot water.”
Author: Eleanor Roosevelt
--------------------------------------------------
Quote: “A day without sunshine is like, you know, night.”
Author: Steve Martin
--------------------------------------------------
[success] Total time: 6 s, completed Feb 18, 2026, 8:58:04 PM

```

## <a></a>Sélection avec jsoup

Pour trouver des éléments de page avec jsoup, nous utilisons la méthode `select()`. `select()` renvoie une liste de tous les éléments correspondant à notre sélecteur. Voyons comment cela fonctionne dans notre projet Quote Scraper.

Dans cette ligne, nous utilisons `document.select(".quote")` pour renvoyer tous les éléments de la page ayant la `classe` `quote`.

```none
val quotes = document.select(".quote")

```

Nous pourrions également écrire ces sélecteurs avec plus de structure : `element[attribute='some value'].` Cela nous permet d’appliquer des filtres plus puissants lors de la recherche d’objets sur la page.

La ligne ci-dessous renverrait toujours les mêmes objets de page, mais elle est beaucoup plus expressive.

```none
val quotes = document.select("div[class='quote']")

```

Examinons quelques autres exemples de `select()` dans notre code. Étant donné qu’il n’y a qu’un seul élément de `texte` et un seul `auteur` dans chaque citation, `select()` ne renvoie qu’un seul objet de texte et un seul auteur. Si notre élément de citation contenait plusieurs textes ou auteurs, il renverrait tous les textes et auteurs pour chaque citation.

```none
//find objects with the class "text" and return their text
val text = quote.select(".text").text()
//find objects with the class "author" and return their text
val author = quote.select(".author").text()

```

## <a></a>Extraction avec jsoup

Pour extraire des données avec jsoup, nous pouvons utiliser les méthodes suivantes :

- `text()`: Extrait le texte d’une liste d’éléments de la page. Lorsque vous récupérez des prix sur un site web, ils apparaissent sur la page sous forme de texte.
- `attr()`: Extrait un attribut spécifique d’un seul élément de la page. Il s’agit d’éléments de données situés dans les balises HTML. Cette méthode est couramment utilisée pour extraire des liens d’un site web.

### <a></a>texte()

Nous en avons vu des exemples avec notre premier scraper. `text()` renvoie le texte de tous les éléments sur lesquels il est appelé. Si l’exemple ci-dessous consistait à trouver deux auteurs, `text()` extrairait leurs deux textes et les combinerait en une seule chaîne.

```none
//find objects with the class "text" and return their text
val text = quote.select(".text").text()
//find objects with the class "author" and return their text
val author = quote.select(".author").text()

```

### <a></a>attr()

La méthode `attr()` se comporte différemment de `text()`. Cette méthode extrait un seul attribut d’un seul élément de la page.

```none
//find link elements with the class "tag" and extract the "href" from the first one
val firstTagLink = quote.select("a[class='tag']").attr("href")

```

Avec cette ligne ajoutée, notre résultat ressemble maintenant à ceci.

```none
Quote: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
Author: Albert Einstein
First Tag Link: /tag/change/page/1/
--------------------------------------------------
Quote: “It is our choices, Harry, that show what we truly are, far more than our abilities.”
Author: J.K. Rowling
First Tag Link: /tag/abilities/page/1/
--------------------------------------------------
Quote: “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
Author: Albert Einstein
First Tag Link: /tag/inspirational/page/1/
--------------------------------------------------
Quote: “The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
Author: Jane Austen
First Tag Link: /tag/aliteracy/page/1/
--------------------------------------------------
Quote: “Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
Author: Marilyn Monroe
First Tag Link: /tag/be-yourself/page/1/
--------------------------------------------------
Quote: “Try not to become a man of success. Rather become a man of value.”
Author: Albert Einstein
First Tag Link: /tag/adulthood/page/1/
--------------------------------------------------
Quote: “It is better to be hated for what you are than to be loved for what you are not.”
Author: André Gide
First Tag Link: /tag/life/page/1/
--------------------------------------------------
Quote: “I have not failed. I've just found 10,000 ways that won't work.”
Author: Thomas A. Edison
First Tag Link: /tag/edison/page/1/
--------------------------------------------------
Quote: “A woman is like a tea bag; you never know how strong it is until it's in hot water.”
Author: Eleanor Roosevelt
First Tag Link: /tag/misattributed-eleanor-roosevelt/page/1/
--------------------------------------------------
Quote: “A day without sunshine is like, you know, night.”
Author: Steve Martin
First Tag Link: /tag/humor/page/1/
--------------------------------------------------
[success] Total time: 3 s, completed Feb 18, 2026, 10:29:30 PM

```

## <a></a>Outils alternatifs de récupération de données sur le Web

- [Navigateur de récupération](/products/scraping-browser): Un navigateur à distance entièrement intégré avec des proxys que vous pouvez utiliser à partir de [Playwright et de Selenium](/blog/donnees-web/playwright-vs-selenium).
- [API de scraper Web](/products/web-scraper): Automatisez votre processus de scraping en appelant l’une de nos API. Lorsque vous appelez une API de scraper, nous scrapons un site et vous renvoyons les données.
- [Pas de Code Scraper](/products/web-scraper/no-code): Indiquez-nous le site que vous souhaitez récupérer et les données que vous voulez obtenir. Nous nous occupons du reste.
- [Jeux de données](/products/datasets): Nos ensembles de données sont peut-être les plus faciles à utiliser de toutes les méthodes d’extraction. Nous récupérons des centaines de sites et mettons nos bases de données à jour en permanence. Les jeux de données vous fournissent un ensemble de données propres, prêtes à être analysées.

## <a></a>Conclusion

Le scraping web est assez intuitif avec Scala. Vous avez appris à sélectionner des éléments de page et à extraire leurs données à l’aide de [jsoup](/blog/donnees-web/parse-html-with-jsoup). Si le scraping n’est pas votre truc, vous pouvez toujours utiliser l’un de nos outils automatisés pour guider le processus ou sauter complètement le processus de scraping grâce à nos jeux de données prêts à l’emploi.

Inscrivez-vous maintenant et commencez votre essai gratuit dès aujourd’hui !



Contacter ventesEssai gratuit![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 Table des matières







Dedicated Scraper APIs &amp; No-Code Scrapers

Over 1000 scrapers for all popular domains. Simplify your web scraping.

[See pricing](/pricing/web-scraper "See pricing")

Just want data? Skip scraping.

Hundreds of ready-to-use datasets from all popular domains.

[See pricing](/pricing/datasets "See pricing")







 [ ](https://news.ycombinator.com/submitlink?t=Scraping+Web+avec+Scala+et+jsoup+en+2026&u=https://brightdata.fr/blog/donnees-web/web-scraping-with-scala) [ ](https://www.linkedin.com/shareArticle?mini=true&title=Scraping+Web+avec+Scala+et+jsoup+en+2026&url=https://brightdata.fr/blog/donnees-web/web-scraping-with-scala) [ ](http://www.reddit.com/submit?title=Scraping+Web+avec+Scala+et+jsoup+en+2026&url=https://brightdata.fr/blog/donnees-web/web-scraping-with-scala)







##  Vous pourriez aussi être intéressé par

 [ ![OpenHuman with Bright Data](https://media.brightdata.fr/2026/09/OpenHuman-with-Bright-Data.png) ](https://brightdata.fr/blog/ai/openhuman-with-bright-data "Accès Web Prêt pour la Production dans OpenHuman via le CLI Bright Data")

 [AI



 ![Antonello Zanini](https://media.brightdata.fr/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Accès Web Prêt pour la Production dans OpenHuman via le CLI Bright Data

Intégrez le CLI Bright Data avec OpenHuman pour permettre un accès web prêt pour la production et la collecte de données pour les agents IA.



 09-Sep-2026

 14 min de lecture

 ](https://brightdata.fr/blog/ai/openhuman-with-bright-data)

 [ ![Multimodal Web Scraping with MiniMax](https://media.brightdata.fr/2026/09/Multimodal-Web-Scraping-with-MiniMax.png) ](https://brightdata.fr/blog/donnees-web/multimodal-web-scraping-with-minimax "Scraping Web Multimodal avec MiniMax")

 [Données Web



 ![Antonello Zanini](https://media.brightdata.fr/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Scraping Web Multimodal avec MiniMax

Associez Bright Data Web Unlocker avec la vision MiniMax M3 pour extraire des données structurées à partir d’images et de captures d’écran de pages web.



 09-Sep-2026

 5 min de lecture

 ](https://brightdata.fr/blog/donnees-web/multimodal-web-scraping-with-minimax)

 [ ![The 10 Best CLI Tools for Codex in 2026](https://media.brightdata.fr/2026/08/The-10-Best-CLI-Tools-for-Codex-in-2026.png) ](https://brightdata.fr/blog/ai/best-cli-tools-for-codex "Les 10 meilleurs outils CLI pour Codex en 2026 – Testés & Classés")

 [AI



 ![Daniel Shashko](https://media.brightdata.fr/2022/04/Daniel-Shashko-2-50x50.png)

Daniel Shashko

Web Data &amp; AI Expert





### Les 10 meilleurs outils CLI pour Codex en 2026 – Testés &amp; Classés

Les 10 outils CLI qui rendent Codex plus rapide et plus capable, en commençant par le Bright Data CLI pour un accès web réel depuis l’intérieur du sandbox.



 06-Sep-2026

 24 min de lecture

 ](https://brightdata.fr/blog/ai/best-cli-tools-for-codex)
