# 🎯 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