KYC olmadan — kimlik yok, selfie yok, belge yok · Kripto ile ödeyin: BTC, USDT, USDC, ETH, SOL, LTC
Dil: Türkçe
Kripto ile satın al

Rehber · Python

Python proxyleri: requests, httpx, aiohttp ve Scrapy

En çok kullanılan dört Python istemcisi için çalışan kod, hedefe yönelik ve yapışkan proxy URL'leri oluşturan bir yardımcı ile.

Son güncelleme: · 6 dk okuma

Hızlı cevap

Python'da proxyleri nasıl kullanırım?

HTTP istemcinize http://USERNAME-country-ae:[email protected]:7777 gibi bir proxy URL'si geçirin. Gizliliği ön planda tutan, KYC olmadan hizmet veren Nameless Proxy, requests, httpx, aiohttp ve Scrapy ile çalışır ve 7778 portunda socks5h:// ile uyumludur. Hedefleme kullanıcı adında bulunur. Konut trafiği $0,53/GB'ten başlar. KYC olmadan — kimlik, selfie veya belge gerekmez. Ödemeyi kripto ile yapın.

Python kurulumu özet

Proxy URL'sihttp://USER-country-xx:[email protected]:7777
SOCKS5socks5h://…:7778 ile requests[socks]
requestsproxies={"http": url, "https": url}
httpx 0.26+httpx.Client(proxy=url) ve httpx.AsyncClient(proxy=url)
aiohttpsession.get(url, proxy=proxy_url) (HTTP proxyleri)
Scrapyrequest.meta["proxy"], bir downloader middleware ile ayarlanır
Yapışkan IPŞehirden sonra -session-{id}-ttl-{minutes} ekleyin, 60 dakikaya kadar

Proxy'yi requests ile nasıl kullanırım?

Hem http hem de https anahtarları için requests'e aynı proxy URL'sini verin. HTTPS hedefleri CONNECT tüneli üzerinden gider, böylece TLS bağlantısı scriptiniz ile site arasında kalır. Her zaman bir zaman aşımı ayarlayın.

requests: Birleşik Arap Emirlikleri IP'si üzerinden tek çağrı
# pip install requests
import requests

USERNAME = "USERNAME"   # base proxy username from the client area
PASSWORD = "PASSWORD"   # proxy password (not your account password)
HOST = "gw.namelessproxy.com"
HTTP_PORT = 7777
SOCKS_PORT = 7778

proxy = f"http://{USERNAME}-country-ae:{PASSWORD}@{HOST}:{HTTP_PORT}"
proxies = {"http": proxy, "https": proxy}

r = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=30)
print(r.json())   # {'ip': '...'}

Hedefe yönelik ve kalıcı proxy URL'lerini nasıl oluştururum?

Her kütüphane için bir yardımcı kullanın. Kullanıcı adı USERNAME-country-{cc}-city-{city}-session-{id}-ttl-{minutes}'i takip eder, böylece yardımcı şu sırayla parçalar ekler: ülke, sonra şehir, sonra oturum ve TTL. Oturum olmadan dönen IP alırsınız; oturumla, TTL süresince IP aynı kalır.

proxy_url(): hedefleme için tek yer
import uuid

def proxy_url(country, city=None, session=None, ttl=30, scheme="http"):
    """Build a gateway URL. Targeting lives in the username, in this order:
    country -> city -> session -> ttl."""
    user = f"{USERNAME}-country-{country.lower()}"
    if city:
        user += f"-city-{city.lower().replace(' ', '_')}"
        if session:
            user += f"-session-{session}-ttl-{ttl}"
    port = SOCKS_PORT if scheme.startswith("socks") else HTTP_PORT
    return f"{scheme}://{user}:{PASSWORD}@{HOST}:{port}"

def new_session():
    """A fresh session ID = a fresh sticky IP."""
    return uuid.uuid4().hex[:10]

# Rotating IP in Egypt, and a sticky IP in Abu Dhabi for 30 minutes
rotating = proxy_url("eg")
sticky = proxy_url("ae", city="Abu Dhabi", session=new_session(), ttl=30)

Python'da SOCKS5'i nasıl kullanırım?

SOCKS ekstra paketini yükleyin ve socks5h:// şemasını kullanın. h proxy'nin ana bilgisayar adlarını çözmesini sağlar, böylece DNS sorguları da hedef ülkeden çıkar. Düz socks5:// DNS'i kendi makinenizde çözer.

SOCKS5 üzerinden requests
# pip install "requests[socks]"
# socks5h:// = the proxy resolves DNS, so lookups also exit in the target country
proxy = proxy_url("ke", scheme="socks5h")
r = requests.get("https://api.ipify.org", proxies={"http": proxy, "https": proxy}, timeout=30)
print(r.text)

Başarısız istekleri yeni IP ile nasıl tekrar denerim?

Bağlantı hatalarında ve 429 ile 5xx yanıtlarında, üstel geri çekilme ve biraz rastgele gecikme ile tekrar deneyin. Dönen kullanıcı adıyla, her yeni bağlantı yeni bir IP'den çıkabilir, böylece tekrar deneme aynı zamanda yeni bir IP'dir. Kalıcı işler için IP başarısız olduğunda yeni bir oturum kimliği başlatın.

Geri çekilme ve tekrar deneme
import random
import time

RETRY_STATUS = {429, 500, 502, 503, 504}

def fetch(url, country="ae", attempts=4):
    """Retry with exponential backoff. Each attempt opens a new connection,
    so a rotating username exits from a new IP."""
    for attempt in range(attempts):
        proxy = proxy_url(country)
        try:
            r = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)
            if r.status_code not in RETRY_STATUS:
                return r
        except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
            pass  # ProxyError is a ConnectionError: retry on a new IP
        time.sleep(min(2 ** attempt + random.random(), 30))
    raise RuntimeError(f"Giving up on {url} after {attempts} attempts")

httpx'i, senkron ve asenkron nasıl kullanırım?

httpx 0.26'dan itibaren, bir istemci tek bir proxy= argümanı alır; eski proxies= 0.28'de kaldırıldı. Bir istemci bağlantıları canlı tutar ve bir canlı bağlantı üzerindeki istekler aynı çıkış IP'sini paylaşır. İhtiyacınıza göre yeni bir istemci açın veya kasıtlı olarak kalıcı oturum kullanın.

httpx: kalıcı istemci ve asenkron toplu işlem
# pip install httpx   (0.26 or later: the argument is "proxy", not "proxies")
import asyncio
import httpx

# Sync: one sticky IP in Nairobi for 10 minutes
with httpx.Client(proxy=proxy_url("ke", city="nairobi", session=new_session(), ttl=10), timeout=30) as client:
    print(client.get("https://api.ipify.org").text)

# Async: 20 connections at most, rotating IPs in Nigeria
async def main(urls):
    limits = httpx.Limits(max_connections=20)
    async with httpx.AsyncClient(proxy=proxy_url("ng"), timeout=30, limits=limits) as client:
        results = await asyncio.gather(*(client.get(u) for u in urls), return_exceptions=True)
    for url, res in zip(urls, results):
        print(url, res.status_code if isinstance(res, httpx.Response) else repr(res))

asyncio.run(main(["https://api.ipify.org"] * 5))

aiohttp ile çok sayıda isteği nasıl çalıştırırım?

aiohttp proxyyi her istek için URL içindeki kimlik bilgileriyle alır. Sadece HTTP proxylerini destekler; SOCKS5 için aiohttp-socks gibi ekstra paket gerekir. Eşzamanlılığı bir semafor ile sınırlandırın: yaklaşık 10-20 paralel istek başlatın ve hata oranınız düşük kaldıkça artırın.

Eşzamanlılık sınırı ile aiohttp
# pip install aiohttp   (HTTP proxies only; the credentials can sit in the proxy URL)
import asyncio
import aiohttp

async def fetch(session, url, sem):
    async with sem:
        async with session.get(url, proxy=proxy_url("eg")) as r:
            return r.status, await r.text()

async def main(urls):
    sem = asyncio.Semaphore(20)   # concurrency cap
    timeout = aiohttp.ClientTimeout(total=30)
    async with aiohttp.ClientSession(timeout=timeout) as session:
        results = await asyncio.gather(*(fetch(session, u, sem) for u in urls), return_exceptions=True)
    print(results)

asyncio.run(main(["https://api.ipify.org"] * 5))

Proxyyi Scrapy'e nasıl eklerim?

request.meta["proxy"] ayarlayan küçük bir downloader middleware yazın. Scrapy'nin yerleşik HttpProxyMiddleware'u kimlik bilgilerini Proxy-Authorization başlığına dönüştürür. Middleware'inizin 750'nin altında bir numarası olsun ki önce çalışsın. İstek başına meta anahtarlar bir örümceğin ülkeleri ve kalıcı oturumları karıştırmasına izin verir.

middlewares.py
# myproject/middlewares.py
USERNAME = "USERNAME"
PASSWORD = "PASSWORD"
GATEWAY = "gw.namelessproxy.com:7777"

class NamelessProxyMiddleware:
    """Set the proxy per request from request.meta:
    country (default 'ae'), optional city, optional session + ttl."""

    def process_request(self, request, spider):
        meta = request.meta
        user = f"{USERNAME}-country-{meta.get('country', 'ae')}"
        if meta.get("city"):
            user += f"-city-{meta['city']}"
            if meta.get("session"):
                user += f"-session-{meta['session']}-ttl-{meta.get('ttl', 10)}"
        # Scrapy's HttpProxyMiddleware turns the credentials into Proxy-Authorization
        meta["proxy"] = f"http://{user}:{PASSWORD}@{GATEWAY}"
settings.py
# myproject/settings.py
DOWNLOADER_MIDDLEWARES = {
    # Below 750 so it runs before Scrapy's built-in HttpProxyMiddleware
    "myproject.middlewares.NamelessProxyMiddleware": 350,
}
CONCURRENT_REQUESTS = 16
DOWNLOAD_TIMEOUT = 30
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504, 408]
AUTOTHROTTLE_ENABLED = True
ROBOTSTXT_OBEY = True

# In a spider:
# yield scrapy.Request(url, meta={"country": "sa", "city": "riyadh", "session": "cart01"})

Sıkça sorulan sorular

Python'da neden 407 veya ProxyError alıyorum?

407, geçidin kimlik bilgilerini reddettiği anlamına gelir. Müşteri alanındaki temel kullanıcı adı ve konut proxy şifresini, hedefleme parçalarının sırasını ve şifredeki özel karakterlerin URL kodlamalı olması gerektiğini kontrol edin. 407 olmadan ProxyError genellikle yanlış port veya bir güvenlik duvarı anlamına gelir. Aynı URL'yi hızlı başlangıç kılavuzundan curl ile test edin.

IP'im neden istekler arasında değişmiyor?

İstemciniz muhtemelen açık tutulan bir bağlantıyı yeniden kullanıyor. Bir requests.Session, httpx istemcisi veya aiohttp oturumu bağlantıları açık tutar ve bir bağlantı bir çıkış IP'si tutar. Her istek için yeni bir IP istiyorsanız, oturum olmadan requests.get çağırın veya yeni bir istemci açın. Oturum kimliği eklediyseniz, IP kasıtlı olarak sabittir.

requests, httpx veya aiohttp mu kullanmalıyım?

Basit betikler ve küçük işler için requests kullanın. Hem senkron hem asenkron kod için tek bir kütüphane veya HTTP/2 istiyorsanız httpx kullanın. Büyük asenkron taramalar için ve eşzamanlılığı kendiniz kontrol etmek istiyorsanız aiohttp kullanın. Zamanlama, tekrar denemeler ve iş akışları gereken tam bir tarayıcı için Scrapy kullanın. Dörtü de aynı proxy URL'si ile çalışır.

Bir betik aynı anda birden fazla ülkeyi kullanabilir mi?

Evet. Hedefleme her proxy URL'sinin bir parçasıdır, bu yüzden istek başına veya istemci başına farklı URL oluşturun: örneğin BAE için proxy_url("ae") ve Nijerya için proxy_url("ng"). Trafik ülke fark etmeksizin aynı bakiyeden düşülür ve GB başına fiyat ülkeye göre değişmez.

Bir scraper ne kadar trafik kullanır?

Sayfalara bağlıdır: bir HTML sayfası genellikle onlarca ila yüzlerce kilobayttır, resimler ve betikler çok daha fazla ekler. Trafik ondalık GB (1 GB = 1.000.000.000 bayt) olarak sayılır ve müşteri alanı abonelik ve alt kullanıcı bazında günlük kullanımı gösterir. Maliyetleri düşük tutmak için sadece ayrıştırdığınızı alın ve resimleri atlayın.

Python kodu özel mobil portlarla çalışır mı?

Evet, geçit değerleri yerine müşteri alanından portun kendi host, port, kullanıcı adı ve şifresi ile. Özel bir portun ülkesi ve operatörü kiralama sırasında seçilir ve daha sonra taşınabilir. Python'dan IP değiştirmek için mobil IP döndürme kılavuzuna bakın.

Python kodunuzu konut IP'leri üzerinden çalıştırın

$0,53/GB üzerinden, kripto ile ödenir. KYC olmadan — kimlik, selfie veya belge gerekmez.

$0,53/GB'dan · KYC olmadan

Proxy satın al