Respuesta rápida
Verifique los precios de Jumia, Takealot y Konga haciendo coincidir la variante del producto, el vendedor, la moneda y el contexto de entrega. A partir del 15 de octubre de 2026, el tráfico residencial de AfricaProxies comienza en 0,50 US$/GB, sin KYC y con financiación en cripto. El ejemplo de Python realiza una solicitud limitada a un objetivo HTTPS autorizado; los permisos de acceso y reutilización de cada comerciante siguen rigiendo el estudio real.
Datos clave
| Jumia Nigeria | Registro NGN y el vendedor exacto y la variante del producto |
|---|---|
| Takealot | Registro ZAR, condiciones del vendedor y de cumplimiento |
| Konga | Mantener la oferta original de Nigeria y el contexto de entrega |
| Ruta de acceso | Feed del comercio, API aprobado o permiso de recogida explícito |
| Prueba de red | Una solicitud autorizada limitada; sin redirecciones automáticas |
| Facturación | tráfico enviado y recibido, incluyendo encabezados |
¿Cómo crear un registro comparable de precios del comercio africano?
Elige la ruta de datos permitida
Use un feed de comercio, acceso aprobado API o explícitamente permitido. Establezca los campos permitidos y la frecuencia antes de un estudio repetido de Jumia, Takealot o Konga.
Igualar la oferta
Mantén constantes el modelo, la variante, el vendedor, el estado del stock y la cantidad. Registra NGN o ZAR y el destino de entrega; una tarifa de envío faltante permanece como desconocida en lugar de cero.
Guardar una observación con fecha
Mantén la fuente URL, el método de recopilación y el tiempo de observación con el precio original en moneda local. Trata una redirección, rechazo o límite de velocidad como un resultado a revisar antes de reanudar.
¿Qué combinación de vendedor y país estoy observando?
Nombre el sitio web del país real del comerciante antes de recopilar un registro. Jumia Nigeria y Jumia Kenia son contextos de mercado diferentes; Konga es un mercado nigeriano, mientras que Takealot es un ejemplo de venta minorista de Sudáfrica. Mantenga la moneda y el destino originales con cada fila. Una selección por país IP no identifica al vendedor, la variante del producto o el coste de entrega final.
¿Cómo evitar una comparación falsa de precios?
Coincidir con el modelo, la capacidad, la condición, el vendedor y el contexto de envío. Mantener el estado de stock de una oferta separado de su precio. Si un comerciante enumera una tarifa de envío y otro no, informe esa evidencia faltante en lugar de asignar cero. Preservar la URL de origen y la hora de observación para que un revisor pueda volver a visitar la oferta exacta. La conversión de divisas pertenece a un cálculo fechado por separado.
¿Qué vía usar para recopilar datos?
Prefiere un feed proporcionado por el comerciante o una API aprobada para la recopilación repetida. De lo contrario, obtén permiso para las páginas, campos y frecuencia de solicitud previstos. Inspecciona los términos de acceso del objetivo y los límites documentados. La visibilidad de una página pública no es una autorización general para automatizar. Detente ante una denegación de acceso o una respuesta de limitación de velocidad y resuelve la ruta permitida antes de reanudar.
import os
from urllib.parse import quote, urlsplit
import requests
# Only your own target or a URL covered by written permission.
target = os.environ["AUTHORIZED_TARGET_URL"]
allowed_host = os.environ["AUTHORIZED_TARGET_HOST"]
parts = urlsplit(target)
if (parts.scheme != "https" or parts.hostname != allowed_host
or parts.username or parts.password):
raise SystemExit("Target must match the authorized HTTPS host without embedded credentials")
user = quote(os.environ["PROXY_USER"] + "-country-ng", safe="")
password = quote(os.environ["PROXY_PASSWORD"], safe="")
proxy = f"http://{user}:{password}@gw.africaproxies.com:7777"
try:
with requests.Session() as session:
session.trust_env = False
with session.get(target, proxies={"http": proxy, "https": proxy},
timeout=(10, 30), allow_redirects=False, stream=True) as response:
response.raise_for_status()
if 300 <= response.status_code < 400:
raise SystemExit("Inspect and authorize the redirect separately")
total = 0
for chunk in response.iter_content(8192):
total += len(chunk)
if total > 1_000_000:
raise SystemExit("Sample body limit reached")
print({"status": response.status_code, "decoded_body_bytes": total})
except requests.exceptions.RequestException as error:
status = error.response.status_code if error.response is not None else "unavailable"
# Do not print the exception, URL, proxy address or chained traceback.
raise SystemExit(f"Request stopped: {type(error).__name__}; status={status}") from None¿Qué mide esta muestra de diagnóstico?
La muestra verifica el estado del transporte y un cuerpo de respuesta decodificado con límite. No extrae el precio de un minorista, ejecuta JavaScript del navegador ni informa los totales de tráfico facturable. Las solicitudes pueden descomprimir una respuesta, por lo que el tamaño del cuerpo decodificado impreso no es una medición de facturación de proxy. El uso real de la cuenta incluye ambas direcciones y encabezados. El código no sigue redirecciones hasta que el host redirigido sea aprobado por separado.
¿Cómo ampliar tras un diagnóstico correcto?
Primero, valide una pequeña muestra autorizada para la calidad de los datos y el alcance legal. Utilice la frecuencia de solicitudes permitida y preserve los errores como estados en lugar de valores de precios fabricados. Mida el uso real de la cuenta antes de presupuestar. Una respuesta de diagnóstico exitosa no prueba que el stock del país permanecerá disponible durante todo un cronograma. Mantenga la disponibilidad de la ciudad y las interrupciones de sesión con la misma IP en el registro del experimento.
Preguntas frecuentes
¿Puedo ejecutar este ejemplo directamente en cualquier página de Jumia?
Solo si ese objetivo es suyo o el acceso propuesto está autorizado. Establezca el host de destino aprobado exacto y URL; la muestra deliberadamente no selecciona a un minorista automáticamente. Que un producto Jumia sea visible públicamente no autoriza por sí mismo la recopilación repetida, así que defina el método permitido antes de ejecutar el código.
¿El código recopila datos de finalización de compra o pago?
No. El flujo de trabajo se refiere a ofertas públicas autorizadas en lugar de credenciales de pago, registros de clientes o detalles de pago. Los portales bancarios y de pago están bloqueados por la política del servicio. Para la investigación de Jumia, Takealot o Konga, registre el producto público y el contexto de entrega; utilice un sandbox aprobado para su propia interfaz transaccional QA.
¿Qué significa una respuesta 429 para mi proyecto?
Una respuesta 429 le indica a la muestra que se detenga para que puedan inspeccionarse los límites del objetivo y la ruta de acceso permitida. No aumentes la concurrencia ni cambies las salidas en respuesta a esa denegación. Conserva la categoría y el tiempo de respuesta, revisa la autorización del proyecto y utiliza un feed aprobado o API donde sea apropiado.
¿El tamaño del cuerpo descodificado equivale a los GB facturados?
No. El cuerpo de respuesta decodificado impreso por Requests es diferente de la contabilidad de tráfico del servicio. La facturación incluye carga, descarga y encabezados, mientras que la descompresión puede cambiar el tamaño del cuerpo mostrado. Utilice el tráfico medido de la cuenta para un presupuesto de Jumia o Takealot, en lugar de multiplicar los bytes del archivo guardado por un número de páginas asumido.
¿Qué ocurre con una redirección a otro dominio?
La muestra se detiene sin seguir la redirección. Inspeccione el host de destino y el motivo de la redirección, y autorícelo por separado antes de añadirlo al flujo de trabajo. Un comercio puede enviar una oferta a otro dominio o ruta de cuenta; el URL aprobado original no aprueba automáticamente ese nuevo objetivo.
¿Cómo excluir las credenciales de los informes?
Utilice variables de entorno, credenciales del proyecto y registros de diagnóstico redactados. Nunca imprima el proxy URL con su nombre de usuario y contraseña integrados. La muestra rechaza las credenciales en el objetivo URL y captura fallos de Requests sin imprimir sus URLs ni rastreos en cadena. Mantenga también los tokens de consulta fuera de los registros compartidos.
Fuentes (1)
- Requests: advanced usage, proxies and streaming — Requests documentation (2026-10-14)