Final Fantasy XIV Weapons - In progress
O Python chegou a Eorzea! 🐍
Nesse projeto, resolvi unir o estudo com o lazer: desenvolvi um script de web scraping utilizando BeautifulSoup e Python para extração de dados de armas do MMORPG Final Fantasy XIV, um dos meus jogos favoritos. Os dados estão disponíveis no Eorzea Database.
Durante meus estudos de Engenharia de Dados, sempre tive dúvidas sobre temas de projetos, ainda mais relacionados a extração de dados. Portanto, pensei que seria interessante utilizar dados de fontes que eu conheço bem e que podem me trazer insights para minha própria rotina no jogo.
Para esse pipeline escolhi a base de armas, o item mais cobiçado de qualquer jogo de RPG. Extraí informações essenciais que podem ser utilizadas para ranquear as armas por diversos critérios, como dano, raridade, etc.
Informações extraídas:
- Nome da arma;
- Nível da arma;
- Nível mínimo para uso;
- Classe(s) que pode(m) usar;
- Tipo da arma (espada, cajado, lança...)
- Atributos principais (Strength, Vitality, Mind...);
- Dano físico / Auto-ataque / Delay;
- Raridade (com base na cor do contorno do ícone);
- Fonte do item (ex: vendido por NPC, obtido por coffer, comprado com tomestones...).
Um dos desafios que enfrentei durante o desenvolvimento desse projeto foi relacionado a volumetria de dados. O Eorzea Database possui 5872 itens, separados em 118 páginas. Utilizando apenas laços de repetição, meu pipeline estava com problemas de performance, chegando a demorar mais de 30 minutos para extrair todos os dados.
Outro ponto a se mencionar é que o robots.txt do Eorzea Database não determina nenhum bloqueio, o que me permite rodar o script sem delays. Apesar disso, evito rodar o scraping com frequência para não sobrecarregar o servidor do Lodestone.
Diante disso, pesquisei por alternativas e encontrei algumas soluções que aumentaram drasticamente a performance do meu script:
- Utilização de cache com persistência em disco para evitar re-scraping desnecessário;
- Paralelização para processar os loops mais rapidamente;