Job board kazıma, İK analitiği, iş piyasası izleme ve işe alım otomasyonu için en çok talep gören veri toplama senaryolarından biridir. Ancak iş ilanı siteleri otomatik veri toplamaya karşı aktif olarak korunur: 50-100 istekten sonra IP'yi engeller, captcha gösterir ve şüpheli hesapları yasaklar. Bu makalede, hh.ru, Superjob, LinkedIn ve diğer platformlardan engellenme olmadan istikrarlı kazıma için proxy'nin nasıl doğru yapılandırılacağını inceleyeceğiz.
Job board'lar neden kazımayı engeller ve koruma nasıl çalışır
İş ilanı siteleri kazımadan para kaybeder: veriler rakiplere satılır, lisanssız toplayıcılar oluşturulur, işverenler ücretli yayınları atlar. Bu nedenle tüm büyük platformlar otomatik veri toplamaya karşı çok katmanlı koruma uygulamıştır.
Job board'ların temel koruma yöntemleri:
- IP bazlı hız sınırlama — hh.ru saatte 80-120 istekten sonra IP'yi engeller, Superjob 50-70 istekten sonra. Engelleme 1 saatten bir güne kadar sürebilir.
- Tarayıcı parmak izi — siteler User-Agent, HTTP başlıkları, ekran çözünürlüğü, yüklü fontları analiz eder. Veriler gerçek bir tarayıcıya karşılık gelmiyorsa istek engellenir.
- JavaScript kontrolleri — birçok site isteğin gerçek bir tarayıcıdan geldiğini kontrol etmek için Cloudflare veya kendi scriptlerini kullanır.
- Honeypot tuzakları — sadece kazıyıcının görebildiği gizli bağlantılar ve alanlar. Bot bunlara tıklarsa IP kara listeye alınır.
- Şüpheli aktivitede captcha — hızlı istek serileri veya veri merkezi IP'leri kullanımından sonra görünür.
Proxy olmadan maksimum 100-200 iş ilanı kazıyabilirsiniz, ardından IP'niz yasaklanır. Büyük ölçekli veri toplama için (günde binlerce ilan) proxy zorunlu bir araç haline gelir.
Önemli: Kazıma, sitenin kullanım koşullarına uygun olmalıdır. Birçok job board, verilere yasal erişim için resmi API sağlar. Örneğin, hh.ru çoğu görev için uygun olan istek limiti olan ücretsiz bir API'ye sahiptir.
İş ilanı kazıma için hangi proxy türü seçilmeli
Proxy türü seçimi, kazıma ölçeği, bütçe ve hız gereksinimlerine bağlıdır. Üç ana seçeneği spesifik kullanım senaryolarıyla inceleyelim.
| Proxy türü | Hız | Yasaklanma riski | Ne zaman kullanılmalı |
|---|---|---|---|
| Veri merkezi | Yüksek (50-200 ms) | Yüksek | Kazıyıcı testi, kimlik doğrulama olmadan genel veri toplama |
| Residential | Orta (200-800 ms) | Düşük | IP rotasyonlu hh.ru, Superjob büyük ölçekli kazıma |
| Mobil | Orta (300-1000 ms) | Çok düşük | Kimlik doğrulamalı kazıma, LinkedIn'in sıkı korumasını aşma |
Kazıma için veri merkezi proxy'leri
Bu en hızlı ve ucuz seçenek, ancak sınırlamaları vardır. Veri merkezi IP'leri siteler tarafından kolayca tanınır, bu nedenle sadece basit görevler için uygundur: kimlik doğrulama olmadan iş ilanı listelerini kazıma, genel veri toplama, residential proxy'lerde başlatmadan önce kazıyıcı testi.
Veri merkezi proxy'lerinin ne zaman çalıştığı:
- Küçük hacimli veri kazıma (günde 500 ilana kadar)
- Sıkı koruma olmayan sitelerden veri toplama (küçük bölgesel job board'lar)
- Hız limitlerini aşmak için IP rotasyonlu resmi API kullanımı
- RSS beslemeleri ve XML iş ilanı dosyalarını kazıma
hh.ru ve Superjob için veri merkezi proxy'leri istikrarsız çalışacaktır: 20-30 istekten sonra captcha alırsınız ve birçok IP zaten bu sitelerin kara listelerindedir.
Residential proxy'ler — job board'lar için optimal seçim
Residential proxy'ler gerçek ev kullanıcılarının IP adreslerini kullanır, bu nedenle siteler onları normal ziyaretçiler olarak algılar. Bu, iş ilanı kazıma için fiyat ve kalite arasında optimal dengedir.
Job board kazıma için avantajlar:
- Düşük engelleme riski — hh.ru ve Superjob residential IP'yi gerçek kullanıcıdan ayırt edemez
- Büyük IP havuzu — her istek için veya 5-10 dakikada bir rotasyon yapılandırılabilir
- Coğrafi bağlama — o bölgenin IP'sini kullanarak belirli bir şehirden iş ilanları kazınabilir
- İstikrar — bir residential IP engelleme olmadan 200-500 isteği işleyebilir
Büyük ölçekli kazıma için (günde 1000'den fazla ilan) IP rotasyonlu residential proxy'ler standart çözümdür. Her 5-10 dakikada IP değişimi yapılandırır, istekler arasına rastgele gecikmeler eklersiniz (3-7 saniye) ve engellenme olmadan istikrarlı veri toplama elde edersiniz.
LinkedIn ve kimlik doğrulamalı kazıma için mobil proxy'ler
Mobil proxy'ler mobil operatörlerin IP'lerini kullanır. Ana avantajları — bir IP aynı anda yüzlerce gerçek kullanıcı tarafından kullanılır, bu nedenle siteler binlerce normal ziyaretçiyi engelleme riski olmadan böyle bir adresi engelleyemez.
Mobil proxy'lerin ne zaman gerekli olduğu:
- LinkedIn kazıma — bu platform botlara karşı en sıkı korumaya sahiptir ve veri merkezi ve hatta residential IP'leri agresif bir şekilde engeller
- Kimlik doğrulamayla çalışma — kapalı iş ilanlarını veya profil verilerini kazımanız gerekiyorsa, mobil IP'ler hesap yasaklanma riskini azaltır
- Yabancı job board'ların kazıması — Indeed, Glassdoor, Monster gelişmiş koruma sistemleri kullanır, mobil IP'ler daha güvenilir çalışır
- Sıkı engellemeleri aşma — residential proxy'leriniz captcha almaya başlarsa, mobile geçiş sorunu çözer
Mobil proxy'lerin eksi yönü — yüksek fiyat ve daha düşük hız. Ancak engellemenin kabul edilemez olduğu kritik görevler için en iyi seçimdir.
hh.ru kazıma özellikleri: koruma ve aşma yöntemleri
hh.ru — yerli job board'lar arasında kazımaya karşı en gelişmiş korumaya sahip en büyük Rus iş ilanı sitesidir. Site, botları tespit etmek için hız sınırlama, parmak izi ve davranışsal analiz kombinasyonu kullanır.
hh.ru koruması nasıl çalışır
1. IP adresi limitleri: Bir IP'den saatte 80-120 istekten sonra site captcha göstermeye başlar veya HTTP 429 (Too Many Requests) döndürür. Engelleme, kazımanın agresifliğine bağlı olarak 1 ila 6 saat sürer.
2. User-Agent ve başlık kontrolü: hh.ru HTTP istek başlıklarını analiz eder. User-Agent gerçek bir tarayıcıya karşılık gelmiyorsa veya standart başlıklar eksikse (Accept-Language, Accept-Encoding), istek engellenir.
3. JavaScript kontrolleri: hh.ru'nun bazı sayfaları veri yüklemek için JavaScript yürütülmesini gerektirir. Headless tarayıcı olmayan basit bir HTTP kazıyıcı tam içeriği alamaz.
4. Honeypot bağlantıları: Sayfalarda sadece kazıyıcının görebildiği gizli öğeler vardır. Scriptiniz bu bağlantılara giderse — IP 24 saat kara listeye alınır.
Proxy ile hh.ru korumasını aşma stratejisi
Engellenme olmadan istikrarlı hh.ru kazıma için aşağıdaki yapılandırmayı kullanın:
hh.ru kazıma için optimal ayar:
- Proxy türü: Her 5-10 dakikada IP rotasyonlu residential
- İstekler arası gecikme: 4-8 saniye (rastgele değer)
- User-Agent: Modern tarayıcıların gerçek User-Agent'larının rotasyonu (Chrome, Firefox, Safari son sürümleri)
- Başlıklar: Tarayıcının standart başlıklarının tam seti (Accept, Accept-Language, Accept-Encoding, Referer)
- Cookies: Bir oturum içinde istekler arasında cookie'lerin kaydedilmesi ve iletilmesi
- İstek limiti: Bir IP için en fazla 60-80 istek, ardından proxy değişimi
Güvenli eylem sırası örneği:
- İhtiyaç duyulan bölgeden IP'li residential proxy'ye bağlanın (örneğin, Moskova)
- hh.ru ana sayfasına ilk isteği yapın, cookie'leri alın ve kaydedin
- 5-7 saniye bekleyin (sayfa okumayı taklit edin)
- Gerekli filtrelerle iş ilanı arama sayfasına istek yapın
- İş ilanı listesini kazıyın (genellikle sayfa başına 20-50)
- Her ilan için 4-6 saniye gecikmeyle detay sayfasına istek yapın
- 60-70 istekten sonra proxy'yi değiştirin ve döngüyü tekrarlayın
Bu stratejiyle tek bir engelleme olmadan günde bir akıştan 1000-2000 iş ilanı kazıyabilirsiniz. Daha büyük hacim gerekiyorsa — farklı proxy'lerle birkaç paralel akış başlatın.
İpucu: hh.ru iş ilanlarına erişim için ücretsiz API sağlar. Çoğu görev için (iş piyasası analizi, maaş izleme) API, HTML kazımadan daha istikrarlı bir çözüm olacaktır. Proxy'ler, hız limitlerini aşmak için API ile çalışırken IP rotasyonu için kullanılabilir.
Superjob, LinkedIn ve yabancı platformların kazıması
Superjob: koruma özellikleri
Superjob, hh.ru'ya kıyasla daha az sıkı korumaya sahiptir, ancak yine de kazımayla aktif olarak mücadele eder. Ana farklar:
- Daha düşük hız limiti: Saatte 50-70 istekten sonra engelleme gelir (hh.ru'da 80-120'ye karşı)
- Daha az katı başlık kontrolü: Basitleştirilmiş başlık seti kullanılabilir
- JavaScript koruması yok: Verilerin çoğu headless tarayıcı olmadan basit HTTP isteği ile erişilebilir
- Bölgesel engelleme: Bazı ilanlar sadece belirli bölgenin IP'sinden erişilebilir
Superjob için her 10-15 dakikada rotasyonlu residential proxy'ler ve istekler arası 3-5 saniye gecikme yeterlidir. Bu, günde 500-1000 ilanı istikrarlı bir şekilde kazımaya olanak tanır.
LinkedIn: en sıkı koruma
LinkedIn — ayrı bir hikaye. Platform, botları tespit etmek için gelişmiş makine öğrenimi algoritmaları kullanır ve tüm sosyal ağlar ve job board'lar arasında en agresif koruma sistemlerinden birine sahiptir.
LinkedIn koruma özellikleri:
- Zorunlu kimlik doğrulama: Verilerin çoğu sadece kimliği doğrulanmış kullanıcılar için erişilebilir
- Davranışsal analiz: LinkedIn eylem kalıplarını analiz eder: kaydırma hızı, fare hareketleri, sayfada geçirilen süre
- Hesap engelleme: Şüpheli aktivitede sadece IP değil, hesabın kendisi de engellenir
- Profil görüntüleme sınırlamaları: Ücretsiz hesaplar ayda sınırlı sayıda profil görüntüleyebilir
- Zorunlu JavaScript yürütme: Headless tarayıcı olmadan kazıma imkansızdır
LinkedIn kazıma stratejisi:
- Mobil proxy kullanın — en düşük engelleme riskini verirler. Bir mobil IP günde 100-200 profil görüntüleme için kullanılabilir.
- Headless tarayıcı zorunludur — gerçek tarayıcı parmak izi ayarıyla Puppeteer veya Playwright kullanın (ekran çözünürlüğü, WebGL, Canvas).
- Yavaş kazıma hızı — bir hesaptan saatte en fazla 20-30 profil. Görüntülemeler arasına 10-20 saniye gecikme ekleyin.
- Gerçek davranış taklidi — sayfa kaydırma, rastgele tıklamalar, profil bölümleri arasında geçişler.
- Hesap ısıtma — yeni LinkedIn hesapları hemen kazıma için kullanılamaz. 1-2 hafta normal kullanıcı aktivitesini taklit etmek gerekir.
- Hesap rotasyonu — yükü dağıtmak için farklı proxy'lerle birkaç hesap kullanın.
LinkedIn kazıma — tüm job board'lar arasında en karmaşık görevdir. Bu platformdan verilere ihtiyacınız varsa, resmi Sales Navigator API veya verileri yasal olarak sağlayan üçüncü taraf hizmetleri kullanmayı düşünün.
Yabancı job board'lar: Indeed, Glassdoor, Monster
Yabancı platformlar genellikle Rus sitelerinden (hh.ru hariç) daha sıkı korumaya sahiptir. Ana özellikler:
- Indeed — JavaScript kontrollü Cloudflare kullanır. Headless tarayıcı ve ilanlarını kazıdığınız ülkeden residential/mobil proxy'ler gerekir.
- Glassdoor — verilerin çoğunu görüntülemek için kimlik doğrulama gerektirir. Veri merkezi IP'lerini aktif olarak engeller. Residential proxy'ler ve yavaş kazıma hızı kullanın (8-12 saniye gecikme).
- Monster — ortaklar için API'ye sahiptir, ancak HTML kazıma için gerekli ülkeye coğrafi bağlantılı residential proxy'ler gerekir.
Tüm yabancı platformlar için proxy'lerin coğrafi bağlantısı kritik öneme sahiptir. ABD'deki ilanları kazıyorsanız, Amerikan residential IP'leri kullanın. Diğer ülkelerden IP'lerle yapılan istekler şüphe uyandırabilir ve engellemeye yol açabilir.
IP rotasyonu ve istekler arası gecikme yapılandırması
Proxy rotasyonunun doğru yapılandırılması, engellenme olmadan istikrarlı kazımanın anahtarıdır. İki ana stratejiyi inceleyelim: her istekte rotasyon ve zamana göre rotasyon.
Her istekte rotasyon (Rotating Proxies)
Bu yaklaşımda her HTTP isteği yeni bir IP adresinden gider. Bu en güvenli yöntemdir, ancak sınırlamaları vardır:
Avantajlar:
- Bir IP'nin aktivitesini izlemek imkansızdır
- Birim zamanda daha fazla istek yapılabilir
- Her IP için limitleri izlemeye gerek yoktur
Dezavantajlar:
- Oturumu korumak imkansızdır (IP değiştiğinde cookie'ler kaybolur)
- Kimlik doğrulamalı kazıma için uygun değildir
- Bazı siteler IP çok sık değişirse istekleri engeller
Her istekte rotasyon, kimlik doğrulama olmadan hh.ru ve Superjob'un genel sayfalarını kazımak için uygundur. Proxy sağlayıcısının parametresi aracılığıyla yapılandırılır (genellikle otomatik rotasyonlu özel bir endpoint'tir).
Zamana göre rotasyon (Sticky Sessions)
Bu yaklaşımda bir IP belirli bir süre (5-30 dakika) kullanılır, ardından otomatik değişim gerçekleşir. Bu, çoğu job board kazıma görevi için optimal seçenektir.
Önerilen rotasyon aralıkları:
| Site | Rotasyon aralığı | IP başına maks. istek | İstekler arası gecikme |
|---|---|---|---|
| hh.ru | 5-10 dakika | 60-80 | 4-8 saniye |
| Superjob | 10-15 dakika | 50-70 | 3-5 saniye |
| 30-60 dakika | 20-40 | 10-20 saniye | |
| Indeed | 10-20 dakika | 40-60 | 5-10 saniye |
| Glassdoor | 15-30 dakika | 30-50 | 8-12 saniye |
Rastgele gecikme yapılandırması
İstekler arasında sabit gecikme (örneğin, tam 5 saniye) koruma sistemleri için şüpheli görünür. Gerçek bir kullanıcı bu kadar hassasiyetle hareket edemez. Her zaman bir aralıkta rastgele gecikmeler kullanın.
Rastgele gecikme uygulama örnekleri:
// Python
import time
import random
# 4 ile 8 saniye arası gecikme
delay = random.uniform(4, 8)
time.sleep(delay)
# Daha karmaşık mantık: bazen uzun duraklama yapın
if random.random() < 0.1: # %10 olasılık
time.sleep(random.uniform(15, 30)) # Kullanıcının dikkatinin dağılmasını taklit edin
else:
time.sleep(random.uniform(4, 8))
// JavaScript / Node.js
const sleep = (min, max) => {
const delay = Math.random() * (max - min) + min;
return new Promise(resolve => setTimeout(resolve, delay * 1000));
};
// Kullanım
await sleep(4, 8); // 4-8 saniye gecikme
// Uzun duraklama olasılığıyla
if (Math.random() < 0.1) {
await sleep(15, 30); // %10 uzun duraklama olasılığı
} else {
await sleep(4, 8);
}
%5-10 olasılıkla rastgele uzun duraklamalar (15-30 saniye) eklemek, kazıyıcının davranışını telefon görüşmesi veya başka bir göreve dikkati dağılabilen gerçek bir kullanıcıya daha çok benzetir.
Captcha ve diğer engellemelerin işlenmesi
Proxy ve gecikmelerin doğru yapılandırılmasında bile captcha veya diğer engelleme türleriyle karşılaşabilirsiniz. Bu durumlara nasıl doğru tepki verileceğini inceleyelim.
Job board engelleme türleri
1. HTTP 429 Too Many Requests — en yaygın engelleme türü. Site, istek limitini aştığınızı açıkça bildirir. Genellikle yanıt başlığında isteği kaç saniye sonra tekrarlayabileceğinizi belirten Retry-After vardır.
Nasıl işlenir: Hemen proxy'yi değiştirin ve mevcut IP'yi Retry-After'da belirtilen süre boyunca kara listeye ekleyin (genellikle 1-6 saat). Retry-After yoksa, IP'yi 2 saat kara listeye ekleyin.
2. HTTP 403 Forbidden — IP sunucu düzeyinde engellenmiştir. Bu, birkaç saatten bir güne kadar sürebilen daha ciddi bir engellemedir.
Nasıl işlenir: Proxy'yi değiştirin ve IP'yi uzun vadeli kara listeye ekleyin (24 saat). Logları analiz edin: belki çok agresif kazıyorsunuz veya residential gerektiğinde veri merkezi IP'leri kullanıyorsunuz.
3. Captcha (CAPTCHA) — site "ben robot değilim" kontrolü gösterir. Bu, davranışınızın şüpheli göründüğü, ancak IP'nin henüz tamamen engellenmediği anlamına gelir.
Nasıl işlenir: Üç seçenek vardır:
- Proxy değişimi — en basit yol. Mevcut IP 6-12 saat kara listeye eklenir.
- Otomatik captcha çözümü — 2Captcha, Anti-Captcha, CapSolver gibi hizmetlerin kullanımı. 1000 çözüm için $1-3 tutarlar.
- Manuel çözüm — kazıma zaman açısından kritik değilse, captcha manuel çözüm için operatöre gönderilebilir.
4. Cloudflare Challenge — tarayıcıda kod yürütülmesini gerektiren JavaScript kontrolü. Normal HTTP kütüphanesi bu kontrolü geçemez.
Nasıl işlenir: Gerçek parmak izi ayarıyla headless tarayıcı (Puppeteer, Playwright, Selenium) kullanın. puppeteer-extra-plugin-stealth gibi kütüphaneler headless modunun tespitini aşmaya yardımcı olur.
Captcha çözüm hizmetlerinin entegrasyonu
Captcha'yı otomatik olarak çözmeye karar verdiyseniz, popüler 2Captcha hizmetiyle entegrasyon örneği:
// 2captcha-python kütüphanesi kullanan Python
from twocaptcha import TwoCaptcha
import requests
solver = TwoCaptcha('YOUR_API_KEY')
try:
# reCAPTCHA v2 çözümü
result = solver.recaptcha(
sitekey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
url='https://hh.ru/search/vacancy',
proxy={
'type': 'HTTPS',
'uri': 'login:password@ip:port'
}
)
# Çözüm tokenini alın
captcha_token = result['code']
# Token ile istek gönderin
response = requests.post(
'https://hh.ru/search/vacancy',
data={
'g-recaptcha-response': captcha_token,
# diğer form parametreleri
},
proxies={
'http': 'http://login:password@ip:port',
'https': 'http://login:password@ip:port'
}
)
except Exception as e:
print(f'Captcha çözüm hatası: {e}')
Bir captcha'yı çözmek 10-30 saniye sürer ve yaklaşık $0.001-0.003 tutar. Büyük ölçekli kazıma için bu pahalı olabilir, bu nedenle captcha'nın mümkün olduğunca az görünmesi için kazımayı yapılandırmak daha iyidir.
İzleme ve uyarı sistemi
Kazıyıcının istikrarlı çalışması için engelleme izleme ve otomatik uyarılar yapılandırmak önemlidir:
Ne izlenmeli:
- Başarılı istek yüzdesi — %90'ın altına düşerse, proxy'leri ve ayarları kontrol etmek gerekir
- Saatte captcha sayısı — 5-10'dan fazlaysa, çok agresif kazıyorsunuz
- Ortalama proxy yanıt hızı — keskin bir şekilde artarsa, proxy'ler aşırı yüklenmiş olabilir
- 429/403 hata sayısı — proxy kalitesi ve ayarların doğruluğunun göstergesi
- Engellenen IP listesi — aynı IP sürekli engelleniyorsa, havuzdan çıkarın
Başarılı istek yüzdesi eşik değerin altına düşerse bildirim göndermeyi (Telegram, email, Slack) yapılandırın. Bu, sorunlara hızlı tepki vermenizi ve kazıma zamanını kaybetmemenizi sağlar.
Popüler kazıma araçlarında proxy yapılandırması
Job board kazıma için en popüler araçlarda proxy'nin nasıl yapılandırılacağını inceleyelim: Python (requests, Scrapy), Node.js (axios, Puppeteer) ve hazır çözümler.
Python: requests ve Scrapy
Python — requests, BeautifulSoup ve Scrapy kütüphaneleri sayesinde kazıma için en popüler dildir.
requests kütüphanesi ile örnek:
import requests
import random
import time
# Proxy listesi (sağlayıcıdan alın)
PROXIES = [
'http://user:[email protected]:8080',
'http://user:[email protected]:8080',
'http://user:[email protected]:8080'
]
# Rotasyon için User-Agent listesi
USER_AGENTS = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'
]
def parse_vacancy(url):
proxy = random.choice(PROXIES)
user_agent = random.choice(USER_AGENTS)
headers = {
'User-Agent': user_agent,
'Accept': 'text/html,application/xhtml+xml',
'Accept-Language': 'ru-RU,ru;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive'
}
proxies = {
'http': proxy,
'https': proxy
}
try:
response = requests.get(
url,
headers=headers,
proxies=proxies,
timeout=30
)
if response.status_code == 200:
return response.text
elif response.status_code == 429:
print(f'{proxy} için hız limiti, proxy değiştiriliyor')
# Proxy'yi geçici olarak listeden kaldırın
return None
else:
print(f'Hata {response.status_code}')
return None
except Exception as e:
print(f'İstek hatası: {e}')
return None
# Kullanım
for i in range(100):
html = parse_vacancy('https://hh.ru/vacancy/123456')
if html:
# Veri işleme
pass
# Rastgele gecikme
time.sleep(random.uniform(4, 8))
Scrapy yapılandırma örneği:
# settings.py
# Proxy desteğini etkinleştirin
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
'scrapy_rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'scrapy_rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
# Proxy listesi
ROTATING_PROXY_LIST = [
'http://user:[email protected]:8080',
'http://user:[email protected]:8080',
'http://user:[email protected]:8080'
]
# Otomatik yasak tespiti
ROTATING_PROXY_BAN_POLICY = 'scrapy_rotating_proxies.policy.BanDetectionPolicy'
# İstekler arası gecikme
DOWNLOAD_DELAY = 5
RANDOMIZE_DOWNLOAD_DELAY = True # Rastgele gecikme ±%50
# User-Agent rotasyonu
DOWNLOADER_MIDDLEWARES.update({
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400,
})
# Maksimum eşzamanlı istek
CONCURRENT_REQUESTS = 4
CONCURRENT_REQUESTS_PER_DOMAIN = 1
Node.js: Proxy'li Puppeteer
JavaScript'li siteleri (LinkedIn, Indeed) kazımak için headless tarayıcı gerekir. Puppeteer — Node.js için en popüler çözümdür.
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
// Headless tarayıcı tespitini aşmak için eklenti
puppeteer.use(StealthPlugin());
async function parseWithProxy() {
const proxy = 'http://user:[email protected]:8080';
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=${proxy}`,
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-blink-features=AutomationControlled'
]
});
const page = await browser.newPage();
// Gerçek User-Agent ayarlayın
await page.setUserAgent(
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
);
// Viewport ayarlayın
await page.setViewport({
width: 1920,
height: 1080
});
try {
await page.goto('https://hh.ru/search/vacancy', {
waitUntil: 'networkidle2',
timeout: 30000
});
// Sayfanın yüklenmesini bekleyin
await page.waitForSelector('.vacancy-serp-item');
// Verileri çıkarın
const vacancies = await page.evaluate(() => {
const items = document.querySelectorAll('.vacancy-serp-item');
return Array.from(items).map(item => ({
title: item.querySelector('.vacancy-serp-item__title')?.textContent,
company: item.querySelector('.vacancy-serp-item__meta-info-company')?.textContent,
salary: item.querySelector('.vacancy-serp-item__sidebar')?.textContent
}));
});
console.log(vacancies);
} catch (error) {
console.error('Kazıma hatası:', error);
} finally {
await browser.close();
}
}
parseWithProxy();
Sonuç ve öneriler
Job board'lardan başarılı veri kazıma, doğru proxy türü seçimi, IP rotasyonunun akıllı yapılandırması ve gerçek kullanıcı davranışının taklit edilmesinin bir kombinasyonudur. Ana öneriler:
İstikrarlı kazıma için en iyi uygulamalar:
- Basit görevler için (günde 500 ilana kadar) — daha hızlı ve daha ucuz olan veri merkezi proxy'leri kullanın
- Büyük ölçekli kazıma için (günde 1000+ ilan) — IP rotasyonlu residential proxy'ler optimal seçimdir
- LinkedIn ve kimlik doğrulama için — mobil proxy'ler en düşük engelleme riskini sağlar
- Her zaman rastgele gecikmeler kullanın — sabit aralıklar şüphe uyandırır
- Engelleme izleme yapılandırın — başarı oranı %90'ın altına düşerse uyarı alın
- Resmi API'leri tercih edin — birçok site yasal veri erişimi için API sağlar
- Küçük başlayın — üretim ortamına geçmeden önce küçük hacimde ayarları test edin
Doğru yaklaşımla, job board'lardan veri kazıma istikrarlı ve öngörülebilir bir süreç haline gelir. Proxy'lere yatırım yapın, izleme yapılandırın ve sitenin kullanım koşullarına saygı gösterin — bu uzun vadeli başarının anahtarıdır.
Yüksek kaliteli proxy'lere ihtiyacınız varsa, ProxyCove job board kazıma için optimize edilmiş residential ve mobil proxy'ler sunar. Tüm popüler Rus ve uluslararası platformlarla test edilmiş geniş IP havuzu, esnek rotasyon ve 7/24 destek.