Files
pagodera/iconScript/README.md
T
Evandro Fonseca Junior 29ba5aece0 feat: add TibiaWiki scraper project and update .gitignore
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.
2025-10-30 00:55:25 -03:00

148 lines
4.2 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
- ✅ 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
```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)**
```bash
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)**
```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.