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.
124 lines
3.2 KiB
Python
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)
|
|
|