Files
pagodera/iconScript/main_selenium.py
Evandro Fonseca Junior 2b790d8eb4 feat(library): add vocation filter, normalize categories, improve grid layout
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.
2025-10-30 18:44:52 -03:00

124 lines
3.2 KiB
Python

"""
Script principal para executar o spider com Selenium
"""
import sys
import os
import argparse
# Adiciona o diretório raiz ao path do Python
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from tibiawiki.spiders.selenium_spider import SeleniumSpider
def parse_arguments():
"""
Parse argumentos da linha de comando
"""
parser = argparse.ArgumentParser(
description='TibiaWiki Scraper - Extrai dados e imagens do TibiaWiki',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Exemplos de uso:
# Modo completo (todas as categorias)
python main_selenium.py
# Link específico
python main_selenium.py --url "https://www.tibiawiki.com.br/wiki/Espadas"
# Múltiplos links via arquivo
python main_selenium.py --file links.txt
"""
)
parser.add_argument(
'--url',
type=str,
help='URL específica para fazer scraping (ex: --url "https://www.tibiawiki.com.br/wiki/Espadas")'
)
parser.add_argument(
'--file',
type=str,
help='Arquivo TXT com múltiplas URLs (uma por linha)'
)
parser.add_argument(
'--headless',
action='store_true',
help='Executar Chrome em modo headless (sem interface gráfica)'
)
args = parser.parse_args()
# Validação: apenas um modo por vez
if args.url and args.file:
parser.error("Erro: não é possível usar --url e --file ao mesmo tempo. Escolha apenas um.")
return args
def main():
"""
Executa o spider com Selenium
"""
args = parse_arguments()
print("=" * 80)
print("TibiaWiki Scraper - Selenium Edition")
print("=" * 80)
# Determina modo de operação
if args.url:
print("\nModo: Link Específico")
print(f"URL: {args.url}")
elif args.file:
print("\nModo: Arquivo de Links")
print(f"Arquivo: {args.file}")
else:
print("\nModo: Completo (todas as categorias)")
print("\nO processo pode demorar de 30min a 1h dependendo da quantidade de categorias.")
print("\nEste scraper usa Selenium para contornar bloqueios anti-bot.")
print("Um navegador Chrome será aberto automaticamente.")
print("Aguarde...\n")
# Cria spider
spider = SeleniumSpider(
db_path='data/tibiawiki.db',
images_path='data/images',
headless=args.headless
)
# Executa no modo apropriado
if args.url:
spider.run(single_url=args.url)
elif args.file:
spider.run(urls_file=args.file)
else:
spider.run()
print("\n" + "=" * 80)
print("Extração concluída!")
print("=" * 80)
print("\nDados salvos em:")
print("- Banco SQLite: data/tibiawiki.db")
print("- Imagens: data/images/")
print("\nPara ver os dados:")
print(" sqlite3 data/tibiawiki.db")
print(" .tables")
print(" SELECT * FROM capacetes LIMIT 10;")
print("\n")
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print("\n\nScraping interrompido pelo usuário.")
sys.exit(0)
except Exception as e:
print(f"\n\nErro: {e}")
sys.exit(1)