Eligiendo tu arsenal: Proxies gratuitos en la naturaleza
En el ágora digital, los proxies se erigen como centinelas efímeros: puertas al anonimato, la libertad y, por desgracia, a la fragilidad. El proxy libre, esa criatura esquiva, ofrece un paso, pero a un precio: inestabilidad, estrangulamiento o, en el peor de los casos, traición. Examinemos, con claridad cartesiana, el panorama:
Tipo de proxy | Anonimato | Velocidad | Fiabilidad | Fuente de ejemplo |
---|---|---|---|---|
Proxies HTTP/HTTPS | Medio | Moderado | Bajo | https://free-proxy-list.net/ |
Proxies SOCKS4/5 | Alto | Bajo | Muy bajo | https://socks-proxy.net/ |
Proxies transparentes | Ninguno | Rápido | Bajo | https://spys.one/ |
Advertencia: Los proxies gratuitos son públicos y pueden estar comprometidos. Nunca envíe credenciales ni datos confidenciales a través de ellos.
Cosecha de Proxies: El Ritual
Bailar con lo efímero exige automatización. Convoquemos a Python y a sus acólitos, solicitudes
y Sopa hermosa
, para obtener proxies:
importar solicitudes de bs4 importar BeautifulSoup def fetch_proxies(): url = 'https://free-proxy-list.net/' soup = BeautifulSoup(requests.get(url).content, 'html.parser') proxies = [] para la fila en soup.find('table', id='proxylisttable').tbody.find_all('tr'): tds = row.find_all('td') si tds[6].text == 'yes': # Solo HTTPS proxy = f"{tds[0].text}:{tds[1].text}" proxies.append(proxy) devolver proxies
Proxies en rotación: el arte del disfraz
Amazon y eBay, esas fortalezas digitales, ejercen una fuerza decisiva con precisión mecánica. ¿La solución? Rotar proxies, cambiar agentes de usuario e introducir retrasos: una coreografía de distracción.
importar aleatorio importar tiempo proxies = fetch_proxies() agentes_de_usuario = [ # Un conjunto de agentes de usuario 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...', # Añadir más ] def get_random_headers(): return {'Agente_de_usuario': random.choice(agentes_de_usuario)} def get_random_proxy(): return {'http': f"http://{random.choice(proxies)}", 'https': f"http://{random.choice(proxies)}"} def request_with_proxy(url): para intento en rango(5): proxy = get_random_proxy() headers = get_random_headers() try: respuesta = solicitudes.get(url, encabezados=encabezados, proxies=proxy, tiempo de espera=5) si response.status_code == 200: devolver response.text excepto Excepción: continuar time.sleep(random.uniform(1, 3)) devolver Ninguno
Explorando Amazon: Navegando por el laberinto
Amazon implementa estrategias antibots: CAPTCHAs, contenido dinámico y bloqueos de IP. Para el scraping a pequeña escala, concéntrese en los listados de productos; para cualquier otro propósito, considere los límites éticos y legales.
Ejemplo: extracción de títulos de productos
de bs4 importar BeautifulSoup def scrape_amazon_product_title(asin): url = f"https://www.amazon.com/dp/{asin}" html = request_with_proxy(url) si no html: print("Error al recuperar la página.") return None soup = BeautifulSoup(html, 'html.parser') title = soup.find('span', id='productTitle') return title.text.strip() si title else None asin = 'B08N5WRWNW' # Ejemplo ASIN print(scrape_amazon_product_title(asin))
Raspando eBay: A través del bazar
eBay, un centinela menos vigilante, aún emplea la limitación de velocidad y la detección de bots, menos rigurosos, pero presentes. Céntrese en la página del artículo (p. ej., https://www.ebay.com/itm/ITEMID).
Ejemplo: Extracción del precio del artículo
def scrape_ebay_price(item_id): url = f"https://www.ebay.com/itm/{item_id}" html = request_with_proxy(url) if not html: print("Error al recuperar la página.") return None soup = BeautifulSoup(html, 'html.parser') price = soup.find('span', id='prcIsum') return price.text.strip() if price else None item_id = '234567890123' # Ejemplo de ID de artículo print(scrape_ebay_price(item_id))
Ofuscación: La poesía de la evasión
- Aleatorizar intervalos de solicitud:
pitón
tiempo.sueño(aleatorio.uniforme(2, 6)) - Mezclar proxies y agentes de usuario con cada solicitud.
- Pausar o cambiar servidores proxy en detecciones HTTP 503, 403 o CAPTCHA.
Límites y legalidades:
Sitio | Solicitudes máximas/hora (est.) | Contramedidas clave |
---|---|---|
Amazonas | ~50-100 | Captchas, prohibiciones de IP, comprobaciones de JS |
eBay | ~200-300 | Limitación de velocidad, Captchas |
Mejores prácticas:
- Pruebe los servidores proxy para comprobar su actividad antes de usarlos (muchos mueren en cuestión de horas).
- Respete el archivo robots.txt: no entre donde está prohibido.
- Limite la concurrencia (evite tormentas de subprocesos con proxies gratuitos).
- Analice con elegancia: los diseños de los sitios mutan como la maleza primaveral.
Herramientas y bibliotecas:
Tarea | Herramienta recomendada |
---|---|
Raspado de proxy | Sopa hermosa |
Solicitudes HTTP | solicitudes, httpx |
Análisis | Hermosa sopa, lxml |
Rotación de proxy | solicitudes + personalizadas |
Ejemplo de rutina de validación de proxy:
def validate_proxy(proxy): try: r = requests.get('https://httpbin.org/ip', proxies={'http': proxy, 'https': proxy}, timeout=3) return r.status_code == 200 except: return False proxies = [p para p en proxies si validate_proxy(p)]
Una nota final sobre la persistencia:
Utilizar proxies gratuitos es como perseguir el horizonte: siempre cambiante, siempre inalcanzable. Rota, adáptate y nunca olvides que cada solicitud es una gota en el océano del comercio digital. La web es un ser vivo; trátala como tal, y aún podría revelar sus secretos.
Comentarios (0)
Aún no hay comentarios aquí, ¡puedes ser el primero!