Web scraping ve otomasyon sıklıkla JavaScript ağırlıklı web sitelerinin işlenmesini gerektirir. Headless bir WebKit tarayıcısı olan PhantomJS, bu amaç için popüler bir araç olsa da, artık resmi olarak kullanımdan kaldırılmıştır. Bu makale, yeni projeler için modern alternatiflerin seçilmesinin önemini vurgulayarak, Python ile PhantomJS kullanımına dair temel bir örneği ele almaktadır. PhantomJS gibi eski yazılımların kullanılmasının önemli güvenlik riskleri doğurduğunu unutmayın.
İçindekiler
- PhantomJS ve Sınırlamaları Anlamak
- Kurulum ve Yapılandırma (Eğer PhantomJS’niz varsa)
- Temel Örnek: Bir Web Sayfasını İşleme
- Modern Alternatifler: Playwright ve Selenium
PhantomJS ve Sınırlamaları Anlamak
PhantomJS, görünür bir tarayıcı penceresi olmadan web sayfalarıyla etkileşim kurmanıza olanak tanıyan, komut dosyasıyla çalıştırılabilir bir headless WebKit ortamı sağlamıştır. Bu, özellikle JavaScript içeriğini işlemeniz gereken web scraping gibi görevler için yararlıydı. Ancak, kullanımdan kaldırılmış olması nedeniyle güvenlik güncellemelerinden yoksundur ve güvenlik açıklarına karşı savunmasızdır. Bu nedenle, yeni projeler için şiddetle önerilmemektedir.
Kurulum ve Yapılandırma (Eğer PhantomJS’niz varsa)
PhantomJS artık desteklenmediği için standart paket yöneticilerini kullanarak yükleyebilirsiniz. Önceden var olan bir kurulumunuz varsa, phantomjs
çalıştırılabilir dosyasının sisteminizin PATH ortam değişkeninde erişilebilir olduğundan emin olmanız gerekir. Bu, terminalinizden phantomjs
komutunu çalıştırmanıza olanak tanır. PATH’inizi ayarlama konusunda yardıma ihtiyacınız varsa işletim sisteminizin belgelerine bakın.
Temel Örnek: Bir Web Sayfasını İşleme
Bu örnek, Python’da subprocess
ve PhantomJS ile etkileşim kurmak için basit bir JavaScript betiği kullanarak bir web sayfasının işlenmesini göstermektedir. `”http://example.com”` adresini hedef URL’nizle değiştirmeyi unutmayın.
import subprocess
def render_page(url, output_file):
try:
command = ["phantomjs", "render.js", url, output_file]
subprocess.run(command, check=True, capture_output=True, text=True)
print(f"Sayfa işlendi ve {output_file} adresine kaydedildi")
except subprocess.CalledProcessError as e:
print(f"Sayfa işlenirken hata oluştu: {e.stderr}")
except FileNotFoundError:
print("Hata: phantomjs çalıştırılabilir dosyası bulunamadı. PATH'inizde olduğundan emin olun.")
url = "http://example.com"
output_file = "output.html"
render_page(url, output_file)
Buna karşılık gelen JavaScript dosyası (render.js
):
var page = require('webpage').create();
var system = require('system');
var address = system.args[1];
var outputFile = system.args[2];
page.open(address, function (status) {
if (status !== 'success') {
console.log('Adres yüklenemiyor!');
phantom.exit(1);
} else {
setTimeout(function() {
var html = page.content;
var fs = require('fs');
fs.write(outputFile, html, 'w');
phantom.exit();
}, 5000);
}
});
Bu betik, URL’yi açar, JavaScript’in çalışması için 5 saniye (gerektiği gibi ayarlayın) bekler ve işlenmiş HTML’yi output.html
dosyasına kaydeder. Zaman aşımı çok önemlidir; yetersiz süre, eksik işlemeyle sonuçlanabilir.
Modern Alternatifler: Playwright ve Selenium
Yeni projeler için Playwright veya Selenium gibi modern alternatifleri kullanmayı ciddi olarak düşünün. Bu çerçeveler üstün güvenlik, performans ve daha geniş tarayıcı desteği sunar. Aktif olarak bakımı yapılır ve düzenli güncellemeler alırlar, bu da PhantomJS gibi eski yazılımlarla ilgili güvenlik risklerini azaltır. Ayrıca karmaşık web etkileşimleri ve scraping görevleri için daha sağlam API’ler sağlarlar.