Hızlı cevap
Bir scraper 403, 429 ve CAPTCHA yanıtlarıyla nasıl başa çıkmalı?
Onları engel değil, sinyal olarak değerlendirin. 429 durumunda Retry-After kadar bekleyin ve o sunucudaki hızınızı düşürün. 403 durumunda, bir duraklamadan sonra bir kez yeniden deneyin, ardından durun ve sitenin kurallarını kontrol edin. CAPTCHA durumunda o sunucuyu durdurun: otomatik çözmeyin. CrawlRelay konut proxyleri, $0,50/GB kaynağından, yükü dağıtır ve konum ayarlar; site kararını atlatmanın yolu değillerdir. KYC olmadan. Kripto ile ödeme yapın.
Üç sinyal bir bakışta
| 429 Çok Fazla İstek | Çok hızlısınız. Retry-After'a uyun, geri çekilin, aynı sunucudaki eşzamanlılığı azaltın |
|---|---|
| 403 Yasak | Bu istek reddedildi. Bir kez yeniden deneyin, sonra durup siteyi gözden geçirin |
| CAPTCHA veya doğrulama sayfası | Site insan olup olmadığınızı anlamak istiyor. Sunucuyu durdurun ve yavaşlayın |
| Tarama kuralları standardı | robots.txt, RFC 9309; Crawl-delay yaygın bir uzantıdır |
| Desteklemediğimiz şeyler | CAPTCHA çözümü, gizli eklentiler, parmak izi taklitleri |
Her sinyal tarayıcıma ne söylüyor?
- 429 en kibar olandır: içerik mevcut, ancak hızınızla değil. RFC 6585 bunu tanımlar, genellikle
Retry-Afterbaşlığıyla ne zaman tekrar deneneceğini bildirir. - 403 bu isteğin reddidir. Düzeltilebilir olabilir (yanlış ülke, eksik başlıklar, çok hızlı) veya nihai (site bu içeriğe otomatik erişime izin vermez).
- CAPTCHA veya doğrulama sayfası, genellikle 403 veya 503 durumu ile gelir, sitenin bot yönetimi trafiğinize şüpheyle baktığını gösterir. Bu bir yükseltmedir: görmezden gelinen 429'lardan sonraki adımdır.
Üçü de artan sinyallerdir. 429'ları görmezden gelen siteler önce 403 ve doğrulamalara, sonra tüm IP aralıklarında uzun engellere geçer, bu da o aralıktaki tüm kullanıcıları etkiler.
Her sinyal için tarayıcım ne yapmalı?
| Sinyal | İlk tepki | Devam ederse | Durdurma zamanı |
|---|---|---|---|
| 429 | Retry-After bekle veya jitter ile üstel olarak geri çekil | O sunucudaki eşzamanlı işlemi yarılaştır | Retry-After artmaya devam ediyor veya 429 tek tek devam ediyor |
| 403 | Duraktan sonra bir kere yeniden dene, aynı ülke | Aynı ülkeden bir tarayıcı ile karşılaştır; robots.txt ve şartları kontrol et | Aynı URL modeliyle ikinci 403 |
| CAPTCHA / doğrulama | Sunucuyu birkaç dakika duraklat | Çok daha düşük hızda devam et | Düşük hızda doğrulama geri geliyorsa: site otomatik erişim istemiyor |
| 503 ile Retry-After | İstendiği kadar bekle | Sunucuyu duraklat | Çoğu istek birkaç dakikadan uzun başarısız oluyorsa |
Doğru tepki veren bir tarayıcıyı nasıl kurarım?
Kuralları her örümcek için değil, fetcher içinde koyun. Bu örümcek bir seferde bir istek yapar, robots.txt ve Crawl-delay'a uyar, Retry-After kadar bekler ve bir sunucudan art arda üç red alınca durur. 4xx robots.txt'yi izin, 5xx'yi tam yasak olarak kabul eder, RFC 9309'a göre.
import time
import urllib.robotparser
from urllib.parse import urlsplit
import requests
PROXY = "http://USERNAME-country-us:[email protected]:7777"
USER_AGENT = "ExampleCrawler/1.0 (+https://example.com/crawler-info)"
class PoliteFetcher:
"""One request at a time per host; robots.txt, Crawl-delay and Retry-After honoured."""
def __init__(self, min_interval=1.0, max_refusals=3):
self.min_interval, self.max_refusals = min_interval, max_refusals
self.http = requests.Session()
self.http.proxies = {"http": PROXY, "https": PROXY}
self.http.headers["User-Agent"] = USER_AGENT
self.robots, self.next_time, self.refusals = {}, {}, {}
def _robots(self, root):
if root not in self.robots:
rp = urllib.robotparser.RobotFileParser(root + "/robots.txt")
try:
r = self.http.get(root + "/robots.txt", timeout=(10, 30))
if r.status_code >= 500:
rp.parse(["User-agent: *", "Disallow: /"]) # unreachable: assume disallow
else:
rp.parse(r.text.splitlines() if r.status_code == 200 else []) # 4xx: allowed
except requests.RequestException:
rp.parse(["User-agent: *", "Disallow: /"])
self.robots[root] = rp
return self.robots[root]
def get(self, url):
scheme, host = urlsplit(url)[:2]
if self.refusals.get(host, 0) >= self.max_refusals:
return None # this host said no: stop asking
rp = self._robots("%s://%s" % (scheme, host))
if not rp.can_fetch(USER_AGENT, url):
return None
delay = max(self.min_interval, rp.crawl_delay(USER_AGENT) or 0)
wait = self.next_time.get(host, 0) - time.monotonic()
if wait > 0:
time.sleep(wait)
r = self.http.get(url, timeout=(10, 30))
pause = delay
if r.status_code in (429, 503):
retry_after = r.headers.get("Retry-After", "")
pause = max(delay, int(retry_after) if retry_after.isdigit() else 60)
refused = r.status_code in (403, 429) or "captcha" in r.text[:5000].lower()
self.refusals[host] = self.refusals.get(host, 0) + 1 if refused else 0
self.next_time[host] = time.monotonic() + pause
return r
fetcher = PoliteFetcher()
resp = fetcher.get("https://example.com/")
print(resp.status_code if resp is not None else "skipped")Hangi durumlarda 403 meşru şekilde düzelir?
Birçok 403 sebebi sizin tarafınızdandır ve bunları düzeltmek mantıklıdır:
- Yanlış ülke. Birçok site bölgeseldir. Hedef ülkeyi
-country-<code>ile seçin. - Eksik başlıklar.
Accept,Accept-Languageve iletişim URL'si içeren güvenilir kullanıcı aracısı gönderin. Sıradan HTTP istemcisinde tarayıcıya benzer kullanıcı aracısı tutarsızdır ve sıklıkla reddedilir. - Kendi hızınız. N istekten sonra başlayan 403 hız problemidir; yavaşlayın.
Düzeltme olmayanlar: kullanıcı ajanlarını döndürerek çok farklı kişiler gibi görünmeye çalışmak, tarayıcı parmak izi taklitleri veya kasıtlı blokları aşmak için IP değiştirmek. Site otomatik trafiği engellemek için hosting aralıklarını filtreliyorsa, bir konut proxy IP'si bunu izin vermez.
Neden sadece CAPTCHA'ları çözmüyorsunuz?
Çünkü CAPTCHA, site tarafından sorulan ve yanlış cevaplayacağınız bir sorudur. Otomatik çözüm, nazik bir tarayıcıyı erişim kontrolünü aşmak için yapılmış bir araca dönüştürür ve bu da yasal riskinizi artırır: 2026'daki ABD davaları, Google v. SerpApi ve Reddit v. SerpApi gibi arama kazıma davaları, sanıkların DMCA'nın anti-çevreleme kuralı kapsamında bir anti-bot sistemini aşmakla suçlandığı iddialara dayanır. Mahkemeler henüz bu soruyu netleştirmedi, ancak risk gerçek.
CrawlRelay CAPTCHA çözme veya bot tespitinden kaçma desteği sunmaz ve kabul edilebilir kullanım politikası](/acceptable-use/) bunları geçit üzerinden yasaklar. Eğer bir zorlama (challenge) arkasında veri ihtiyacınız varsa, siteye erişim isteyin, API'sini kullanın veya veriyi lisanslayın.
Ne zaman siteyle iletişime geçmeliyim?
Varsayılanların izin verdiğinden daha fazlasına ihtiyacınız olduğunda. Birçok site API, veri akışı, iş ortağı programı veya kendini tanıtan ve amacını açıklayan bir tarayıcı için daha yüksek limit sunar. Kullanıcı ajanınıza bir iletişim URL'si ekleyin, tarayıcınızı ve nasıl çıkış yapılacağını açıklayan bir sayfa tutun ve suiistimal bildirimlerine hızlı yanıt verin. Ulaşılabilen bir tarayıcı uyarı alır, engellenmeden önce.
403, 429 ve CAPTCHA'lar: sorular
Konut proxy CAPTCHA'ları durdurur mu?
Buna güvenmeyin. Bir konut çıkışı, sitenin gördüğü IP'yi değiştirir, tarayıcınızın davranışını değil: hızı veya davranışınız nedeniyle ortaya çıkan CAPTCHA'lar devam eder ve amaç da budur. Talep oranı düşükken zorlama devam ederse, site o içeriğe otomatik erişim istemez.
Retry-After olmadan 429 aldıktan sonra ne kadar beklemeliyim?
Birkaç saniyeyle başlayın ve her yeni 429'da beklemeyi ikiye katlayın, rastgele ekstra ekleyin ve yaklaşık bir dakika ile sınırlayın. İstekler tekrar başarılı olduğunda, 429'a neden olan hızdan daha düşük bir hızda devam edin ve hata oranı sabit kaldıkça yavaş yavaş artırın.
Oran limitlerini aşmamak için IP değiştirmek serbest mi?
Değişim, yükü çıkışlar arasında dağıtır ve konum seçmenizi sağlar, bu normaldir. Ancak site tarafından reddedilen bir hızı korurken IP başına limiti aşarak değişim yapmak kaçaktır. Çoğu kullanım şartı bunu yasaklar ve bizim kabul edilebilir kullanım politikamız da.
Tarayıcım hangi kullanıcı ajanını göndermeli?
Kendi kullanıcı ajanınızı: bir isim, sürüm ve tarayıcıyı ve iletişim bilgilerinizi açıklayan bir URL, örneğin ExampleCrawler/1.0 (+https://example.com/crawler-info). Googlebot veya GPTBot gibi diğer tarayıcıların isimlerini kullanmayın.
Kaynaklar (4)
- RFC 9309: Robots Exclusion Protocol — IETF (2022-09)
- RFC 6585: Ek HTTP Durum Kodları (429) — IETF (2012-04)
- Reddit v. SerpApi LLC — Loeb & Loeb (2026-08)
- Google v. SerpApi: mahkeme davanın reddini kabul etti — SerpApi (2026-07-21)
Nazik tarayıcılar için konut proxy
$1,50 için 1 GB, $0,50/GB 50 GB'ten.