0Pricing
R Academy · Ders

Tabloları ve Bağlantıları Kazıma

HTML tablolarını veri çerçevelerine ayrıştırın ve bir sayfadaki tüm köprüleri toplayın.

Tabloları ve Bağlantıları Kazıma, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 3. 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.

Web Sayfalarındaki HTML Tabloları

HTML tabloları (<table>), zaten yapıya sahip oldukları için tarama açısından en elverişli hedeflerdir. rvest'in html_table() işlevi, başlıkları otomatik olarak işleyerek tabloları doğrudan R veri çerçevelerine dönüştürür.

library(rvest)
html <- read_html('
  <table>
    <thead><tr><th>Country</th><th>GDP</th><th>Pop</th></tr></thead>
    <tbody>
      <tr><td>USA</td><td>25T</td><td>330M</td></tr>
      <tr><td>China</td><td>18T</td><td>1400M</td></tr>
    </tbody>
  </table>
')
# html_table converts to data frame
tbl <- html_table(html_element(html, 'table'))
class(tbl)      # 'data.frame'
names(tbl)      # c('Country', 'GDP', 'Pop')
nrow(tbl)       # 2
print(tbl)

Tam Bir Sayfada html_table()

Bir sayfada birden fazla tablo olduğunda, tüm tabloları almak için html_elements() (çoğul) kullanın; ardından elde edilen düğüm kümesine html_table() uygulayarak veri çerçevelerinden oluşan bir liste döndürün. İhtiyacınız olanı dizinini kullanarak seçin.

library(rvest)
html <- read_html('
  <table id="t1"><tr><th>A</th></tr><tr><td>1</td></tr></table>
  <table id="t2"><tr><th>X</th><th>Y</th></tr>
    <tr><td>10</td><td>20</td></tr></table>
')
# Get ALL tables as a list of data frames
tables <- html_table(html_elements(html, 'table'))
length(tables)  # 2

# First table
tables[[1]]

# Second table
tables[[2]]

# Select a specific table by its id
table2 <- html_table(html_element(html, '#t2'))
print(table2)

Tablo Verilerini Temizleme

Web sitelerinden taranan tablolarda genellikle düzensiz başlıklar, birleştirilmiş hücreler veya fazladan boşluklar bulunur. Başlıklar için janitor::clean_names(), hücre değerlerini temizlemek için standart dplyr/stringr işlemlerini kullanın.

library(rvest)
html <- read_html('
  <table>
    <tr><th>Product Name</th><th>Price (USD)</th><th>In Stock?</th></tr>
    <tr><td>  Widget A  </td><td>$12.50</td><td>Yes</td></tr>
    <tr><td>Gadget B</td><td>$7.99</td><td>No</td></tr>
  </table>
')
df <- html_table(html_element(html, 'table'))

# Clean column names
names(df) <- c('product', 'price', 'in_stock')

# Strip whitespace and dollar signs
df$product  <- trimws(df$product)
df$price    <- as.numeric(gsub('[$]', '', df$price))
df$in_stock <- df$in_stock == 'Yes'
print(df)

Bir Sayfadaki Tüm Bağlantıları Tarama

Bağlantılar, href özniteliklerine sahip bağlantı (<a>) etiketleridir. Tüm bağlantıları almak için html_elements(page, 'a'), URL'ler için html_attr('href') ve bağlantı metni için html_text2() kullanın.

library(rvest)
html <- read_html('
  <div>
    <a href="/about">About Us</a>
    <a href="/products">Products</a>
    <a href="https://partner.com" rel="external">Partner</a>
    <a>No href link</a>
  </div>
')
# Get all anchor elements
anchors <- html_elements(html, 'a')

# Extract text and href
link_text <- html_text2(anchors)
link_href <- html_attr(anchors, 'href')

data.frame(text = link_text, href = link_href)
# Note: last row has NA href

Anlamlı Bağlantıları Filtreleme

Gerçek sayfalarda gezinme bağlantıları, alt bilgi bağlantıları ve dahili sabitleyiciler, gerçekten istediğiniz bağlantılarla karışık hâlde bulunur. NA değerlerini, sabitleyicileri (#) ve javascript: bağlantılarını kaldırarak; ardından yalnızca ilgili URL'leri tutmak için desen eşleştirmesi uygulayarak filtreleyin.

library(rvest)
html <- read_html('
  <div>
    <a href="/article/1">Article One</a>
    <a href="/article/2">Article Two</a>
    <a href="#top">Back to top</a>
    <a href="javascript:void(0)">JS link</a>
    <a href="/article/3">Article Three</a>
  </div>
')
anchors <- html_elements(html, 'a')
hrefs <- html_attr(anchors, 'href')
texts <- html_text2(anchors)

# Keep only article links
article_idx <- grepl('^/article/', hrefs) & !is.na(hrefs)
article_links <- data.frame(
  text = texts[article_idx],
  href = hrefs[article_idx]
)
print(article_links)

Göreli URL'lerden Mutlak URL'lere

Taranan href değerleri genellikle /page gibi göreli yollardır. Temel URL'yi başlarına ekleyerek bunları mutlak URL'lere dönüştürün. xml2::url_absolute() işlevi bunu doğru biçimde gerçekleştirir.

library(rvest)
base_url <- 'https://books.toscrape.com'

html <- read_html('
  <ul>
    <li><a href="/catalogue/book1">Book One</a></li>
    <li><a href="/catalogue/book2">Book Two</a></li>
    <li><a href="https://external.com/book">External</a></li>
  </ul>
')
hrefs <- html_attr(html_elements(html, 'a'), 'href')

# xml2::url_absolute resolves relative + keeps absolute
abs_urls <- xml2::url_absolute(hrefs, base = base_url)
abs_urls
# 'https://books.toscrape.com/catalogue/book1'
# 'https://books.toscrape.com/catalogue/book2'
# 'https://external.com/book'  <- kept as-is

Hedefli Bağlantı Tarama

Tüm bağlantıları tarayıp filtrelemek yerine yalnızca ihtiyacınız olan bağlantıları hedeflemek için belirli CSS seçicileri kullanın. Hassas sonuçlar için öğe bağlamını ve öznitelik seçicilerini birleştirin.

library(rvest)
html <- read_html('
  <nav class="breadcrumb">
    <a href="/">Home</a> > <a href="/books">Books</a>
  </nav>
  <ul class="products">
    <li><a href="/books/1" class="prod-link">Clean Code</a></li>
    <li><a href="/books/2" class="prod-link">Refactoring</a></li>
  </ul>
  <footer>
    <a href="/privacy">Privacy</a>
  </footer>
')
# Target ONLY product links (not nav or footer)
prod_links <- html_elements(html, 'ul.products a.prod-link')
data.frame(
  title = html_text2(prod_links),
  url   = html_attr(prod_links, 'href')
)

Tablo ve Bağlantı Verilerini Birleştirme

Çoğu zaman bir tablonun hücrelerinde bağlantılar bulunur. Daha zengin bir veri çerçevesi oluşturmak için metin değerlerinde html_table() işlevini, gömülü bağlantılarda ise hedefli html_attr() işlevini kullanın.

library(rvest)
html <- read_html('
  <table class="results">
    <tr><th>Book</th><th>Author</th></tr>
    <tr>
      <td><a href="/b/1">Clean Code</a></td>
      <td>Robert Martin</td>
    </tr>
    <tr>
      <td><a href="/b/2">Refactoring</a></td>
      <td>Martin Fowler</td>
    </tr>
  </table>
')
# Get text from table
df <- html_table(html_element(html, 'table'))

# Get links embedded in first column
links <- html_attr(html_elements(html, 'table td a'), 'href')
df$url <- links
print(df)

html_table() fill Parametresi

HTML tablolarında bazen eksik hücreler veya düzensiz yapılandırılmış satırlar bulunur. html_table() içindeki fill=TRUE parametresi, hata vermek yerine eksik değerleri NA ile doldurur.

library(rvest)
html <- read_html('
  <table>
    <tr><th>Name</th><th>Score</th><th>Grade</th></tr>
    <tr><td>Alice</td><td>95</td><td>A</td></tr>
    <tr><td>Bob</td><td>80</td></tr>
  </table>
')
# Without fill=TRUE this may error on uneven rows
df <- html_table(html_element(html, 'table'), fill = TRUE)
print(df)
# Name  Score Grade
# Alice    95     A
# Bob      80  <NA>

# fill=TRUE is safe even when rows are uniform
is.na(df[2, 'Grade'])  # TRUE

Görsel Kaynaklarını Çıkarma

Görsellerde src öznitelikleri, bazen de tembel yükleme için data-src kullanılır. Aynı html_attr() yaklaşımı, indirmek veya kataloglamak üzere görsel URL'lerini çıkarır.

library(rvest)
html <- read_html('
  <div class="gallery">
    <img src="/img/photo1.jpg" alt="Sunset">
    <img src="/img/photo2.jpg" alt="Mountains">
    <img data-src="/img/lazy.jpg" class="lazy" alt="Lake">
  </div>
')
# Regular images
images <- html_elements(html, 'img')
srcs  <- html_attr(images, 'src')
alts  <- html_attr(images, 'alt')

data.frame(alt = alts, src = srcs)
# For lazy-loaded images check data-src
lazy_src <- html_attr(html_element(html, '.lazy'), 'data-src')
lazy_src  # '/img/lazy.jpg'

Taranan Verileri Kaydetme

Tabloları ve bağlantıları bir veri çerçevesine aktardıktan sonra sonuçları write.csv() veya readr::write_csv() ile kaydedin. Veri kökenini belgelemek için her zaman bir zaman damgası veya kaynak URL'si ekleyin.

library(rvest)
html <- read_html('
  <table>
    <tr><th>Product</th><th>Price</th></tr>
    <tr><td>Widget</td><td>9.99</td></tr>
    <tr><td>Gadget</td><td>14.50</td></tr>
  </table>
')
df <- html_table(html_element(html, 'table'))

# Add metadata
df$scraped_at <- Sys.time()
df$source_url <- 'https://example.com/products'

# Save to CSV
# write.csv(df, 'products.csv', row.names = FALSE)
print(df)
cat('Data ready for analysis or storage')

Hızlı Kontrol

rvest ile HTML tablolarını ve bağlantılarını tarama konusundaki anlayışınızı test edin.

Özet: Tablolar ve Bağlantılar

Temel çıkarımlar: html_table(), HTML tablolarını otomatik olarak veri çerçevelerine dönüştürür; düzensiz tablolar için fill=TRUE kullanın. Bağlantılar için tüm bağlantıları html_elements('a') ile, metni html_text2() ile ve URL'leri html_attr('href') ile alın. Göreli URL'leri xml2::url_absolute() ile mutlak URL'lere dönüştürün. İstenmeyen bağlantıları desene göre filtreleyin. Daha zengin veri kümeleri için tablo metnini ve gömülü bağlantı URL'lerini birleştirin.

library(rvest)
# Table scraping pattern:
# tables <- html_table(html_elements(page, 'table'))
# df <- tables[[1]]

# Link scraping pattern:
# links <- html_elements(page, 'a[href]')
# data.frame(
#   text = html_text2(links),
#   url  = xml2::url_absolute(
#            html_attr(links, 'href'),
#            base = base_url
#          )
# )

# Combine: scrape table text AND embedded link URLs
cat('Tables + links = most of what the web offers')

Sıkça Sorulan Sorular

“Tabloları ve Bağlantıları Kazıma” dersi ücretsiz mi?

Evet — “Tabloları ve Bağlantıları Kazıma” 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.

“Tabloları ve Bağlantıları Kazıma” dersinde ne öğreneceğim?

HTML tablolarını veri çerçevelerine ayrıştırın ve bir sayfadaki tüm köprüleri toplayı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 3. dersidir.

“Tabloları ve Bağlantıları Kazıma” 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

  1. HTML Yapısı ve CSS Seçicileri
  2. html_element() ve html_text() Temelleri
  3. Tabloları ve Bağlantıları Kazıma
  4. Sayfalandırmayı ve Birden Fazla Sayfayı İşleme
← R Academy Sayfasına Dön