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.
This commit is contained in:
1 parent
bf12f2c6f1
commit
29ba5aece0
27 files changed
+1702
-4
No files matched your search
@@ -0,0 +1,98 @@
|
||||
"""
|
||||
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
|
||||
|
||||
Reference in new issue
Block a user