Web Scraping em Paralelo com Rust e Rayon
- #Rust
🦀Extraindo Dados da Wikipedia com Performance
Fala, devs!
Neste artigo, compartilho um projeto pessoal onde combinei Rust, web scraping e paralelismo com Rayon para extrair dados de jogadores brasileiros destacados pela IFFHS diretamente da Wikipedia.
Foi uma excelente oportunidade para explorar a robustez e velocidade do Rust — e entender como usar múltiplas threads de forma simples com a biblioteca Rayon.
🧠 Objetivo
Extrair dados estruturados da seguinte página da Wikipedia:
“Melhores jogadores brasileiros do século XX segundo a IFFHS”
Coletar, para cada jogador listado:
- 📌 Posição no ranking
- 📌 Nome
- 📌 Estado de nascimento
- 📌 Total de votos recebidos
- 📝 A primeira frase da biografia na Wikipedia
Tudo isso sendo processado em paralelo, com foco em performance.
🛠️ Ferramentas e Bibliotecas Utilizadas
- 🦀 Rust — linguagem principal do projeto
- ⚙️ Rayon — para paralelismo de maneira simples e eficiente
- 🌐 reqwest — para requisições HTTP
- 🧹 scraper — parser HTML/CSS para extrair dados da página
- 🧾 csv — para exportar os dados extraídos
- ⏱️ std::time — para medir tempo de execução
🚀 O Processo
- Acessar a tabela principal da Wikipedia
- A tabela contém os dados dos jogadores, como posição, nome, estado e votos.
- Iterar sobre os nomes e buscar as páginas individuais na Wikipedia
- Para cada jogador, acessar sua página pessoal e extrair a primeira frase da biografia.
- Usar Rayon para processar em paralelo
- Com
par_iter()
, conseguimos lançar múltiplas threads automaticamente, tornando o processo muito mais rápido que o sequencial.
- Exportar tudo para CSV
- Geramos um arquivo
jogadores.csv
com os dados estruturados.
- Medição de performance
- Ao final, mostramos:
- ⏱️ Tempo total de execução
- 📄 Total de páginas processadas
- 📊 Tempo médio por página
📊 Resultados
A diferença entre o processo sequencial e o paralelo foi perceptível!
Com Rayon, as requisições e análises das páginas da Wikipedia ocorreram simultaneamente, reduzindo drasticamente o tempo de execução.
Esse tipo de abordagem é essencial quando lidamos com múltiplas fontes web ou tarefas que podem ser paralelizadas.
💡 O Que Eu Aprendi
- Como usar Rayon para aplicar paralelismo de forma simples com
par_iter()
. - Como combinar web scraping com Rust e bibliotecas modernas.
- Como medir a performance real de uma aplicação em Rust.
- A importância de evitar vazamento de dados no Git (uso do
.gitignore
corretamente). - Como estruturar um projeto real para extração de dados.
📎 Acesse o Projeto
Repositório completo no GitHub:
👉 github.com/alexpaulo100/web-crawling-rayon
🔚 Conclusão
Rust continua me surpreendendo pela performance e segurança.
Combinando boas bibliotecas como Rayon, reqwest e scraper, é possível criar soluções de alto desempenho para tarefas como web scraping e processamento de dados.
Se você também curte dados, scraping e Rust — esse projeto pode ser uma ótima inspiração!
Curtiu o projeto? Deixa um feedback ou compartilha sua experiência com scraping em Rust nos comentários!
Até a próxima! 👋
#RustLang #Rayon #WebScraping #ProjetosComRust #OpenSource #Desenvolvimento #ScrapingComPerformance #DIO