Bases de html_element() et html_text()
Extrayez le texte, les attributs et les données de tableaux depuis des pages récupérées.
Bases de html_element() et html_text() est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.
read_html() : charger une page
read_html() est le point d’entrée de rvest. Transmettez-lui une URL ou une chaîne HTML brute. La fonction renvoie un objet xml_document représentant l’arbre DOM analysé, prêt à être interrogé.
library(rvest)
# From a URL (requires internet connection)
# page <- read_html('https://books.toscrape.com')
# From a raw HTML string (great for testing)
page <- read_html('
<html><body>
<h1>Book Store</h1>
<p class="desc">Over 1000 books!</p>
</body></html>
')
class(page) # 'xml_document' 'xml_node'html_element() ou html_elements()
html_element() renvoie le premier nœud correspondant (ou NA si aucun n’est trouvé). html_elements() renvoie tous les nœuds correspondants sous forme de liste. Utilisez la forme singulière lorsque vous attendez exactement un résultat, et la forme plurielle pour extraire des listes.
library(rvest)
page <- read_html('
<ul>
<li class="item">Apple</li>
<li class="item">Banana</li>
<li class="item">Cherry</li>
</ul>
')
# Singular: gets first match
first_item <- html_element(page, '.item')
html_text2(first_item) # 'Apple'
# Plural: gets all matches
all_items <- html_elements(page, '.item')
html_text2(all_items) # c('Apple', 'Banana', 'Cherry')
length(all_items) # 3html_text2() pour obtenir du texte propre
html_text2() extrait le contenu textuel des nœuds, supprime les balises HTML et réduit proprement les espaces. La fonction traite <br> comme des retours à la ligne. L’ancienne fonction html_text() gère moins bien les espaces.
library(rvest)
page <- read_html('
<div class="product">
<h2> Laptop </h2>
<p>Price: <strong>$999</strong></p>
<p> Free shipping </p>
</div>
')
# html_text2 trims whitespace intelligently
title <- html_element(page, 'h2')
html_text2(title) # 'Laptop' (no extra spaces)
# From the whole div - collapses nested text
div <- html_element(page, '.product')
html_text2(div) # 'Laptop\nPrice: $999\nFree shipping'html_attr() : extraire les attributs
html_attr(node, 'attr_name') extrait la valeur d’un attribut HTML. C’est indispensable pour récupérer href dans les liens, src dans les images, les attributs data-*, et bien plus encore.
library(rvest)
page <- read_html('
<div>
<a href="https://example.com" title="Example site">Visit</a>
<img src="/images/photo.jpg" alt="A photo">
<div data-price="29.99">Product</div>
</div>
')
# Extract href from link
link <- html_element(page, 'a')
html_attr(link, 'href') # 'https://example.com'
html_attr(link, 'title') # 'Example site'
# Extract src from image
img <- html_element(page, 'img')
html_attr(img, 'src') # '/images/photo.jpg'
# Extract data attributes
div <- html_element(page, 'div[data-price]')
html_attr(div, 'data-price') # '29.99'html_attrs() : tous les attributs
html_attrs(node) renvoie un vecteur de chaînes nommé contenant TOUS les attributs d’un nœud. C’est utile lorsque vous ne connaissez pas à l’avance les noms des attributs ou que vous souhaitez examiner ceux qui sont disponibles sur un élément.
library(rvest)
page <- read_html('
<a href="/page" class="nav-link" id="home" data-section="main">Home</a>
')
link <- html_element(page, 'a')
# Get all attributes at once
attrs <- html_attrs(link)
attrs
# href class id data-section
# '/page' 'nav-link' 'home' 'main'
# Access by name
attrs['href'] # '/page'
attrs['class'] # 'nav-link'
names(attrs) # all attribute nameshtml_children() : nœuds enfants
html_children(node) renvoie les nœuds enfants immédiats d’un élément. Combinée à html_name() pour obtenir les noms des balises, cette fonction est utile pour comprendre la structure d’une page par programmation.
library(rvest)
page <- read_html('
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
<span>|</span>
<a href="/contact">Contact</a>
</nav>
')
nav <- html_element(page, 'nav')
# Get all direct children
kids <- html_children(nav)
length(kids) # 4
# Get tag names of children
html_name(kids) # c('a', 'a', 'span', 'a')
# Filter to only anchor children
links <- kids[html_name(kids) == 'a']
html_text2(links) # c('Home', 'About', 'Contact')html_name() : noms des balises
html_name(node) renvoie le nom de la balise d’un nœud sous forme de chaîne en minuscules (par exemple : 'div', 'p', 'a'). Cette fonction est utile pour filtrer les listes de nœuds selon le type d’élément après leur récupération.
library(rvest)
page <- read_html('
<article>
<h2>Title</h2>
<p>First paragraph.</p>
<img src="img.jpg">
<p>Second paragraph.</p>
</article>
')
article <- html_element(page, 'article')
all_children <- html_children(article)
# Check tag name of each child
html_name(all_children)
# c('h2', 'p', 'img', 'p')
# Get only paragraph children
paras <- all_children[html_name(all_children) == 'p']
html_text2(paras)
# c('First paragraph.', 'Second paragraph.')Chaîner les sélections
Vous pouvez transmettre un nœud (et pas uniquement le document) comme premier argument à html_element(). La recherche est ainsi limitée à ce nœud, ce qui est essentiel pour extraire des structures répétées comme des fiches produit ou des lignes de tableau.
library(rvest)
page <- read_html('
<div class="card">
<h3>Laptop</h3>
<span class="price">$999</span>
</div>
<div class="card">
<h3>Phone</h3>
<span class="price">$499</span>
</div>
')
# Get all cards, then extract fields from each
cards <- html_elements(page, '.card')
names_list <- html_text2(html_elements(page, '.card h3'))
prices_list <- html_text2(html_elements(page, '.card .price'))
data.frame(name = names_list, price = prices_list)html_attr sur un NodeSet
Lorsqu’elle est appelée sur un ensemble de nœuds (résultat de html_elements()), html_attr() renvoie un vecteur de valeurs d’attributs, une par nœud. Les attributs absents renvoient NA.
library(rvest)
page <- read_html('
<ul>
<li><a href="/page1">Page 1</a></li>
<li><a href="/page2">Page 2</a></li>
<li><span>No link</span></li>
<li><a href="/page3">Page 3</a></li>
</ul>
')
# Get all a elements
links <- html_elements(page, 'a')
# html_attr on a nodeset returns a vector
hrefs <- html_attr(links, 'href')
hrefs # c('/page1', '/page2', '/page3')
# Link text alongside hrefs
texts <- html_text2(links)
data.frame(text = texts, href = hrefs)Gérer les éléments absents
html_element() renvoie un nœud NA (et non NULL) lorsqu’aucun élément ne correspond. Appliquée à un nœud NA, html_text2() renvoie NA_character_. Vérifiez toujours la présence de NA dans vos résultats lorsque certains éléments peuvent être facultatifs.
library(rvest)
page <- read_html('
<div class="product">
<h3>Widget</h3>
<!-- No price tag here -->
</div>
')
# Element exists
title <- html_element(page, 'h3')
html_text2(title) # 'Widget'
# Element does NOT exist -> NA node
price <- html_element(page, '.price')
html_text2(price) # NA
is.na(html_text2(price)) # TRUE
# Safe extraction with default
price_text <- html_text2(price)
if (is.na(price_text)) price_text <- 'N/A'
price_text # 'N/A'Mettre en pratique
Combinez html_elements(), html_text2() et html_attr() pour extraire des données structurées dans un tableau de données — l’objectif habituel du moissonnage Web avec rvest.
library(rvest)
page <- read_html('
<div class="book">
<a href="/book/1" class="title">R Programming</a>
<span class="author">Hadley Wickham</span>
<span class="rating" data-stars="5">*****</span>
</div>
<div class="book">
<a href="/book/2" class="title">Advanced R</a>
<span class="author">Hadley Wickham</span>
<span class="rating" data-stars="5">*****</span>
</div>
')
titles <- html_text2(html_elements(page, '.title'))
authors <- html_text2(html_elements(page, '.author'))
links <- html_attr(html_elements(page, 'a.title'), 'href')
ratings <- html_attr(html_elements(page, '.rating'), 'data-stars')
data.frame(title=titles, author=authors, link=links, stars=ratings)Vérification rapide
Évaluez vos connaissances des fonctions principales de rvest pour parcourir des documents HTML.
Récapitulatif : fonctions principales de rvest
À retenir : read_html() charge les pages ; html_element() récupère la première correspondance ; html_elements() récupère toutes les correspondances. Extrayez le texte avec html_text2(), les attributs avec html_attr(), les nœuds enfants avec html_children() et les noms de balises avec html_name(). Les éléments absents renvoient des nœuds NA : gérez toujours NA dans les extracteurs utilisés en production.
library(rvest)
# Core rvest workflow:
# 1. Load page
# page <- read_html(url)
# 2. Find elements
# node <- html_element(page, 'css-selector')
# nodes <- html_elements(page, 'css-selector')
# 3. Extract content
# html_text2(node) -> text content
# html_attr(node, 'href') -> attribute value
# html_attrs(node) -> all attributes
# html_name(node) -> tag name
# html_children(node) -> child nodes
# 4. Build data frame
# data.frame(title = html_text2(...), link = html_attr(...))
cat('rvest follows the tidy data philosophy')Questions Fréquemment Posées
La leçon « Bases de html_element() et html_text() » est-elle gratuite ?
Oui — le texte complet de « Bases de html_element() et html_text() » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Bases de html_element() et html_text() » ?
Extrayez le texte, les attributs et les données de tableaux depuis des pages récupérées. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer R Academy ?
Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Bases de html_element() et html_text() » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon R Academy ?
Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Structure HTML et sélecteurs CSS
- Bases de html_element() et html_text()
- Extraire des tableaux et des liens
- Gérer la pagination et plusieurs pages