3. Lógica de Scraping¶
A coleta dos dados é feita com o Selenium a partir da página principal da listagem de imóveis. O processo envolve rolagem dinâmica, identificação de elementos, e extração individualizada por imóvel.
🧠 Estratégia Geral¶
- Carregar a página com todos os imóveis disponíveis.
- Fazer scroll até que nenhum novo imóvel seja carregado.
- Para cada imóvel:
- Verificar se é um card válido (com link).
- Abrir a página do imóvel em uma nova aba.
- Extrair endereço e características.
- Fechar a aba e voltar à listagem.
🔍 Detalhamento das Funções¶
carregar_todos_os_cards(driver)
¶
- Função: Carrega todos os cards de imóveis em uma página com scroll incremental.
- Métodos utilizados:
- Faz scroll incremental via JavaScript (
window.scrollBy
). - Aguarda dinamicamente o carregamento de novos cards.
- Interrompe após N tentativas sem novos cards (evita loops infinitos).
extrair_endereco(driver)
¶
- Função: Extrai detalhes do endereço e características do imóvel.
- Fluxo:
- Acessa a página do imóvel (abre nova aba).
- Usa
WebDriverWait
para garantir que o elemento do endereço esteja carregado. - Extrai dados estruturados com base em seletores:
- Padrão HTML:
div.row > div.col
(valores).
- Padrão HTML:
📌 Padrões e Boas Práticas¶
1. Espera Explícita¶
- Utiliza
WebDriverWait
+expected_conditions
para evitar falhas por: - Carregamento lento.
- Elementos dinâmicos.
2. Tratamento de Exceções¶
- Ignora elementos irrelevantes (ex.: propagandas) sem interromper o fluxo.
- Exemplo:
```python try: WebDriverWait(driver, 10).until(EC.presence_of_element_located(...)) except TimeoutException: print("Elemento não encontrado - pulando...")
🔄 Fluxo Lógico Completo¶
flowchart TD
A[🌐 Acessar página inicial] --> B[⬇️ Fazer scroll para carregar imóveis]
B --> C{❓ Novos imóveis carregados?}
C -- Sim --> B
C -- Não --> D[🔁 Iterar sobre cada card]
D --> E{❓ Card tem link válido?}
E -- Não --> D
E -- Sim --> F[🆕 Abrir nova aba com imóvel]
F --> G[⏳ Esperar carregamento]
G --> H[🏠 Extrair endereço
🧾 Extrair características]
H --> I[❌ Fechar aba]
I --> D