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
Activa el middleware de proxy en settings.py
# 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.
Proxy por solicitud (opcional)
# 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.
Geo-segmentación en Scrapy
# 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.
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},
)Proxy credentials in a Scrapy project
Scrapy ships the middleware you need. Point request.meta at our endpoint and let HttpProxyMiddleware handle the rest:
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.
Integraciones relacionadas
Obtén tus credenciales de proxy
Regístrate, recarga tu saldo y copia tu endpoint en Scrapy. Tarda menos de 5 minutos.
Empezar