# 🎯 Configuração de Filtros de Tabelas
## Visão Geral
O scraper foi configurado para usar um sistema de priorização e filtragem de tabelas para garantir que apenas os dados corretos sejam extraídos do TibiaWiki.
## 📊 Sistema de Priorização
### Prioridade 1: Tabela com ID "tabelaDPL"
**Prioridade MÁXIMA**: Se existir uma tabela com `id="tabelaDPL"`, ela será usada exclusivamente.
```html
```
**Comportamento:**
- ✅ Tabela com ID `tabelaDPL` é sempre priorizada
- ✅ Se encontrada, outras tabelas são ignoradas
- ✅ Log informa: "Tabela com ID 'tabelaDPL' encontrada (prioridade máxima)"
---
### Prioridade 2: Tabelas com Classe "wikitable"
**Fallback 1**: Se não houver tabela com ID `tabelaDPL`, procura por tabelas com classe `wikitable`.
```html
```
---
### Prioridade 3: Todas as Tabelas
**Fallback 2**: Se não houver nenhuma das anteriores, processa todas as tabelas encontradas na página.
```html
```
---
## 🚫 Filtro de Exclusão
### Tabelas Ignoradas: Classe "tibia_client_background_light"
**SEMPRE IGNORADAS**: Qualquer tabela com a classe `tibia_client_background_light` será ignorada, independente da prioridade.
```html
```
**Comportamento:**
- ❌ Tabelas com `tibia_client_background_light` nunca são processadas
- 📊 Contador mostra quantas tabelas foram ignoradas
- 🔍 Log informa: "Tabelas ignoradas (classe tibia_client_background_light): X"
---
## 🔄 Fluxo de Decisão
```
┌─────────────────────────────────────────┐
│ Buscar tabelas na página │
└─────────────┬───────────────────────────┘
↓
┌─────────────────────────┐
│ Existe tabela com │
│ ID="tabelaDPL"? │
└───┬─────────┬───────────┘
│ SIM │ NÃO
↓ ↓
Usar só ┌───────────────────┐
esta tabela│ Existe tabela com │
│ class="wikitable"?│
└───┬─────────┬─────┘
│ SIM │ NÃO
↓ ↓
Usar só Usar todas
estas as tabelas
tabelas
│
↓
┌───────────────────────────┐
│ Filtrar tabelas com │
│ classe "tibia_client_ │
│ background_light" │
└────────────┬──────────────┘
↓
┌────────────────┐
│ Processar │
│ tabelas válidas│
└────────────────┘
```
---
## 📝 Logs e Monitoramento
### Exemplos de Logs
**Cenário 1: Tabela com ID encontrada**
```
INFO: Tabela com ID 'tabelaDPL' encontrada (prioridade máxima)
INFO: Total de tabelas encontradas antes da filtragem: 1
INFO: Total de tabelas válidas após filtragem: 1
INFO: Processando tabela 1/1
```
**Cenário 2: Tabelas com classe ignorada**
```
INFO: Total de tabelas encontradas antes da filtragem: 5
INFO: Tabelas ignoradas (classe tibia_client_background_light): 3
INFO: Total de tabelas válidas após filtragem: 2
INFO: Processando tabela 1/2
```
**Cenário 3: Nenhuma tabela válida**
```
WARNING: Tabelas ignoradas (classe tibia_client_background_light): 2
WARNING: Nenhuma tabela válida encontrada após filtragem em Espadas
```
---
## 🎯 Casos de Uso
### Caso 1: Página com ID tabelaDPL
```html
```
**Resultado:** Apenas tabela `tabelaDPL` é processada.
---
### Caso 2: Página com tabelas de layout
```html
```
**Resultado:** Tabela de layout ignorada, tabela `wikitable` processada.
---
### Caso 3: Página mista
```html
```
**Resultado:** Apenas a primeira tabela é processada.
---
### Caso 4: Página com múltiplas classes
```html
```
**Resultado:** Tabelas com `tibia_client_background_light` sempre ignoradas.
---
## 🔍 Debug e Troubleshooting
### Verificar tabelas encontradas
Para depurar, adicione prints temporários no código:
```python
# No método scrape_category, após linha 270
for idx, table in enumerate(tables):
print(f"Tabela {idx+1}: ID={table.get('id')}, Classes={table.get('class')}")
```
### Verificar filtragem
O log já mostra informações detalhadas:
```
INFO: Total de tabelas encontradas antes da filtragem: 5
INFO: Tabelas ignoradas (classe tibia_client_background_light): 2
INFO: Total de tabelas válidas após filtragem: 3
```
---
## ⚙️ Configuração Técnica
### Código Implementado
```python
# Prioridade 1: ID tabelaDPL
tables = soup.find_all('table', id='tabelaDPL')
if not tables:
# Prioridade 2: Classe wikitable
tables = soup.find_all('table', class_='wikitable')
if not tables:
# Prioridade 3: Todas as tabelas
tables = soup.find_all('table')
# Filtro: Remover tibia_client_background_light
filtered_tables = []
for table in tables:
if table.get('class') and 'tibia_client_background_light' in table.get('class'):
continue # Ignorar
filtered_tables.append(table)
tables = filtered_tables
```
---
## ✅ Garantias
1. **Prioridade absoluta**: ID `tabelaDPL` sempre vence
2. **Filtro robusto**: `tibia_client_background_light` sempre ignorado
3. **Logs informativos**: Você sabe exatamente o que está acontecendo
4. **Fallback seguro**: Se nada funcionar, usa todas as tabelas
5. **Performance**: Filtragem rápida sem impacto significativo
---
## 📚 Referências
- **Arquivo modificado**: `iconScript/tibiawiki/spiders/selenium_spider.py`
- **Método**: `scrape_category()` (linhas 239-400)
- **Dependências**: BeautifulSoup4
---
## 🎉 Resultado Final
Com essas configurações, o scraper:
✅ Prioriza tabelas com dados reais (ID tabelaDPL)
✅ Ignora tabelas de layout/decorativas
✅ Fornece logs detalhados para debugging
✅ Funciona de forma robusta mesmo com HTML variado
✅ Garante que apenas itens corretos sejam extraídos