Programa de referidos
Desarrollo

Configuración de proxy en Scrapy

Añade proxies rotativos a tu araña de Scrapy con dos líneas de configuración.

Scrapy es el framework de scraping en Python más popular. SotaProxy se integra como un proxy HTTP estándar a través del middleware de proxy integrado de Scrapy. Configúralo en settings.py y cada solicitud que haga tu araña se enrutará por el proxy automáticamente.

Guía de configuración

1

Activa el middleware de proxy en settings.py

python
# settings.py
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}

HTTP_PROXY = "http://YOUR_USERNAME:YOUR_PASSWORD@proxy.sotaproxy.com:10000"

Añade estos dos ajustes al settings.py de tu proyecto Scrapy. Todas las solicitudes de la araña se enrutarán por SotaProxy automáticamente.

2

Proxy por solicitud (opcional)

python
# In your spider
def start_requests(self):
    for url in self.start_urls:
        yield scrapy.Request(
            url,
            meta={'proxy': 'http://YOUR_USERNAME:YOUR_PASSWORD@proxy.sotaproxy.com:10000'},
        )

Establece el proxy por solicitud en el diccionario meta si necesitas configuraciones de proxy distintas para distintas URLs.

3

Geo-segmentación en Scrapy

python
# Target US IPs for all requests
HTTP_PROXY = "http://YOUR_USERNAME_c_US:YOUR_PASSWORD@proxy.sotaproxy.com:10000"

# Or per-request targeting
meta={'proxy': 'http://YOUR_USERNAME_c_DE:YOUR_PASSWORD@proxy.sotaproxy.com:10000'}

Añade _c_XX al nombre de usuario. Usa la segmentación por solicitud cuando distintas URLs necesiten distintas geografías.

Automatízalo con la API de SotaProxy

Todo lo anterior funciona sin abrir el panel. Con una clave API, Scrapy puede obtener credenciales de proxy actualizadas, comprar nuevos proxies y renovar los que caducan - directamente desde el código.

python
import requests

API = "https://api.sotaproxy.com/api/v1"
H = {"Authorization": "Bearer sk_live_your_key"}

# Every active proxy on your account - no copy-pasting credentials
proxies = requests.get(f"{API}/proxies", headers=H).json()["proxies"]
p = proxies[0]
proxy_url = f"http://{p['login']}:{p['password']}@{p['ip']}:{p['portHttp']}"

# Buy more when you scale (price-check first with POST /quote)
requests.post(
    f"{API}/orders",
    headers={**H, "Idempotency-Key": "my-unique-order-id"},
    json={"product": "ipv4", "countryId": 565, "periodId": "1m", "quantity": 5},
)
Leer la documentación de la API

Proxy credentials in a Scrapy project

Scrapy ships the middleware you need. Point request.meta at our endpoint and let HttpProxyMiddleware handle the rest:

Rotating residential
login:password@proxy.sotaproxy.com:10000
Pinned to a country
login_c_US:password@proxy.sotaproxy.com:10000
Sticky for 15 minutes
login_c_US_s_42_ttl_15m:password@proxy.sotaproxy.com:10000
Static address (ISP, datacenter)
login:password@your-ip:50100, SOCKS5 on 50101

Put the login and password in the proxy URL itself. Scrapy reads credentials from the URL and turns them into the Proxy-Authorization header for you.

One address per request, or one per spider

Set the proxy in meta and you control rotation per request without any third-party middleware:

Python: rotate inside start_requests

import itertools, scrapy

BASE = "proxy.sotaproxy.com:10000"

class ShopSpider(scrapy.Spider):
    name = "shop"
    custom_settings = {
        "CONCURRENT_REQUESTS": 32,
        "CONCURRENT_REQUESTS_PER_DOMAIN": 8,
        "DOWNLOAD_TIMEOUT": 30,
        "RETRY_TIMES": 2,
    }

    def start_requests(self):
        sessions = itertools.cycle(range(1, 11))
        for url in self.urls:
            login = f"login_c_US_s_{next(sessions)}_ttl_15m"
            yield scrapy.Request(
                url,
                meta={"proxy": f"http://{login}:password@{BASE}"},
                headers={"Accept-Encoding": "gzip"},
            )
  • Ten session ids give you ten stable addresses that survive redirects. Drop the _s_ part entirely and every request lands on a new one.
  • Raise CONCURRENT_REQUESTS rather than hammering one address. We do not cap concurrent connections, target sites do.
  • DOWNLOAD_TIMEOUT defaults to 180 seconds. On a residential route 30 is a better tradeoff between patience and throughput.
  • AutoThrottle plays well with proxies. Leave it on for unfamiliar targets and it will find a rate that does not trip rate limits.

Scrapy details that cost you data

Retry middleware reuses the same proxy

A retried request carries the original meta, including the address that just failed. Set a fresh proxy in the retry or write a tiny middleware that does.

Cookies crossing sessions

Scrapy keeps one cookiejar by default. When addresses rotate under it, the site sees one session hopping between countries. Use cookiejar per session id.

robots.txt fetched without the proxy

ROBOTSTXT_OBEY sends its own request. It goes through the same middleware, but the response is cached per domain, so a blocked fetch silently stops the crawl.

Assuming meta persists across redirects

It does, which is the point, but it means a redirect chain stays on one address. That is what you want for logins and not what you want for wide crawls.

Notas y consejos

  • Ajusta CONCURRENT_REQUESTS para controlar el paralelismo. Una alta concurrencia desde un único endpoint de proxy está bien - la rotación es del lado del servidor.
  • Activa RETRY_ENABLED = True y RETRY_HTTP_CODES = [403, 429, 503] para reintentar automáticamente ante bloqueos.
  • Para sesiones aleatorias por solicitud, genera un ID de sesión único por solicitud y añádelo al nombre de usuario.

FAQ

¿Rota Scrapy las IPs automáticamente con SotaProxy?

Sí. Con proxies residenciales rotativos, cada solicitud a través del mismo endpoint obtiene una IP distinta. No necesitas un middleware de rotación de proxy - la rotación es del lado del servidor.

¿Cómo manejo los bloqueos 403 en Scrapy?

Añade 403 a RETRY_HTTP_CODES. Para sitios que bloquean por user-agent, rota los user-agents con el middleware scrapy-fake-useragent.

Obtén tus credenciales de proxy

Regístrate, recarga tu saldo y copia tu endpoint en Scrapy. Tarda menos de 5 minutos.

Empezar