html_element() ve html_text() Temelleri
Kazınmış sayfalardan metinleri, öznitelikleri ve tablo verilerini çıkarın.
html_element() ve html_text() Temelleri, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
read_html(): Sayfa Yükleme
read_html(), rvest'in başlangıç noktasıdır. Bir URL veya ham HTML dizesi verin. İşlev, sorgulamaya hazır, ayrıştırılmış DOM ağacını temsil eden bir xml_document nesnesi döndürür.
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() ve html_elements() Karşılaştırması
html_element(), eşleşen ilk düğümü döndürür (hiçbiri bulunamazsa NA döndürür). html_elements(), eşleşen tüm düğümleri bir liste olarak döndürür. Tam olarak tek bir sonuç bekliyorsanız tekil biçimi, listeleri tarıyorsanız çoğul biçimi kullanın.
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) # 3Temiz Metin için html_text2()
html_text2(), düğümlerdeki metin içeriğini çıkarır; HTML etiketlerini kaldırır ve boşlukları düzenli biçimde birleştirir. <br> etiketlerini yeni satır olarak işler. Eski html_text() işlevi boşlukları işleme konusunda daha az gelişmiştir.
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(): Öznitelikleri Çıkarma
html_attr(node, 'attr_name'), bir HTML özniteliğinin değerini çıkarır. Bağlantılardaki href, görsellerdeki src, data-* öznitelikleri ve daha fazlasını elde etmek için gereklidir.
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(): Tüm Öznitelikler
html_attrs(node), bir düğümdeki TÜM öznitelikleri adlandırılmış bir karakter vektörü olarak döndürür. Öznitelik adlarını önceden bilmiyorsanız veya bir öğede hangi özniteliklerin bulunduğunu incelemek istiyorsanız kullanışlıdır.
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(): Alt Düğümler
html_children(node), bir öğenin doğrudan alt düğümlerini döndürür. Etiket adlarını almak için html_name() ile birlikte kullanıldığında sayfa yapısını program aracılığıyla anlamak için yararlıdır.
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(): Etiket Adları
html_name(node), bir düğümün etiket adını küçük harfli bir dize olarak döndürür (ör. 'div', 'p', 'a'). Alındıktan sonra düğüm listelerini öğe türüne göre filtrelemek için kullanışlıdır.
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.')Seçimleri Zincirleme
İlk bağımsız değişken olarak yalnızca belgeyi değil, bir düğümü de html_element() işlevine aktarabilirsiniz. Böylece arama o düğümün içiyle sınırlandırılır; bu, ürün kartları veya tablo satırları gibi tekrarlanan yapıları taramak için çok önemlidir.
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)Bir NodeSet Üzerinde html_attr
Bir nodeset (html_elements() işlevinin sonucu) üzerinde çağrıldığında html_attr(), her düğüm için bir tane olmak üzere öznitelik değerlerinden oluşan bir vektör döndürür. Eksik öznitelikler NA olarak döndürülür.
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)Eksik Öğeleri İşleme
Hiçbir eşleşme bulunmadığında html_element(), NULL yerine NA düğümü döndürür. NA düğümü üzerinde html_text2() çağrıldığında NA_character_ döndürülür. Öğeler isteğe bağlı olabileceğinden sonuçlarınızda her zaman NA denetimi yapın.
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'Hepsini Bir Araya Getirme
Yapılandırılmış verileri bir veri çerçevesine aktarmak için html_elements(), html_text2() ve html_attr() işlevlerini birleştirin. Bu, rvest ile web scraping işleminin tipik nihai amacıdır.
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)Hızlı Kontrol
HTML belgelerinde gezinmek için kullanılan temel rvest işlevleri hakkındaki bilginizi test edin.
Özet: Temel rvest İşlevleri
Temel çıkarımlar: read_html() sayfaları yükler; html_element() ilk eşleşmeyi, html_elements() ise tüm eşleşmeleri alır. Metni html_text2() ile, öznitelikleri html_attr() ile, alt düğümleri html_children() ile ve etiket adlarını html_name() ile çıkarın. Eksik öğeler NA düğümleri döndürür; üretim ortamındaki tarayıcılarda NA değerlerini her zaman işleyin.
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')Sıkça Sorulan Sorular
“html_element() ve html_text() Temelleri” dersi ücretsiz mi?
Evet — “html_element() ve html_text() Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“html_element() ve html_text() Temelleri” dersinde ne öğreneceğim?
Kazınmış sayfalardan metinleri, öznitelikleri ve tablo verilerini çıkarın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“html_element() ve html_text() Temelleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- HTML Yapısı ve CSS Seçicileri
- html_element() ve html_text() Temelleri
- Tabloları ve Bağlantıları Kazıma
- Sayfalandırmayı ve Birden Fazla Sayfayı İşleme