Dasar-Dasar html_element() dan html_text()
Ekstrak teks, atribut, dan data tabel dari halaman hasil scraping.
Dasar-Dasar html_element() dan html_text() adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
read_html(): Memuat Halaman
read_html() adalah titik awal untuk rvest. Masukkan URL atau string HTML mentah. Fungsi ini mengembalikan objek xml_document yang merepresentasikan pohon DOM yang telah diuraikan dan siap untuk dikueri.
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() vs html_elements()
html_element() mengembalikan node pertama yang cocok (atau NA jika tidak ditemukan). html_elements() mengembalikan semua node yang cocok sebagai daftar. Gunakan bentuk tunggal jika Anda mengharapkan tepat satu hasil, dan bentuk jamak saat mengambil daftar data.
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() untuk Teks Bersih
html_text2() mengekstrak konten teks dari node, menghapus tag HTML dan merapikan spasi berlebih. Fungsi ini menangani <br> sebagai baris baru. html_text() versi lama kurang baik dalam menangani spasi.
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(): Mengekstrak Atribut
html_attr(node, 'attr_name') mengekstrak nilai atribut HTML. Ini penting untuk memperoleh href dari tautan, src dari gambar, atribut data-*, dan lainnya.
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(): Semua Atribut
html_attrs(node) mengembalikan vektor karakter bernama yang berisi SEMUA atribut pada sebuah node. Ini berguna ketika Anda belum mengetahui nama atribut sebelumnya atau ingin memeriksa atribut yang tersedia pada suatu elemen.
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(): Node Anak
html_children(node) mengembalikan node anak langsung dari suatu elemen. Jika digabungkan dengan html_name() untuk mendapatkan nama tag, fungsi ini berguna untuk memahami struktur halaman secara terprogram.
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(): Nama Tag
html_name(node) mengembalikan nama tag sebuah node sebagai string huruf kecil (misalnya, 'div', 'p', 'a'). Ini berguna untuk memfilter daftar node berdasarkan jenis elemen setelah diambil.
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.')Merangkai Seleksi
Anda dapat memasukkan node (bukan hanya dokumen) sebagai argumen pertama ke html_element(). Dengan demikian, pencarian dibatasi pada node tersebut—hal yang sangat penting saat mengambil struktur berulang seperti kartu produk atau baris tabel.
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 pada NodeSet
Saat dipanggil pada kumpulan node (hasil dari html_elements()), html_attr() mengembalikan vektor nilai atribut—satu nilai untuk setiap node. Atribut yang tidak ada akan mengembalikan 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)Menangani Elemen yang Tidak Ada
html_element() mengembalikan node NA (bukan NULL) ketika tidak ada yang cocok. html_text2() pada node NA mengembalikan NA_character_. Selalu periksa NA pada hasil Anda jika elemen mungkin bersifat opsional.
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'Menggabungkan Semuanya
Gabungkan html_elements(), html_text2(), dan html_attr() untuk mengambil data terstruktur ke dalam kerangka data—tujuan umum pengambilan data web dengan 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)Pemeriksaan Singkat
Uji pengetahuan Anda tentang fungsi inti rvest untuk menavigasi dokumen HTML.
Ringkasan: Fungsi Inti rvest
Hal-hal penting: read_html() memuat halaman; html_element() mendapatkan kecocokan pertama; html_elements() mendapatkan semua kecocokan. Ekstrak teks dengan html_text2(), atribut dengan html_attr(), node anak dengan html_children(), dan nama tag dengan html_name(). Elemen yang tidak ada mengembalikan node NA—selalu tangani NA dalam pengambil data web untuk penggunaan produksi.
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')Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar html_element() dan html_text()” gratis?
Ya — teks lengkap “Dasar-Dasar html_element() dan html_text()” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar-Dasar html_element() dan html_text()”?
Ekstrak teks, atribut, dan data tabel dari halaman hasil scraping. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Dasar-Dasar html_element() dan html_text()” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Struktur HTML dan Pemilih CSS
- Dasar-Dasar html_element() dan html_text()
- Scraping Tabel dan Tautan
- Menangani Paginasi dan Banyak Halaman