Ana içeriğe atla

R ve PhantomJS ile Web Kazıma

PhantomJS kullanarak R ile Javascript tarafından üretilen verileri kazıma üzerine kısa bir öğretici.
Güncel 3 Eki 2026  · 5 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Web kazıma yapmanız gerektiğinde, normalde Hadley Wickham’ın rvest paketinden yararlanırsınız. Bu paket, bir web sayfasını oluşturan html kodunu almak için kullanıma hazır, kolay bir çözüm sunar. Ancak, ilginizi çeken verileri görüntülemek için web sitesi veya web sayfası JavaScript kullanıyorsa, rvest paketi gerekli işlevselliği sunmaz. Çözümlerden biri PhantomJS kullanmaktır.

(R’a daha fazla veri aktarma alıştırması yapmak ister misiniz? bu öğreticiyi deneyin.)

Gerekli Paketleri Yükleyin

İlk adım olarak, bu analiz için ihtiyaç duyduğumuz tüm paketleri çalışma alanına yüklemeniz gerekir (bu paketleri yerel sisteminize henüz kurmadıysanız, kullanılabilir hale getirmek için install.packages() kullanın):

library(rvest)
library(stringr)
library(plyr)
library(dplyr)
library(ggvis)
library(knitr)
options(digits = 4)

R ile Javascript Tarafından Üretilen Verileri Kazıma

Sıradaki adım, PhantomJS kullanarak TechStars verilerinin toplanmasıdır. Aşağıdaki temel .js dosyasına göz atın:

// scrape_techstars.js

var webPage = require('webpage');
var page = webPage.create();

var fs = require('fs');
var path = 'techstars.html'

page.open('http://www.techstars.com/companies/stats/', function (status) {
  var content = page.content;
  fs.write(path,content,'w')
  phantom.exit();
});

Betik, temel olarak, alttaki javascript kodu işini bitirdikten sonra HTML sayfasını oluşturur; böylece içindeki tüm tablolarla birlikte HTML sayfasını almanıza olanak tanır. Analizin geri kalanında R içinde kalmak için, PhantomJS’i çağırmak üzere system() fonksiyonunu kullanmanızı öneririz (PhantomJS’i indirip kurmanız ve çalışma dizininize koymanız gerekir):

# phantomJS'in techstars'ı kazımasına izin verin, çıktı techstars.html dosyasına yazılır
system("./phantomjs scrape_techstars.js")

Bu küçük dolambaçtan sonra, sonunda yerel sistemimizde techstars.html adlı ve rvest ile kazınabilecek bir HTML dosyanız var. Techstars web sayfasının incelenmesi, ilgilendiğimiz tabloların batch css sınıfına sahip div’ler içinde yer aldığını gösterir:

batches <- html("techstars.html") %>%
  html_nodes(".batch")

class(batches)
[1] "XMLNodeSet"

Artık elinizde XMLNodeSet nesnelerinden oluşan bir liste var: her nesne tek bir TechStars grubuna ait verileri içeriyor. İçinde grup konumu, yıl, mevsim ile şirketler, mevcut merkezleri, mevcut durumları ve topladıkları toplam yatırım miktarı gibi bilgiler bulunur. Aşağıdaki veri toplama ve temizleme adımlarının ayrıntılarına girmeyeceğiz; kodu kendiniz çalıştırabilir ve neler yaptığını inceleyebilirsiniz. Her bir bilginin düzgün biçimlendirildiğinden emin olmak için bazı özel temizlik işlemlerinin yapıldığını göreceksiniz:

batch_titles <- batches %>%
  html_nodes(".batch_class") %>%
  html_text()

batch_season <- str_extract(batch_titles, "(Fall|Spring|Winter|Summer)")
batch_year <- str_extract(batch_titles, "([[:digit:]]{4})")
# konum bilgisi, grup başlığındaki yıl veya mevsim dışındaki her şeydir
batch_location <- sub("\\s+$", "",
                      sub("([[:digit:]]{4})", "",
                          sub("(Fall|Spring|Winter|Summer)","",batch_titles)))

# grup bilgileriyle bir veri çerçevesi oluşturun.
batch_info <- data.frame(location = batch_location,
                         year = batch_year,
                         season = batch_season)

breakdown <- lapply(batches, function(x) {
  company_info <- x %>% html_nodes(".parent")
  companies_single_batch <- lapply(company_info, function(y){
    as.list(gsub("\\[\\+\\]\\[\\-\\]\\s", "", y %>%
       html_nodes("td") %>%
       html_text()))
  })
  df <- data.frame(matrix(unlist(companies_single_batch),
                   nrow=length(companies_single_batch),
                   byrow=T,
                   dimnames = list(NULL, c("company","funding","status","hq"))))
  return(df)
})

# Grup bilgilerini döküm verisine ekleyin
batch_info_extended <- batch_info[rep(seq_len(nrow(batch_info)),
                                  sapply(breakdown, nrow)),]
breakdown_merged <- rbind.fill(breakdown)

# Tüm bilgileri birleştirin
techstars <- tbl_df(cbind(breakdown_merged, batch_info_extended)) %>%
  mutate(funding = as.numeric(gsub(",","",gsub("\\$","",funding))))

Çekirdek R, rvest, plyr ve dplyr işlevlerinin bir kombinasyonuyla artık elimizde techstars veri çerçevesi var; tüm TechStars şirketlerine ait, kamuya açık bilgilerin düzgün biçimlendirildiği bir veri seti:

techstars
## Source: local data frame [535 x 7]
##
##          company funding   status                hq location year season
## 1    Accountable  110000   Active    Fort Worth, TX   Austin 2013   Fall
## 2          Atlas 1180000   Active        Austin, TX   Austin 2013   Fall
## 3        Embrace  110000   Failed        Austin, TX   Austin 2013   Fall
## 4  Filament Labs 1490000   Active        Austin, TX   Austin 2013   Fall
## 5        Fosbury  300000   Active        Austin, TX   Austin 2013   Fall
## 6          Gone!  840000   Active San Francisco, CA   Austin 2013   Fall
## 7     MarketVibe  110000 Acquired        Austin, TX   Austin 2013   Fall
## 8           Plum 1630000   Active        Austin, TX   Austin 2013   Fall
## 9  ProtoExchange  110000   Active        Austin, TX   Austin 2013   Fall
## 10       Testlio 1020000   Active        Austin, TX   Austin 2013   Fall
## ..           ...     ...      ...               ...      ...  ...    ...
names(techstars)
## [1] "company"  "funding"  "status"   "hq"       "location" "year"
## [7] "season"

Sonuç

Yukarıdaki araç ve kod kombinasyonunu kullanarak, verilerini üretmek için bir JavaScript betiği kullanan bir web sitesinden veri kazımayı başardık. Görüldüğü gibi bu, başlangıç kodu hazır olduğunda kolayca yapılabilecek, oldukça yapılandırılmış bir süreçtir. R öğrenmek ve veri bilimi ile R üzerine öğretici ve kurslar mı arıyorsunuz? DataCamp’e göz atın

Konular
R
Veri Bilimi

R hakkında daha fazlasını öğrenin

Kurs

R’ye Giriş

4 sa
3.1M
Vektörler, listeler ve veri çerçeveleri de dahil olmak üzere R'da veri analizinin temellerini öğrenin ve gerçek veri setleriyle R pratiği yapın.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör