Integrates a Scrapy-based TibiaWiki scraper (spider, pipelines, SQLite/Images settings, README). Updates .gitignore to exclude generated data directories (/iconScript/data, /data/images) to keep the repository clean.
4.2 KiB
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
- ✅ 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)
📋 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)
python main_selenium.py
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.