Liste düzeyinde dönüş
ProxySale proxy’leri listenin kendisi üzerinden döndürür. Havuz bütün gün ölü adresleri kaybeder ve yenilerini kazanır; yazılımınız liste bağlantısını her istediğinde o an çalışan kümeyi alır. Bizim tarafta dönüş kuralı ayarlamazsınız: bağlantıyı her 8 ila 10 dakikada bir yeniden yükleyin, liste güncel kalsın.
Ardından her istek için satırı yazılımınız seçer. Çoğu scraper ve SEO aracı istek başına rastgele bir proxy alır ya da bir hatadan sonra değiştirir; yük binlerce adrese yayılır.
Dönen proxy scraper’lara neden yardım eder
Arama motorları, pazar yerleri ve fiyat karşılaştırma siteleri istekleri IP başına sayar. Dakikada yüzlerce istek gönderen tek bir adres captcha’ya ya da engele takılır. Aynı yükü dönen bir proxy listesine yayın; her adres yalnızca birkaç istek gönderir ve hedef sıradan ziyaretçilere yakın bir şey görür.
Dönüş ölü satırları da gizler. Başarısız bir istek başka bir adresten yeniden çıkar ve listenin bir sonraki yüklenmesi kötü satırı atar.
Yazılımınızda dönüşü kurmak
- A-Parser ve ZennoPoster: liste bağlantısını 10 dakikada bir yenilenen bir proxy kaynağı olarak ekleyin.
- Scrapy: listeyi istek başına rastgele satır seçen bir downloader middleware’e yükleyin.
- Python requests: listeyi bellekte tutun ve proxies sözlüğüne rastgele bir satır verin.
- bash’te curl: her çağrıdan önce
shuf -n 1ile bir satır alın.
Yeniden yüklemeyi 8 ila 10 dakikada bırakın. Dakikada bir gelen istekleri yavaşlatırız, havuz da zaten o kadar hızlı değişmez.
Dönüş stratejileri
- İstek başına rastgele bir satır: en basit ve yükü en eşit dağıtan şema.
- Kısa bir dizi için tek satır: site, bir arama sayfası ve sonraki sonuç sayfası gibi birkaç bağlantılı istek beklediğinde işe yarar.
- Hatada değiştirme: bir satırı yanıt verdiği sürece tutmak, captcha, zaman aşımı ya da 403 sonrası bırakmak.
- Dinlenme süresi: bir engelden sonra adresi 10 ila 15 dakika dönüşün dışında tutmak.
Çoğu scraper birinci ve üçüncüyü birleştirir: istek başına rastgele bir satır ve hatadan hemen sonra değiştirme. Captcha’ların ve başarısız isteklerin payını izleyin. Artarsa adres ekleyin ya da yavaşlayın.
Kaç adrese ihtiyacınız var
En zor hedefinize dakikadaki istekleri sayın ve bir adresin sorun çıkmadan gönderebileceği sayıya bölün. Site tek bir IP’den dakikada beş isteğe katlanıyorsa ve size 5.000 gerekiyorsa, gece düşüşü için pay da ekleyerek en az 1.000 canlı adres planlayın. Daha büyük işler toplu proxy sayfasında.
Havuzu hedefe göre seçin: küresel siteler için World MIX, AB mağazaları ve araması için Avrupa proxy, Yandex ve bölgesel pazar yerleri için BDT proxy, Baidu için Çin proxy.
Sabit adres isteyen işler
Bazı işler uzun süre aynı adresi ister: hesaplara giriş, sepeti korumak, antidetect tarayıcı profilleri çalıştırmak. Dönen paket listesi burada pek uymaz, çünkü adres havuzdan çıkabilir. Bu iş için Max havuzundan konut proxy’leri alın: ev cihazı çevrimiçi olduğu sürece her satırın üç dakikadan bir güne kadar süreli kendi oturumu vardır. Antidetect proxy’leri sayfası profillerin nasıl ayarlanacağını gösterir.
Açık sayfaları okuyan her iş için dönüş daha iyi uyar ve istek başına daha ucuzdur.
Her 10 dakikada bir yenilenen bir liste dosyası
Bazı araçlar proxy’leri yalnızca dosyadan okur. Bu dosyayı, listeyi her 10 dakikada bir indiren küçük bir betikle taze tutun. Aşağıdaki her betik önce geçici bir dosyaya yazar ve ana dosyayı yalnızca indirme tamamlanınca değiştirir; böylece yazılımınız asla yarım yazılmış ya da boş bir liste okumaz. YOUR_LIST_LINK yerine panelinizdeki liste bağlantısını koyun.
Linux: bir shell betiği ve cron
Betiği /opt/proxies/update-proxies.sh olarak kaydedin, chmod +x /opt/proxies/update-proxies.sh ile çalıştırılabilir yapın ve bir kez elle çalıştırın. Kaç proxy kaydettiğini ya da bağlantı yanıt vermezse bir hata yazar.
#!/bin/sh
LIST_URL="YOUR_LIST_LINK"
DEST="/opt/proxies/proxies.txt"
TMP="$DEST.tmp"
mkdir -p "$(dirname "$DEST")"
if curl -fsS --max-time 60 -o "$TMP" "$LIST_URL" && [ -s "$TMP" ]; then
mv "$TMP" "$DEST"
echo "$(date '+%F %T') saved $(wc -l < "$DEST") proxies"
else
rm -f "$TMP"
echo "$(date '+%F %T') download failed, kept the old list" >&2
exit 1
fiZamanlamayı crontab -e ile açın ve aşağıdaki satırı ekleyin. Cron betiği her 10 dakikada bir başlatır ve mesajlarını bir günlüğe ekler. Root olarak çalıştırın ya da iki yolu da ev dizininizdeki bir klasörle değiştirin.
*/10 * * * * /opt/proxies/update-proxies.sh >> /var/log/update-proxies.log 2>&1Windows: PowerShell ve Görev Zamanlayıcı
Betiği C:\proxies\update-proxies.ps1 olarak kaydedin ve bağlantıyı kontrol etmek için PowerShell’de bir kez çalıştırın.
$ListUrl = "YOUR_LIST_LINK"
$Dest = "C:\proxies\proxies.txt"
$Tmp = "$Dest.tmp"
New-Item -ItemType Directory -Force -Path (Split-Path $Dest) | Out-Null
try {
Invoke-WebRequest -Uri $ListUrl -OutFile $Tmp -UseBasicParsing -TimeoutSec 60
if ((Get-Item $Tmp).Length -eq 0) { throw "empty list" }
Move-Item -Force $Tmp $Dest
$count = (Get-Content $Dest | Measure-Object -Line).Lines
Write-Output "$(Get-Date -Format s) saved $count proxies"
} catch {
Remove-Item $Tmp -ErrorAction SilentlyContinue
Write-Output "$(Get-Date -Format s) download failed, kept the old list: $($_.Exception.Message)"
exit 1
}Betiği her 10 dakikada bir çalıştıran bir görev kaydedin: komutu Komut İstemi’ne ya da PowerShell’e yapıştırın. Görev yeniden başlatmalardan sonra da kalır ve Görev Zamanlayıcı’da UpdateProxies adıyla görünür. Oturumunuz açıkken çalışır; oturum olmadan çalışması için komut istemini yönetici olarak açın ve komuta /RU SYSTEM ekleyin.
schtasks /Create /TN "UpdateProxies" /SC MINUTE /MO 10 /F /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\proxies\update-proxies.ps1"Fareyi mi tercih ediyorsunuz? Görev Zamanlayıcı’yı açın, Temel Görev Oluştur’u seçin, günlük bir tetikleyici seçin, ardından görev özelliklerini açıp görevi her 10 dakikada bir Süresiz olarak yinele ayarını yapın. Eylem, powershell.exe programını -NoProfile -ExecutionPolicy Bypass -File C:\proxies\update-proxies.ps1 bağımsız değişkenleriyle başlatır.
Her sistem: Python
Python sürümü döngüde çalışır ve zamanlayıcıya ihtiyaç duymaz. Bir terminalde, screen ya da tmux içinde veya bir servis olarak başlatın. Python 3 ister, ek paket gerektirmez.
import time
import urllib.request
from pathlib import Path
LIST_URL = "YOUR_LIST_LINK"
DEST = Path("proxies.txt")
EVERY = 600
while True:
try:
data = urllib.request.urlopen(LIST_URL, timeout=60).read()
if not data.strip():
raise ValueError("empty list")
tmp = DEST.with_name(DEST.name + ".tmp")
tmp.write_bytes(data)
tmp.replace(DEST)
print(time.strftime("%Y-%m-%dT%H:%M:%S"), "saved", len(data.split()), "proxies", flush=True)
except Exception as error:
print(time.strftime("%Y-%m-%dT%H:%M:%S"), "download failed, kept the old list:", error, flush=True)
time.sleep(EVERY)Yazılımınızı kaydedilen dosyaya yönlendirin, böylece hep 10 dakikadan eski olmayan bir liste okur. Aralığı 10 dakikada tutun: daha sık istekleri yavaşlatırız.
Protokoller, fiyatlar ve test
Her dönen paket satırı tek portta SOCKS5, SOCKS4, HTTP ve HTTPS üzerinden çalışır, bkz. SOCKS5 proxy’leri ve HTTP proxy’leri. Boyutlar ve süreler fiyat listesinde, herhangi bir paketten bir saat ücretsiz ise iletişim sayfasında.
