Giriş

Bu adım adım kılavuzda, mobil proxy kullanarak Apify'de tam kapsamlı bulut tabanlı web scraping yapmayı öğreniyorsunuz. Node.js üzerinde bir aktör oluşturacak, ürün kartı verilerini toplamak üzere test görevini başlatacak ve hatalardan kaçınmak için limitleri güvenli bir şekilde nasıl yönetebileceğinizi öğreneceksiniz. Kılavuz, yeni başlayanlar için tasarlandı ancak ileri düzey kullanıcılar için de bölümler içeriyor. sonunda tekrar kullanılabilir bir aktör, işleyen bir proxy şeması, sonuç doğrulamaları, kontrol listeleri, yaygın hataların incelenmesi ve optimizasyon ipuçları ile birlikte bir proje geliştirme seçeneği olacak. İsterseniz bir zamanlayıcı ekleyebilir, sonuçları Google Sheets'e aktarabilir, API entegrasyonları yapabilir ve izleme ekleyebilirsiniz. Pratik bir sorununuz varsa hemen SSS bölümüne geçin, ancak tam bir sonuç almak için tüm adımları izlemeyi unutmayın.

Bu kılavuz kimler için: mobil proxy'lerle Apify aktörünü çalıştırmayı öğrenmek isteyenler için, belgesel okumaya haftalar ayırmadan. Pazarlamacılar, analistler, araştırmacılar, internet projeleri sahipleri ve veri toplama konusunda güvenilir bir yöntem arayan yeni başlayan geliştiriciler için faydalı olacaktır.

Önceden bilmeniz gerekenler: Temel JavaScript bilgileri faydalı olacaktır, ancak zorunlu değildir. Tıklamanız gereken yerleri, gireceğiniz verileri ve sonuçları nasıl doğrulayacağınızı ayrıntılı olarak yazacağız. Web hizmetine yetkilendirme yapabilme, erişim tokenlerini kopyalayabilme ve şifrelerle dikkatli çalışabilme önemlidir.

Ne kadar zaman alır: Tam geçiş için 2-3 saat, kayıt, aktör ayarları, proxy entegrasyonu, test başlatma ve sonuçları kontrol etme dahil. Eğer hali hazırda bir Apify hesabınız ve mobil proxy erişiminiz varsa, 60-90 dakikada işinizi tamamlayabilirsiniz.

Ön Hazırlık

Gerekli Araçlar, Programlar ve Erişimler

  • Aktörleri başlatmak için erişim içeren Apify hesabı.
  • Eğer yerel olarak kodu düzenlemek istiyorsanız, LTS (18 veya üzeri) Node.js'in yerel bilgisayarınıza kurulumu. Apify'nin yerleşik editörü işinizi görebilir, ancak yerel olarak çalışması daha rahat olacaktır.
  • Mobil proxy için kimlik bilgileri. Örnek olarak mobileproxy.space sağlayıcısını kullanarak, proxy sunucusu için kullanıcı adı, şifre ve adres alabilirsiniz. Herhangi bir benzer hizmeti kullanabilirsiniz.
  • Metin düzenleyici: VS Code veya başka bir seçenek.
  • Yerel geliştirme ve aktörü buluta yüklemek için Apify CLI (isteğe bağlı).

Sistem Gereksinimleri

  • İnternete stabil erişim.
  • Windows, macOS veya Linux. Aktör ile yerel çalışma için herhangi bir modern bilgisayar uygundur.
  • Npm bağımlılıkları için 200-500 MB arasında boş disk alanı, eğer yerel geliştirme yapmayı planlıyorsanız.

İndirmeniz ve Kurmanız Gerekenler

  1. Resmi web sitesinden Node.js'i indirin, LTS seçeneğini işaretleyin. Kurulum sonrası, terminalde node -v ve npm -v komutlarıyla kontrol edin. Hatalı bir şey olmadan sürümlerinizi görmelisiniz.
  2. Apify CLI'yi (isteğe bağlı) şu komutla kurun: npm i -g apify-cli. Kurulum sonrası kontrol edin: apify --version.
  3. Mobil proxy'leriniz için kimlik bilgilerini hazırlayın: host, port, kullanıcı adı ve şifre. Eğer mobileproxy.space kullanıyorsanız, host:port biçiminde bir adres ile kullanıcı:şifre çiftini elde edeceksiniz.

⚠️ Dikkat: Asla proxy kullanıcı adlarınızı ve şifrelerinizi açık kaynaklarda paylaşmayın. Çevresel değişkenler veya platformun gizlilik özelliklerini kullanın.

Yedekleme Oluşturma

Eğer yerel olarak kod düzenliyorsanız, projenizin yedeğini saklayın (örneğin git kullanarak). Apify, platformun kendisi aktörlerin versiyonlarını saklar, ancak kodunuzun yerel bir yedeğini bulundurmak her zaman daha iyidir.

Tavsiye: Eğer Apify ile ilk kez çalışıyorsanız, doğrudan tarayıcı üzerinden platformun arayüzündeki editörde başlayın ve yerel geliştirmeyi daha sonra ekleyin. Bu, başlangıç sürecini hızlandırır.

Temel Kavramlar ve Apify Nedir

Temel Terimler Kısaca

  • Apify — web'de otomasyonu sağlamak için bir platform: scraping, crawling, entegrasyonlar. Bulut üzerinde kod (aktörler) çalıştırmanıza, sonuçları (Datasets) saklamanıza ve URL kuyruklarını yönetmenize imkan tanır.
  • Aktör — bir görevi gerçekleştiren konteynerleştirilmiş bir uygulama (genellikle Node.js veya Python kullanılır): sayfaları açar, verileri toplar, sonuçları kaydeder.
  • Görev (Task) — aktör başlatma ayarını kayıtlı olarak saklar ve önceden doldurulmuş giriş alır. Kodu değiştirmeden düzenli yeniden başlatmalar için kullanışlıdır.
  • Dataset — scraping sonuçlarının tablolar halinde saklandığı bir depo. JSON, CSV, XLSX gibi formatlara aktarabilirsiniz.
  • Key-Value Store — rastgele dosyaların ve ayarların saklanabileceği bir depo (örneğin, giriş parametreleri, raporlar).
  • Request Queue — URL'leri kurutmak ve sistematik olarak işlemek için kuyruk.
  • ProxyConfiguration — proxy ayarları. Apify proxy'lerini ya da harici, mobil proxy kullanabilirsiniz.
  • Mobil proxy'ler — operatörlerin mobil ağlarına bağlı proxy'lerdir. Genellikle siteler tarafından gerçek mobil trafik olarak algılanırlar.

Çalışma Prensipleri

Aktör yazarsınız, ona giriş parametrelerini verirsiniz, bulutta çalıştırırsınız. Aktör, bir dizi URL alır, bunları seçtiğiniz bir tarayıcı (örneğin, basit HTML sayfaları için CheerioCrawler veya karmaşık siteler için PlaywrightCrawler) aracılığıyla açar, verileri toplar ve Dataset'e yazar. Ağ talepleri için aktör, ProxyConfiguration'a göre proxy kullanır. Düşük yanlış pozitif koruma ile sağlam veri toplama gerektiğinde, mobil proxy'ler tercih edilir. Bunlar yükü dağıtmanıza ve hedefte mobil kullanıcı olarak görünmenize olanak tanır.

Başlamadan Önce Anlamanız Gerekenler

  • Hedef sitelerin kurallarına ve geçerli yasalara uyun. Verileri etik ve yasal olarak toplayın.
  • Mobil proxy'ler bile sınırlamalardan bağışıklık sağlamaz. Taleplerin hızı, gecikmeler, doğru HTTP başlıkları ve tarayıcı kodunun kalitesi önemlidir.
  • Apify platformunun sınırları ve tarifelerinizin ayarları, eşzamanlılık, bellek ve çalışma süresini etkiler. Bunlar ayarlanabilir ve kontrol edilebilir.

Tavsiye: Hedefin resmi bir API'si varsa, ondan başlayın. Bu, HTML scraping'inden daha stabil ve etik bir yöntemdir.

Adım 1: Mobil Proxy'lerin Bulut Scraping'de Neden Kullanıldığı

Aşamanın Amacı

Mobil proxy'lerin en iyi sonuçları verdiği durumları anlamak ve buluttan çalışma sırasında blokajları ve istikrarsızlıkları en aza indirmek için ayarları nasıl seçeceğinizi öğrenmek.

Ayrıntılı Adım Adım Kılavuz

  1. Veri toplama amacını belirleyin: ürün listesi, fiyatlar, yorumlar, takvimler, haberler. Belirli sayfa türlerini ve yaklaşık URL'lerini yazın.
  2. Sitenin karmaşıklığını değerlendirin: sayfa JavaScript olmadan açılıyor mu, ne kadar hızlı yükleniyor, dinamik yükleme var mı. Eğer site basitse, CheerioCrawler yeterlidir; karmaşıksa PlaywrightCrawler kullanın.
  3. Mobil oturuma ihtiyacınız olup olduğuna karar verin: eğer site açıkça mobil kullanıcıları hedefliyorsa, mobil ve masaüstü müşteriler için farklı sayfa sürümleri gösteriyorsa, mobil proxy'ler doğal görünmenize yardımcı olacaktır.
  4. Mobil proxy sağlayıcısını seçin. Örnek olarak mobileproxy.space kullanılabilir. Stabil bir host, port, kullanıcı adı ve şifreye sahip olduğunuzdan emin olun. Bunları ayrı bir yere not edin.
  5. Taleplerin sıklığını planlayın. 1-2 eşzamanlı sekme ve 1-3 taleple başlayın. Gerekirse kalitesiz sonuçları gözlemleyerek yavaşça artırın.
  6. IP döndürme kullanıp kullanmayacağınıza karar verin. Mobil proxy'ler için döndürme komutla veya sağlayıcının zamanlayıcısıyla olabilir. Sağlayıcınızın döndürme politikalarını ve komutlarını öğrenin.

Önemli Noktalar

Mobil proxy'ler yanlış alarm oranını azaltmak veya mobil bir müşterilerin davranışını taklit etmek gerektiğinde uygundur. Kullanmayın onları, site veya yasa tarafından yasaklanan eylemler için. User-Agent başlıklarını ve gecikmeleri doğru bir şekilde ayarlayın.

⚠️ Dikkat: Site tahdidatlarını aşmaya çalışmayın. Eğer sayfa yetkilendirme veya kullanım şartları ile kapalıysa, kaynakların kurallarına uygun hareket edin.

Beklenen Sonuç

Mobil proxy'lerin neden kullanıldığını anladınız, sağlayıcıyı seçtiniz ve aktörde ayarlara hazırsınız. Proxy kimlik bilgilerine ve taleplerin sıklığına dair bir planınız var.

Olası Problemler ve Çözümleri

  • Mobil versiyonun gerekli olup olmadığını belirlemek zor. Çözüm: Geliştirici tarayıcısında mobil User-Agent ile siteyi açın ve markup'ı karşılaştırın. Eğer fark belirginse, mobil oturum gereklidir.
  • Sağlayıcının güvenilirliğinden şüphe ediyorsanız. Çözüm: İstemci ile proxy'niz üzerinden bir bağlantıyı curl ile test edin. 10-15 dakika boyunca istikrarını kontrol edin.

✅ Kontrol: Doğru proxy parametrelerine (host, port, kullanıcı adı, şifre) sahip olduğunuzdan ve istediğiniz taleplerin sıklığını not aldığınızdan emin olun.

Adım 2: Apify'de Kayıt Olma ve Çalışma Alanı Hazırlama

Aşamanın Amacı

Apify hesabı oluşturmak veya doğrulamak, konsola girmek, gerekirse Apify CLI yüklemek ve aktör oluşturma için hazırlanmak.

Ayrıntılı Adım Adım Kılavuz

  1. Apify'de kaydolun. E-posta adresinizi girin, bir şifre oluşturun, e-postanızı onaylayın. Giriş yaptıktan sonra, Actors, Tasks, Storage bölümleri ile konsol açılacaktır.
  2. Profilinize geçin ve kişisel API token'inizi bulun. Güvenli bir yere kopyalayın; bu, CLI ve entegrasyonlarda işinize yarayacak.
  3. CLI kullanıyorsanız: Apify CLI'yi kurun: npm i -g apify-cli. Ardından apify login komutunu çalıştırın ve token'i yapıştırın. Başarılı girişten sonra, terminalde onay göreceksiniz.
  4. Yerel geliştirme için bir proje çalışma dizini oluşturun, eğer yerel çalışma yapıyorsanız. apify create komutunu çalıştırın ve Node.js ile Crawlee şablonunu seçin. Proje yapısı package.json ve src/main.js ile oluşturulacak.
  5. Yalnızca tarayıcıda çalışıyorsanız: Actors bölümünde Yeni'ye tıklayın ve Node.js + Crawlee şablonunu seçin. Platform, boş bir aktör oluşturacak ve çevrimiçi editörü açacaktır.

Önemli Noktalar

Token’in güvenliği

Tavsiye: Aktörü anlamlı bir şekilde adlandırın, örneğin mobile-crawler-products. Bu, gezinmeyi ve otomasyonu kolaylaştıracaktır.

Beklenen Sonuç

Apify konsoluna giriş yaptınız, istiyorsanız CLI'yi ayarladınız, boş bir aktör oluşturdunuz ve editörde main.js dosyasını görüyorsunuz (ya da yerel olarak src klasöründe).

Olası Problemler ve Çözümleri

  • CLI token’ı görmüyor. Çözüm: apify logout çalıştırın ve tekrar apify login komutunu girin. Profilinizden güncel token’i girdiğinizden emin olun.
  • npm bağımlılıkları yükleme hataları. Çözüm: Node.js’i LTS sürümüne güncelleyin, npm cache clean --force komutunu kullanarak npm önbelleğini temizleyin ve yüklemeyi yeniden yapın.

✅ Kontrol: Kod düzenleme erişimi ile oluşturulmuş bir aktör ve temel proje yapısı oluşturulmuş olmalıdır.

Adım 3: Aktör Oluşturma ve Şablonu Yükleme

Aşamanın Amacı

Crawlee üzerinde aktörü başlangıç kodu ile doldurmak, böylece tarayıcıyı hemen çalıştırıp proxy olmadan temel işlevselliği doğrulamak.

Ayrıntılı Adım Adım Kılavuz

  1. main.js dosyasını açın. Eğer yoksa, src/main.js oluşturun. package.json’un crawlee ve apify bağımlılıklarını içerdiğinden emin olun.
  2. Temel tarayıcı kodunu ekleyin. CheerioCrawler için bir örnek: import { CheerioCrawler, Dataset } from "crawlee"; export const main = async () => { const startUrls = ["https://example.com/"]; const crawler = new CheerioCrawler({ requestHandler: async ({ request, $, log }) => { const title = $("title").text(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); }, maxConcurrency: 2, requestHandlerTimeoutSecs: 60, }); for (const url of startUrls) await crawler.addRequests([url]); await crawler.run(); };
  3. Dosyayı kaydedin. Tarayıcıda iseniz Save butonuna basın. Yerel çalışıyorsanız, değişiklikleri kaydedin ve npm install komutunu çalıştırın, kütüphaneleri yüklemek için (eğer yüklenmediyse).
  4. Proxy olmadan başlatmayı deneyin: varsayılan giriş ile aktörü başlatın. Dataset'te en az bir nesne title alanı ile görünmeli.

Önemli Noktalar

Minimum bir MVP aktör ihtiyacı var, bu, uçbirimi doğrulamak içindir: başlatma, loglama, sonuçları saklama. Proxy eklemeden önce basit bir sayfada kodun çalıştığından emin olun.

Tavsiye: Bir veya iki başlangıç URL’si ile başlayın. Bu, testleri hızlandıracak ve sorun bulmayı kolaylaştıracaktır.

Beklenen Sonuç

Aktör başarıyla başlatılıyor ve Dataset'e sonuçları kaydediyor. Kayıtlarda, verilerin kaydedildiği belirtiliyor ve DNS veya ağ zaman aşımına dair hatalar yok.

Olası Problemler ve Çözümleri

  • Paket içe aktarma hatası. Çözüm: package.json'daki sürümleri kontrol edin. Gerekirse npm i crawlee apify komutunu çalıştırın.
  • Dataset’te veri yok. Çözüm: $("title").text() seçicisini kontrol edin veya alternatif basit bir seçim yapın, örneğin $("h1").first().text().

✅ Kontrol: Dataset'te, en az bir nesne, url ve title alanları ile görünmeli. Kayıtlar, işler başarıyla tamamlandığına dair izler gösteriyor, istisna hatası yok.

Adım 4: Aktörde Proxy Ayarlama

Aşamanın Amacı

Mobil proxy'leri Apify aktörüne bağlayarak, tüm tarayıcı trafiğinin belirtilen proxy sunucusu üzerinden geçmesini sağlamak ve bağlantının istikrarını doğrulamak.

Ayrıntılı Adım Adım Kılavuz

  1. Proxy dizesini hazırlayın. Harici HTTP proxy’ler için format: http://USERNAME:PASSWORD@HOST:PORT. Örnek: http://user123:pass456@proxy.mobileproxy.space:12345. mobileproxy.space için, kişisel hesabınızdaki kimlik bilgilerini kullanın.
  2. Kodunuza ProxyConfiguration ekleyin. CheerioCrawler için: import { CheerioCrawler, Dataset, ProxyConfiguration } from "crawlee"; export const main = async () => { const proxy = new ProxyConfiguration({ proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"] }); const crawler = new CheerioCrawler({ proxyConfiguration: proxy, requestHandler: async ({ request, $, log }) => { const title = $("title").text(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); }, maxConcurrency: 2, requestHandlerTimeoutSecs: 60, }); await crawler.addRequests(["https://httpbin.org/ip"]); await crawler.run(); };
  3. Değişiklikleri kaydedin ve aktörü başlatın. Her şey doğruysa, Dataset'Te gördüğünüz IP adresi, mobil proxy'nize ait olmalı (httpbin.org/ip için bu, origin veya proxy IP içeren bir JSON olacaktır).
  4. Eğer PlaywrightCrawler kullanıyorsanız, aynı ProxyConfiguration'ı yapıcı parametrelerine ekleyin: import { PlaywrightCrawler, Dataset, ProxyConfiguration } from "crawlee"; const proxy = new ProxyConfiguration({ proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"] }); const crawler = new PlaywrightCrawler({ proxyConfiguration: proxy, launchContext: { launchOptions: { headless: true } }, requestHandler: async ({ page, request, log }) => { const title = await page.title(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); } });
  5. Gerekirse proxy dizesini bir çevresel değişken olarak tanımlayın ve process.env üzerinden okuyun, böylece şifreyi koda saklamazsınız. Apify'de aktör ayarlarında Secrets ve ENV Vars bölümünü kullanarak ayarlayın. Örnek: const proxyUrl = process.env.MOBILE_PROXY_URL;

Önemli Noktalar

Apify Proxy'yi ve harici bir mobil proxy yapılandırmasını karıştırmayın. Tek bir seferde yalnızca bir anlaşılır proxy kaynağı kullanın. proxyUrls ile ayarları tam olarak Apify proxy kullanma işlemini değiştirmektedir.

Tavsiye: İlk olarak proxy'yi https://httpbin.org/ip veya benzeri IP gösterim hizmetlerinde test edin. Bu, trafiğin ihtiyaç duyduğunuz adres üzerinden geçtiğinden emin olmanızı sağlar.

⚠️ Dikkat: Eğer mobil proxy sağlayıcısı, belirli bir URL veya komut ile IP döndürmeyi destekliyorsa, bunu yalnızca kurallarına uygun olarak uygulayın. Gereksiz yere IP'yi sık sık değiştirmek, hedef web sitesinde şüphe uyandırabilir.

Beklenen Sonuç

Tarayıcı, mobil proxy'ye başarıyla bağlandı. IP kontrolü (kontrol sayfası aracılığıyla) yapıldığında, proxy adresini görmelisiniz. Kayıtlar istikrarlı, istekler zaman aşımına uğramadan devam ediyor.

Olası Problemler ve Çözümleri

  • 401 veya 407 kayıtlarında. Sebep: Geçersiz kullanıcı adı veya şifre. Çözüm: Sağlayıcının kişisel hesabındaki kimlik bilgilerini kontrol edin.
  • ECONNRESET veya ETIMEDOUT. Sebep: Bağlantı istikrarsızlığı veya alan adı engellenmesi. Çözüm: Paralellik oranını düşürün, bir ara verin ve tekrar başlatın, sağlayıcınızdan proxy'nin durumunu kontrol edin.

✅ Kontrol: Dataset, IP gösterim sayfasına yapılan talepten alınan sonuçları içermekte ve orada mobil proxy adresini görmelisiniz.

Adım 5: Görev Örneği: Ürün Kartlarından Verileri Toplama

Aşamanın Amacı

Mobil proxy ve sağlam tarayıcı ayarları kullanarak gerçek ürün kartlarından verileri toplamak ve sonuçları Dataset'te saklamak.

Ayrıntılı Adım Adım Kılavuz

  1. Hedef URL liste veya kategori belirleyin, burada açık verileri saklamak güvenli ve yasal olabilir. Test için 3-5 bağlantı yazın.
  2. Tarayıcıyı seçin. Sayfa statik ise CheerioCrawler kullanın. Veri dinamik olarak yükleniyorsa PlaywrightCrawler seçin.
  3. Veri çıkarmak için ana seçicileri ekleyin. Örneğin: ürün adı, fiyat, para birimi, değerlendirme, stok durumu. Cheerio için bunlar jQuery benzeri seçiciler; Playwright için ise page.locator.
  4. CheerioCrawler için örnek: import { CheerioCrawler, Dataset, ProxyConfiguration, log } from "crawlee"; export const main = async () => { log.setLevel(log.LEVELS.INFO); const proxy = new ProxyConfiguration({ proxyUrls: [process.env.MOBILE_PROXY_URL] }); const startUrls = ["https://example.com/product/1", "https://example.com/product/2"]; const crawler = new CheerioCrawler({ proxyConfiguration: proxy, maxConcurrency: 2, requestHandlerTimeoutSecs: 90, requestHandler: async ({ request, $, log }) => { const title = $("h1.product-title").text().trim(); const priceText = $("span.price").text().trim(); const availability = $("div.stock").text().trim(); const currency = priceText.replace(/[0-9.,\s]/g, ""); const price = parseFloat(priceText.replace(/[^0-9.,]/g, "").replace(",", ".")) || null; await Dataset.pushData({ url: request.loadedUrl, title, price, currency, availability }); log.info(`Saved: ${title || "no title"}`); }, failedRequestHandler: async ({ request, log }) => { log.warning(`Failed ${request.url}`); } }); await crawler.addRequests(startUrls); await crawler.run(); };
  5. PlaywrightCrawler için örnek: import { PlaywrightCrawler, Dataset, ProxyConfiguration } from "crawlee"; export const main = async () => { const proxy = new ProxyConfiguration({ proxyUrls: [process.env.MOBILE_PROXY_URL] }); const startUrls = ["https://example.com/product/1"]; const crawler = new PlaywrightCrawler({ proxyConfiguration: proxy, requestHandlerTimeoutSecs: 120, launchContext: { launchOptions: { headless: true } }, requestHandler: async ({ page, request, log }) => { await page.waitForLoadState("domcontentloaded"); const title = await page.title(); const price = await page.locator("span.price").first().textContent().catch(() => null); await Dataset.pushData({ url: request.loadedUrl, title, price }); log.info(`Saved: ${request.loadedUrl}`); } }); await crawler.addRequests(startUrls); await crawler.run(); };
  6. MOBILE_PROXY_URL değerini Apify'deki aktör ayarlarında çevresel değişkenlerde saklayın (Ayarlar → Çevresel Değişkenler bölümü). Değer: proxy dizesi http://user:pass@host:port.
  7. Aktörü başlatın. Kayıtların durumunu, yanıt süresini ve başarılı kayıt sayısını izleyin.

Önemli Noktalar

Dataset'teki veri yapısı öngörülebilir olmalıdır: Tüm kartlar için aynı alanları ayarlayın, aksi takdirde tabloya aktarma sırasında zorluk yaşarsınız. Tayma sürelerini kontrol edin: Dinamik sayfalar için requestHandlerTimeoutSecs değerini artırın ve ana seçicilerin yüklenmesini bekleyin.

Tavsiye: Yumuşak bir yükleme için, auto-scaled pool ayarları veya işlemci içinde manuel beklemeler ekleyerek talepler arasında 300-1500 ms gecikmeler ekleyin.

Beklenen Sonuç

Dataset, her ürün kartı için ana alanlarla bir kayıt içerir. Kayıtlar istikrarlı, proxy yetkilendirmesi hatası yok, ortalama yanıt süresi sizin durumunuz için kabul edilebilir.

Olası Problemler ve Çözümleri

  • Yanlış seçiciler. Sebep: duyarlı tasarım veya sayfa yapısındaki farklılık. Çözüm: mobil ve masaüstü sürümlerini kontrol edin, daha dayanıklı seçiciler (data-atributları, benzersiz id'ler) kullanın.
  • Bazı alanlarda boş veriler. Sebep: değerler dinamik olarak yükleniyor. Çözüm: gerekli öğelerin beklenmesini net bir şekilde ekleyin veya Cheerio yerine Playwright kullanın.

✅ Kontrol: Dataset'te url, title, price veya eş değer alanlarla kayıtlar mevcut olmalıdır. Ortalama hata yüzdesi düşük olmalı ve test örnekleminde %5-10'un altında olmalıdır.

Adım 6: Limitler ve Optimizasyon

Aşamanın Amacı

Apify limitlerini tasarruflu bir şekilde kullanmak ve veri toplayıcıların dayanıklılığını arttırmak için eşzamanlılık, zaman aşımı, tekrar deneme, döndürme ve depolama ayarlamak.

Ayrıntılı Adım Adım Kılavuz

  1. Eşzamanlılığı sınırlandırın. Tarayıcı ayarlarında maxConcurrency değerini başlangıçta 1-3 arası olarak ayarlayın. Yavaşça artırın. Daha yüksek eşzamanlılık, proxy ve site üzerindeki yükü artırır.
  2. Tekrar denemeleri ayarlayın. Crawlee'de retryCount ve retryTimeoutMillis bulunur. retryCount değerini 1-2 olarak ayarlayın, böylece sorunlu sayfaları sonsuz döngüye sokmayın.
  3. Çalışma süresini yönetin. Ağırlıklı sayfalar için requestHandlerTimeoutSecs değerini 90-120 arası artırın. Bu, yavaş yanıtlar sırasında yanlış zaman aşımını azaltacaktır.
  4. Rastgele gecikmeler ekleyin. Talepler arasında 300-1500 ms arasında küçük bekleme süreleri ekleyin. Bu daha doğal görünür ve kısıtlama riskini azaltır.
  5. Sağlayıcınızda proxy döndürme sürelerini mantıklı bir aralıkta planlayın. Eğer mobileproxy.space belirli bir döndürme IP istemi için bir zamanlayıcı sağlıyorsa, oturumlarınızın istikrarını bozmayacak bir aralık seçin.
  6. Apify limitlerine dikkat edin: bellek, CPU, süre. Çalıştırma ayarlarında memory (örneğin Playwright için 1024-2048 MB) ve Max run time (örneğin toplama işlemleri için 30-60 dakika) ayarlayın.
  7. Sadece gerekli alanları saklayın. Dataset'teki gereksiz verilerin miktarı ne kadar az olursa, depolama yükü de o kadar düşük olur ve aktarma süresi daha hızlı olur. Gereksiz HTML parçalarını temizleyin.
  8. INFO düzeyinde loglama ve hata ayıklama için seçici olarak DEBUG seçeneğini açın. Fazla log, okunabilirliği zorlaştırabilir ve stabil durumda ihtiyaç duyulmaz.

Önemli Noktalar

Limitleri korumanınLoglar ve izlemelerle gözlem yapın. Bu, ayarları düzeltmeye yardımcı olur.

Tavsiye: Başarılı URL'leri Key-Value Store veya harici bir depoda saklayın. Bu, hatalı durumda yerden yeniden başlatmayı kolaylaştırır ve daha önce toplanmış sayfaları yeniden işlemekten kaçınır.

Beklenen Sonuç

Aktör düzgün çalışıyor, gereksiz kaynak kullanmıyor, hatalar nadir ve öngörülebilir. Zaman aşımı ve eşzamanlılık ayarları, otomobil proxy'nizin hızına ve sitenin karmaşıklığına uygun bir şekilde ayarlanmalıdır.

Olası Problemler ve Çözümleri

  • Zaman aşımını artırmak işe yaramıyor. Sebep: sayfa aşırı yüklenmiş veya sağlayıcının sorunları. Çözüm: paralellik oranını 1'e düşürün ve bağlantı istikrarını kontrol edin.
  • Çok yavaş bir hız. Sebep: proxy ağında sıkışıklık veya zor bir site. Çözüm: gecikmeleri artırın, ancak aynı zamanda görevleri daha küçük paketlere ayırmayı düşünün.

✅ Kontrol: Sayfaya geçen süreniz stabil, hata yüzdesi, veri miktarına göre yükselmez, bellek ve süre limitleri geçici değildir.

Sonuç Kontrolü

Kontrol Listesi: Nelerin Çalışması Gerekiyor

  • Aktör hatasız başlıyor ve düzgün bir şekilde çalışmasını sonlandırıyor.
  • Mobil proxy'ler bağlandı, kontrol taleplerinde IP proxy ile örtüşüyor.
  • Dataset, beklenen alanlar ve değerleri içeriyor.
  • Kayıtlar bilgilendirici, ancak aşırı yüklü değil.
  • Yeniden başlatmalarda fazladan kopyalar yok (veya bunlar kontrol ediliyor).

Test Etme Yöntemi

  1. Aktörü 2-3 test URL'si ile proxy açık olarak başlatın ve IP'yi gösterim sayfasında kontrol edin.
  2. Sayıları karşılaştırın: ne kadar istek eklenmiş ve kaç sonuç aldınız. Bu sayılar aynı olmalı veya makul bir hata oranında farklılık göstermelidir.
  3. Dataset’i CSV'ye aktarın ve verilerin temiz olduğundan emin olun: beklenilen değerlerin dışında null olmamalıdır.

Başarılı Uygulama Göstergeleri

  • Başarısız istek yüzdesi testte %5-10'un altında.
  • Sayfa süreç ortalaması stabil ve öngörülebilir.
  • Proxy'da anormal zaman aşım ve yetkilendirme hataları yok.

Tavsiye: Kontrol amaçlı URL setini saklayın ve yine büyük bir kod değişikliğinden önce testi tekrarlayın. Böylece, gerilemeleri hızlı bir şekilde yakalayabilirsiniz.

Yaygın Hatalar ve Çözümleri

  • Problem: 407 Proxy Authentication Required. Sebep: Geçersiz proxy kimlik bilgileri. Çözüm: Kullanıcı adı ve şifreyi kontrol edin, çevresel değişkenleri güncelleyin ve aktörü yeniden başlatın.
  • Problem: ECONNRESET ve ETIMEDOUT kayıtları. Sebep: ağ istikrarsızlığı veya aşırı yüklenme. Çözüm: maxConcurrency değerini azaltın, zaman aşımını artırın ve talepler arasında bekleme süreleri ekleyin.
  • Problem: Dataset'te boş alanlar. Sebep: yanlış seçiciler veya dinamik yükleme. Çözüm: PlaywrightCrawler kullanmayı deneyin, beklemeler ekleyin, seçicileri yeniden gözden geçirin.
  • Problem: bellek limiti aşıldı. Sebep: fazla eşzamanlı sekme veya gereksiz verilerin saklanması. Çözüm: eşzamanlılığı azaltın, veri miktarını azaltın, başlatma ayarlarında Memory değerini artırın.
  • Problem: çok yavaş sizinle toplama. Sebep: zor sayfa ve mobil ağ. Çözüm: veri gereksinimlerine göre sıralayarak sıkıştırmanın yollarını düşünün, problemi daha küçük paketlere bölün, seçicileri optimize edin ve gereksiz yönlendirmeleri kapatın.
  • Problem: sonuçlarda kopya. Sebep: aynı URL'ler ile çalıştırmak. Çözüm: unique'leri kontrol etmek ya da eski kayıtları Request Queue’de tutarak kayıt etmeden önce kontrol edin.
  • Problem: hassas bir site sık taleplere yanıt veriyor. Sebep: çok agresif bir hız. Çözüm: hızı düşürün, gecikmelere jitter ekleyin, doğru başlıklar kullanın ve güncel User-Agent kullanın.

Tavsiye: Hata ayıklarken, tek bir veya iki URL için kapsamlı loglamayı bir süre açın ve her adımı değerlendirin. Uzun paket dosyaları analizden daha hızlıdır.

Ek Olanaklar

Gelişmiş Ayarlar

  • Gizlilik ve ayarlar. MOBILE_PROXY_URL ve diğer anahtarları Secrets bölümünde saklayın. Kodu process.env ile okuyun.
  • User-Agent değişimi. Mobil istemci taklit etmek için mobil User-Agent belirleyin ve Playwright'ta uygun bir viewport genişliği ayarı yapın. Buna gerektiği kadar ve sadece gerekli olduğunda dikkat edin.
  • Görev zamanlayıcı. Bir Task oluşturun ve çalıştırma zamanlarını ayarlayın (günlük, saatlik). Limitlere ve sonuç hacimlerine dikkat edin.

Optimizasyon

  • Önbellek. Sayfalar nadiren değişiyorsa, talepleri ve tekrar ziyaretleri önbelleğe alarak proxy ve limitleri gereksiz yere harcamayın.
  • Queue ve öncelikler. Request Queue üzerinden çalışarak önemli bağlantılara öncelik tanıyın ve önemsiz olanları atlayın.
  • Microservislerde bölme. Zor bir görevi birden fazla aktör halinde bölün: bağlantı toplama, kart işlemesi, doğrulama ve aktarma.

Başka ne yapılabilir

  • API üzerinden entegrasyon. Çalışma sonuçlarınızı her çalıştıktan sonra CRM veya analitik sistemi izleyerek Webhook üzerinden gönderin.
  • Veri doğrulaması. Aktarmadan önce sürelerini kontrol edin: tüm değerlerin beklenen türlere ve ölçülere karşılık geldiğinden emin olun.
  • Dokümandaki iç bağlantılar. Performans ayarlamalarında Limitler ve Optimizasyon bölümüne geri dönebilirsiniz.

Tavsiye: Öncelikle küçük paketler ile preview modunu kullanarak zamanlamalarda ilk alışverişin ana gidişini, daha sonrasında yavaş yavaş ölçeklendirin.

SSS

  • Proxy'nin gerçekten mobil olup olmadığını nasıl anlayabilirim? IP aracılığıyla ASN ve ağ tipini kontrol edin ve mobil operatörlerle karşılaştırın. Ayrıca, mobil proxy'ler genellikle dinamik IP değişimlerine sahip karakteristik bir havuza sahiptirler.
  • Birden fazla mobil proxy kullanmak mümkün mü? Evet, birkaç proxyUrl belirtebilirsiniz. Crawlee, otomatik olarak listedeki birini seçecektir. Her proxy'nin limitlerine dikkat edin.
  • Site CAPTCHA gösteriyorsa ne yapmalıyım? Sıklığı azaltın, gecikmeler ekleyin, başlıkları kontrol edin ve site resmi API'sini kullanmayı düşünün. Site kurallarını ihlal eden eylemlerden kaçının.
  • Proxy şifrelerini güvenli bir şekilde nasıl saklarım? Çevresel değişkenler ve Apify'deki Secrets özelliklerini kullanın. Git'te şifrelerinizi saklamayın.
  • User-Agent'ı mobil yapmak gerekli mi? Sadece site sayfalarını farklı sürüm sunuyorsa. Diğer durumlarda, tutarlı davranış ve doğru gecikmeler yeterlidir.
  • Neden CheerioCrawler daha hızlı? Sayfayı yeniden çizmez, HTML'yi çözümler. Dinamik sayfalarda PlaywrightCrawler kullanın, ancak yavaş olacaktır.
  • Sonuçları nasıl dışa aktarabilirim? Dataset'in arayüzünden CSV, JSON, XLSX olarak dışa aktarın veya otomasyonu sağlamak için Datasets API'yi kullanın.
  • Apify Proxy ile mobil proxy'leri birleştirebilir miyim? Tek bir çalışmada sadece birini kullanmak daha iyidir. Farklı kaynaklara ihtiyacınız varsa görevleri aktör ya da başlatma konfigürasyonu ile ayırın.
  • Saniyede kaç talep güvenli? 1-3 ile başlayın ve metrikleri izleyin. Hassas siteler için 0.2-0.5 ile duraklamalar ekleyin.
  • Playwright'ta headful modunu dahil etmek gerekli mi? Sadece hata ayıklama için. Üretimde kaynak tasarrufu için headless kullanın.

Sonuç

Mobil proxy ile Apify'de çalışır bir aktör oluşturmayı başardınız, temel kavramları ve ilkeleri anladınız, test verilerini ürün kartlarından topladınız ve limitleri optimize ettiniz. Artık paralellik, beklentiler ve sonuç depolama üzerinde ustaca yönetim yapıyorsunuz ve gizli anahtarlar ile şifreleri nasıl saklayacağınızı biliyorsunuz. Projeyi genişletme noktasında ilerleyebilirsiniz: yeni sayfa türleri ekleyin, birden fazla aktörden oluşan bir iş akışı geliştirin ve zamanlayıcılar ekleyip otomatik exportlar yapın. Belirli sorular ortaya çıkarsa, SSS bölümüne geri dönün veya Limitler ve Optimizasyon bölümüne başvurun. Unutmayın ki mobil proxy'ler, ikna edici bir trafik sağlamak için üst unsurlardır, sınırlamaların üstesinden gelmek için değildir. Etik çalışın, web sitelerinin kurallarına uyun ve her zaman küçükten başlayın, her değişiklikte durumu kontrol edin.