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.
99 lines
2.2 KiB
Python
99 lines
2.2 KiB
Python
"""
|
|
Funções utilitárias para normalização e formatação de dados
|
|
"""
|
|
import unicodedata
|
|
import re
|
|
|
|
|
|
def normalize_name(name):
|
|
"""
|
|
Normaliza nomes removendo acentos e substituindo espaços por underscores
|
|
|
|
Args:
|
|
name: Nome a ser normalizado
|
|
|
|
Returns:
|
|
str: Nome normalizado (lowercase, sem acentos, underscores no lugar de espaços)
|
|
|
|
Exemplos:
|
|
"Capacetes" -> "capacetes"
|
|
"Antigas Wands e Rods" -> "antigas_wands_rods"
|
|
"Calças" -> "calcas"
|
|
"""
|
|
if not name:
|
|
return ""
|
|
|
|
# Remove acentos
|
|
nfd = unicodedata.normalize('NFD', name)
|
|
name_no_accent = ''.join(c for c in nfd if unicodedata.category(c) != 'Mn')
|
|
|
|
# Converte para lowercase e substitui espaços por underscores
|
|
normalized = re.sub(r'[^a-z0-9]+', '_', name_no_accent.lower())
|
|
|
|
# Remove underscores do início e fim
|
|
return normalized.strip('_')
|
|
|
|
|
|
def parse_int(text):
|
|
"""
|
|
Extrai um inteiro de um texto, removendo caracteres não numéricos
|
|
|
|
Args:
|
|
text: Texto que pode conter números
|
|
|
|
Returns:
|
|
int ou None: Número extraído ou None se não encontrar
|
|
"""
|
|
if not text:
|
|
return None
|
|
|
|
# Remove tudo que não for dígito
|
|
numbers = re.sub(r'\D', '', str(text))
|
|
|
|
return int(numbers) if numbers else None
|
|
|
|
|
|
def parse_float(text):
|
|
"""
|
|
Extrai um float de um texto
|
|
|
|
Args:
|
|
text: Texto que pode conter números decimais
|
|
|
|
Returns:
|
|
float ou None: Número extraído ou None se não encontrar
|
|
"""
|
|
if not text:
|
|
return None
|
|
|
|
# Remove tudo exceto dígitos, ponto e vírgula
|
|
clean_text = re.sub(r'[^\d.,]', '', str(text))
|
|
|
|
# Substitui vírgula por ponto
|
|
clean_text = clean_text.replace(',', '.')
|
|
|
|
try:
|
|
return float(clean_text)
|
|
except ValueError:
|
|
return None
|
|
|
|
|
|
def clean_text(text):
|
|
"""
|
|
Limpa texto removendo espaços extras e quebras de linha
|
|
|
|
Args:
|
|
text: Texto a ser limpo
|
|
|
|
Returns:
|
|
str: Texto limpo
|
|
"""
|
|
if not text:
|
|
return ""
|
|
|
|
# Remove espaços extras e quebras de linha
|
|
cleaned = re.sub(r'\s+', ' ', str(text)).strip()
|
|
|
|
return cleaned
|
|
|