# TibiaWiki Scraper Extrator de dados completo do TibiaWiki.br que extrai informações de todas as categorias de itens (Capacetes, Armaduras, Armas, etc.) e salva em banco SQLite local com imagens organizadas. ## 🎯 Funcionalidades - ✅ Extração completa de todas as categorias de itens - ✅ Extração de link específico ou múltiplos links via arquivo - ✅ Detecção automática de categoria baseada no título da página - ✅ Download e organização de imagens por categoria - ✅ Armazenamento em banco SQLite (uma tabela por categoria) - ✅ Pipeline de imagens customizado - ✅ Rate limiting e respeito ao robots.txt - ✅ Normalização automática de nomes (sem acentos, lowercase) - ✅ Validação de URLs e tratamento robusto de erros ## 📋 Pré-requisitos - Python 3.7+ - pip ## 🚀 Instalação e Execução ### 1. Instalar dependências ```bash pip install -r requirements.txt ``` ### 2. Executar o spider **⚠️ IMPORTANTE**: O site bloqueia requisições automatizadas. Use a versão com Selenium. **Opção A: Usando Selenium (RECOMENDADO)** ### Modo Completo (Todas as Categorias) ```bash python main_selenium.py ``` ### Modo Link Específico ```bash python main_selenium.py --url "https://www.tibiawiki.com.br/wiki/Espadas" ``` ### Modo Múltiplos Links via Arquivo ```bash # Criar arquivo links.txt com: # https://www.tibiawiki.com.br/wiki/Espadas # https://www.tibiawiki.com.br/wiki/Machados # # Comentários são ignorados python main_selenium.py --file links.txt ``` ### Modo Headless (sem interface gráfica) ```bash python main_selenium.py --url "https://www.tibiawiki.com.br/wiki/Espadas" --headless ``` Este script abre um navegador Chrome automaticamente e extrai os dados visualmente. **Opção B: Comando Scrapy (pode ter erro 403)** ```bash cd tibiawiki scrapy crawl tibiawiki_items ``` ## 📂 Estrutura de Saída Após a execução, os dados serão salvos em: ``` data/ ├── tibiawiki.db # Banco SQLite com todas as tabelas └── images/ # Imagens organizadas por categoria ├── capacetes/ ├── armaduras/ ├── espadas/ └── ... ``` ## 🗄️ Banco de Dados Cada categoria de itens terá sua própria tabela no SQLite. Nome da tabela = nome da categoria normalizado (sem acentos, lowercase, com underscores). **Exemplo de queries:** ```sql -- Listar todas as tabelas SELECT name FROM sqlite_master WHERE type='table'; -- Ver itens da categoria de capacetes SELECT * FROM capacetes LIMIT 10; -- Buscar item específico SELECT * FROM espadas WHERE nome LIKE '%Fire Sword%'; -- Contar itens por categoria SELECT 'capacetes' as categoria, COUNT(*) as total FROM capacetes UNION ALL SELECT 'armaduras', COUNT(*) FROM armaduras; ``` ## ⚙️ Configurações Edite `tibiawiki/settings.py` para ajustar: - `DOWNLOAD_DELAY`: Delay entre requisições (padrão: 1.5s) - `CONCURRENT_REQUESTS`: Requisições simultâneas (padrão: 2) - `SQLITE_DB_PATH`: Caminho do banco (padrão: data/tibiawiki.db) - `IMAGES_STORE`: Caminho das imagens (padrão: data/images) ## 📝 Estrutura do Projeto ``` iconScript/ ├── main.py # Script principal de execução ├── requirements.txt # Dependências Python ├── scrapy.cfg # Configuração do Scrapy ├── explore_structure.py # Script de análise exploratória └── tibiawiki/ # Projeto Scrapy ├── __init__.py ├── items.py # Definição dos Items ├── pipelines.py # Pipelines (SQLite + Imagens) ├── settings.py # Configurações ├── middlewares.py # Middlewares customizados ├── utils.py # Funções utilitárias └── spiders/ ├── __init__.py └── items_spider.py # Spider principal ``` ## 🔍 Análise Exploratória Para analisar a estrutura do site antes do scraping: ```bash python explore_structure.py ``` Isso gerará: - `categories_mapping.json`: Mapeamento de categorias encontradas - `structure_analysis.json`: Estrutura das tabelas de cada categoria ## ⚠️ Notas Importantes - O scraping pode demorar de 30min a 1h dependendo da quantidade de categorias - Todas as requisições respeitam rate limiting (delay de 1.5s) - O site está sendo respeitado com `robots.txt` habilitado - Imagens são baixadas e organizadas automaticamente por categoria ## 🐛 Troubleshooting **Erro 403 ao acessar o site:** - O site pode estar bloqueando requisições. Aguarde alguns minutos e tente novamente. - Verifique se o User-Agent está sendo enviado corretamente. **Erro de módulo não encontrado:** - Certifique-se de instalar todas as dependências: `pip install -r requirements.txt` - Verifique se está no diretório correto (`iconScript/`) **Banco de dados travado:** - Certifique-se de que não há outro processo acessando o banco - Delete `data/tibiawiki.db` e rode novamente ## 📄 Licença Este projeto é apenas para fins educacionais.