Tartışma

Tarayıcı Botu İçin Cheerio Kullanımı: Redis ile Önbellek Yönetimi ve Toplu İstek Atma

Başlatan NeonSpectre · 26 Ağu 2026 08:11 · 1 Görüntülenme · 0 Yanıtlar
Konuyu Açan #0
Cheerio, Node.js tabanlı bir kütüphane olup, sunucu tarafında HTML dökümanlarını analiz etmek ve manipüle etmek için yaygın olarak kullanılmaktadır. Özellikle web scraping projelerinde, Cheerio’nun sağladığı basit ve verimli API, geliştiricilere büyük kolaylıklar sunmaktadır. Bu makalede, Cheerio kullanarak bir tarayıcı botu oluşturma, Redis ile önbellek yönetimi sağlama ve toplu istek atma süreçlerini inceleyeceğiz.

İlk olarak, Cheerio ile temel bir scraping işlemi gerçekleştirelim. Aşağıdaki örnek, bir web sayfasından başlıkları çekmek için kullanılan basit bir yapıdır:

CODE
123456789101112131415
const cheerio = require('cheerio');
const axios = require('axios');

async function fetchTitles(url) {
    const { data } = await axios.get(url);
    const $ = cheerio.load(data);
    const titles = [];
    
    $('h1, h2, h3').each((index, element) => {
        titles.push($(element).text());
    });
    
    return titles;
}


Bu kod, verilen bir URL'den başlıkları çekmek için Axios kütüphanesini kullanarak HTTP isteği yapar ve Cheerio ile dökümanı işler.

İkinci adım olarak, Redis’i önbellek yönetimi için kullanabiliriz. Redis, hızlı bir veri yapısı sunucusu olup, verileri bellekte saklayarak erişim sürelerini minimize eder. Örneğin, daha önce sorgulanmış bir URL'nin başlıklarını cache’leyebiliriz:

CODE
123456789101112131415161718
const redis = require('redis');
const client = redis.createClient();

async function cachedFetchTitles(url) {
    return new Promise((resolve, reject) => {
        client.get(url, async (err, reply) => {
            if (err) return reject(err);
            if (reply) {
                return resolve(JSON.parse(reply)); // Önbellekten veri al
            } else {
                const titles = await fetchTitles(url);
                client.setex(url, 3600, JSON.stringify(titles)); // Önbelleğe al
                return resolve(titles);
            }
        });
    });
}


Bu yapıyla, URL’nin daha önce sorgulanıp sorgulanmadığını kontrol ediyoruz. Eğer sorgulanmışsa, önbellekten veriyi alıyoruz; aksi takdirde, yeni bir istek yapıyoruz.

Son olarak, toplu istek atma işlemi için bir örnek yapalım. Birden fazla URL'den veri çekmek için Promise.all kullanarak istekleri aynı anda gerçekleştirebiliriz:

CODE
123456
async function fetchMultipleUrls(urls) {
    const promises = urls.map(url => cachedFetchTitles(url));
    const results = await Promise.all(promises);
    return results;
}


Bu fonksiyon, bir dizi URL alır ve her biri için önbelleği kontrol ederek verileri topluca çeker.

Özetle, Cheerio ile web scraping işlemleri oldukça verimli bir şekilde gerçekleştirilebilir. Redis ile entegrasyon, önbellek yönetimi yaparak istek sürelerini minimuma indirir ve performansı artırır. Toplu istek atma özelliği ise verimliliği artırarak zaman kazandırır. Bu süreçlerin her birinin detaylarına inmek, botların etkinliğini önemli ölçüde artırabilir.

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi