Added vocation state and included it in query string builder, updated onFilter to accept a vocation parameter, improved grid layout with grid flow classes, normalized category names for consistent item icons, and refined stats mapping to handle type safety.
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
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)
python main_selenium.py
Modo Link Específico
python main_selenium.py --url "https://www.tibiawiki.com.br/wiki/Espadas"
Modo Múltiplos Links via Arquivo
# 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)
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)
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:
-- 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:
python explore_structure.py
Isso gerará:
categories_mapping.json: Mapeamento de categorias encontradasstructure_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.txthabilitado - 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.dbe rode novamente
📄 Licença
Este projeto é apenas para fins educacionais.