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.
173 lines
4.9 KiB
Markdown
173 lines
4.9 KiB
Markdown
# 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.
|
|
|