Monitorar dados de plataformas de delivery em tempo real é um desafio frequente para analistas de mercado e empresas do setor de food service. Aplicativos modernos, como o Toters (plataforma popular no Oriente Médio), não operam como páginas web estáticas convencionais: seus catálogos, taxas de entrega e disponibilidades de itens são alimentados por endpoints de APIs móveis atrelados a coordenadas geográficas dinâmicas.
Extrair esses dados com consistência exige contornar camadas de proteção contra automações não autorizadas, simular parâmetros de localização precisos e processar milhares de requisições de forma estruturada. Abaixo, exploramos a engenharia necessária para implementar um pipeline resiliente de coleta de dados em Python voltado a serviços de entrega.
1. Engenharia Reversa e Mapeamento dos Endpoints Móveis
Ao contrário de sites institucionais, os aplicativos mobile comunicam-se via chamadas REST ou GraphQL estruturadas em JSON. O primeiro passo para viabilizar a extração é interceptar esse tráfego por meio de proxies de depuração (como mitmproxy ou Charles Proxy) executados em um emulador Android/iOS.
Nessa fase, isolam-se os seguintes pontos críticos:
- Headers obrigatórios: Identificadores de dispositivo, user-agents customizados da plataforma e tokens de sessão (JWT).
- Parâmetros de contexto: O catálogo exibido varia dependendo dos parâmetros de latitude (
lat) e longitude (lng) enviados no payload de busca. - Assinaturas de requisição: Verificação de headers gerados por criptografia interna (caso existam) para prevenir requisições forjadas.
2. Implementação com Concorrência e Validação de Esquema
Para coletar dados de múltiplos restaurantes e milhares de itens de menu sem gargalos, o uso de código assíncrono em Python é fundamental. O ecossistema com httpx ou aiohttp, associado ao asyncio, permite gerenciar dezenas de conexões concorrentes mantendo baixo consumo de recursos.
python
import asyncio
import httpx
from pydantic import BaseModel, Field
from typing import List, Optional
class ItemCardapio(BaseModel):
id: str
nome: str
preco: float
disponivel: bool
descricao: Optional[str] = None
class RestauranteData(BaseModel):
id: str
nome: str
taxaentrega: float
tempoestimadomin: int
itens: List[ItemCardapio] = Field(defaultfactory=list)
async def coletardadosrestaurante(client: httpx.AsyncClient, storeid: str, headers: dict) -> Optional[RestauranteData]:
url = f”https://api.totersapp.com/v1/stores/{storeid}/menu”
try:
resposta = await client.get(url, headers=headers, timeout=10.0)
if resposta.statuscode == 200:
payload = resposta.json()
# Normalização via Pydantic para garantir integridade do tipo de dado
return RestauranteData(
id=str(payload[‘store’][‘id’]),
nome=payload[‘store’][‘name’],
taxaentrega=float(payload[‘store’].get(‘deliveryfee’, 0.0)),
tempoestimadomin=int(payload[‘store’].get(‘etaminutes’, 0)),
itens=[
ItemCardapio(
id=str(i[‘id’]),
nome=i[‘title’],
preco=float(i[‘price’]),
disponivel=i[‘in_stock’],
descricao=i.get(‘description’)
) for i in payload.get(‘items’, [])
]
)
except httpx.HTTPError as erro:
# Registro estruturado de falhas para tratamento de retries
pass
return None
3. Resiliência: Rotação de IPs e Rate Limiting Adaptativo
Serviços de entrega aplicam regras severas de limitação de requisições por IP. Quando o volume de coleta ultrapassa centenas de chamadas por minuto, proxies residenciais rotativos tornam-se mandatórios. A aplicação deve utilizar pools de conexão distribuídos geograficamente na mesma região de entrega atendida pelo app (no caso do Toters, nós com saída no Líbano e países vizinhos).
Além disso, adotar algoritmos de exponential backoff através da biblioteca tenacity garante que requisições temporariamente bloqueadas com códigos HTTP 429 (Too Many Requests) sejam reenviadas em intervalos seguros sem interromper o fluxo global.
4. Inteligência e Pós-Processamento dos Dados
Como especialista em IA e engenharia de dados, costumo implementar uma etapa posterior de processamento com modelos de Processamento de Linguagem Natural (NLP). Aplicativos de delivery frequentemente trazem descrições inconsistentes, categorias genéricas ou textos bilíngues (como árabe e inglês).
Utilizar embeddings para padronizar categorias de produtos e classificar itens por similaridade semântica permite unificar bases de concorrentes distintos, transformando texto bruto em métricas de inteligência acionáveis, como elasticidade de preços e índice de ruptura de estoque.
Conclusão e Próximos Passos
Estruturar uma solução estável de scraping para plataformas de delivery como o Toters exige rigor técnico em engenharia reversa, governança de dados e arquitetura assíncrona.
Se sua empresa necessita de pipelines robustos de extração contínua, inteligência competitiva de preços ou integração de dados para alimentar modelos preditivos, entre em contato para estruturarmos uma solução personalizada e segura para o seu negócio.


