O projeto Raspagem e Armazenamento de Dados de Laptops é uma aplicação desenvolvida para raspar dados de laptops Lenovo de um website de e-commerce de exemplo, armazená-los em um banco de dados MySQL
e gerar arquivos JSON
e SQL
a partir desses dados.
Este projeto utiliza técnicas de raspagem de dados para extrair informações de laptops da marca Lenovo de um site de e-commerce. Os dados são salvos em um banco de dados MySQL
e podem ser exportados para arquivos JSON
e SQL
para análise e uso posterior.
- Raspagem de Dados: Extrai informações de laptops, incluindo título, descrição e opções de HDD, de um website de e-commerce.
- Armazenamento em Banco de Dados: Salva os dados raspados em um banco de dados
MySQL
. - Exportação de Dados: Gera arquivos
JSON
e/ouSQL
a partir dos dados armazenados no banco de dados.
- Node.js
- MySQL
- Git (para clonar o repositório)
Clone o repositório:
git clone git@github.com:imsamuelcovalero/web-scraper.git
Acesse o diretório do projeto e instale as dependências:
cd web-scraper
npm install
Configure o banco de dados MySQL e atualize o arquivo .env
com as informações de conexão. Tanto o docker-compose.yaml
quanto o arquivo database.js
estão esperando usar as variáveis de ambiente definidas no arquivo .env
.
Renomeie o arquivo .env.example
para .env
e atualize as variáveis de ambiente de acordo com o seu ambiente de desenvolvimento:
APP_PORT=3000 # Porta para o servidor escutar (padrão: 3000)
MYSQL_USER=root # Nome de usuário do MySQL (padrão: root)
MYSQL_PASSWORD=sua_senha # Senha do MySQL
MYSQL_DB=web-scraper-db # Nome do banco de dados MySQL
MYSQL_HOST=localhost # Host do MySQL (padrão: localhost)
MYSQL_PORT=3306 # Porta do MySQL (padrão: 3306)
Para iniciar o serviço do banco de dados MySQL
utilizando o docker-compose
, execute o seguinte comando:
docker-compose up -d
Este comando irá iniciar o serviço do banco de dados em um container Docker
, facilitando a configuração e execução do serviço do MySQL
.
Para iniciar o processo de raspagem e armazenamento de dados, execute o seguinte comando:
npm start
Após a execução do comando, você será apresentado com um menu interativo com as seguintes opções:
- Padrão: Raspar e salvar no banco MySQL - Esta opção extrai dados de laptops Lenovo do site de e-commerce e os armazena no banco de dados MySQL. Os dados coletados podem ser utilizados para diversas análises e integrações.
- Gerar arquivo SQL proveniente do banco MySQL - Selecionando esta opção, um arquivo
lenovo_laptops.sql
será gerado, contendo os comandos SQL para recriar os dados raspados em outro banco de dados MySQL. Este arquivo pode ser utilizado para migração, backup ou qualquer outra operação que exija a restauração dos dados em um novo ambiente. - Gerar arquivo JSON a partir do banco MySQL - Esta opção permite a exportação dos dados do banco de dados MySQL para um arquivo
lenovo-laptops.json
. Este formato é amplamente utilizado para a troca de dados entre servidores e aplicações web, sendo também útil para análises e operações que requerem um formato de dados mais flexível. - Gerar ambos os arquivos a partir do banco MySQL - Esta opção realiza a geração dos arquivos
lenovo_laptops.sql
elenovo-laptops.json
, permitindo que você tenha tanto o backup completo do banco de dados quanto uma representação dos dados em um formato amplamente compatível para uso em diversas aplicações. - Gerar arquivo JSON diretamente pela raspagem (sem banco de dados) - Escolha esta opção para gerar um arquivo
lenovo-laptops.json
diretamente a partir da raspagem de dados, sem a necessidade de armazenamento intermediário em um banco de dados. Isso é ideal para situações em que a persistência de dados não é necessária ou quando se deseja trabalhar com os dados de maneira imediata. - Cancelar - Use esta opção para sair do script e encerrar a execução do programa.
Siga as instruções na tela para selecionar a opção desejada e proceder com a raspagem e o armazenamento de dados.
.
├── src
│ ├── database
│ │ ├── config
│ │ └── database.js
│ │ └── models
│ │ └── HddOption.js
│ │ └── Laptop.js
│ ├── scraperFunctions.js
│ └── ...
├── tests
| ├── ...
├── .env.example
├── createDatabase.js
├── docker-compose.yaml
├── lenovo_laptops.sql *
├── lenovo-laptops.json *
├── package.json
├── script.js
└── ...
*Nota: Os arquivos lenovo_laptops.sql
e lenovo-laptops.json
são criados apenas quando determinadas ações de exportação de dados são realizadas pelo usuário. Eles não são incluídos por padrão no repositório e serão encontrados na raiz do projeto somente após a execução dos comandos relevantes do script
.
- src: Contém os arquivos-fonte da aplicação.
- database: Contém os arquivos relacionados ao banco de dados.
- models: Contém os modelos de dados utilizados pela aplicação.
- config: Contém o arquivo de configuração do banco de dados.
- scraperFunctions.js: Contém as funções de raspagem de dados.
- database: Contém os arquivos relacionados ao banco de dados.
- .env.example: Contém um exemplo do arquivo
.env
utilizado para armazenar as variáveis de ambiente. - createDatabase.js: Contém o script para criação do banco de dados.
- docker-compose.yaml: Contém a configuração do banco de dados MySQL para uso com
Docker Compose
. - lenovo_laptops.sql: Contém os comandos SQL para recriar os dados raspados em outro banco de dados MySQL.
- lenovo-laptops.json: Contém os dados raspados em formato
JSON
. - package.json: Contém as informações do projeto e as dependências da aplicação e os
scripts
de execução. - script.js: Contém o script principal da aplicação.
- Node.js: Ambiente de execução para
JavaScript
. Escolhido por sua eficiência e vasta comunidade de apoio,Node.js
é o ambiente de execução ideal para desenvolvimentoJavaScript
do lado do servidor. - Puppeteer: Biblioteca para controle de navegador headless. Utilizei o
Puppeteer
pela sua capacidade de automatizar ações em navegadores de forma headless, permitindo a raspagem de dados de forma eficiente. - MySQL: Sistema de gerenciamento de banco de dados. Optei pelo
MySQL
devido à sua robustez, escalabilidade e facilidade de uso como sistema de gerenciamento de banco de dados. - Sequelize:
ORM
paraNode.js
. Escolhido por ser umORM
poderoso, o que facilita a escrita de consultas de banco de dados de forma segura e mantém nosso código limpo e fácil de manter. - Inquirer.js: Biblioteca para interface de linha de comando interativa.
Inquirer.js
torna as interações de linha de comando simples e intuitivas, melhorando a experiência do usuário ao executar o script. - Jest:
Framework
de testes emJavaScript
.Jest
é umframework
de testes completo e de fácil configuração, que oferece funcionalidades como mock, cobertura de código e isolamento de teste, sendo a escolha perfeita para garantir a qualidade do código. - ESLint: Ferramenta de análise de código para identificar padrões problemáticos encontrados no código
JavaScript
.ESLint
ajuda a manter o código alinhado com as melhores práticas e padrões da indústria, além de identificar problemas antes que eles se tornem críticos, o que é essencial para a manutenção a longo prazo do projeto.
Para executar os testes da aplicação, use o comando:
npm test
Os testes foram desenvolvidos utilizando o framework
Jest e são projetados para validar as funcionalidades críticas da aplicação. Eles podem ser encontrados no diretório __tests__
e seu propósito é garantir que a aplicação funcione corretamente e que as alterações feitas no código não quebrem as funcionalidades existentes.
Para verificar a qualidade do código com o linter
, use o comando:
npm run lint
Este projeto foi desenvolvido seguindo os padrões de código JavaScript com o uso do ESLint, utilizando a configuração do Airbnb e algumas regras personalizadas para promover um código limpo e bem estruturado.
Este projeto utiliza a Especificação de Commits Convencionais, com alguns tipos da convenção Angular. Além disso, foi utilizado o pacote conventional-commit-cli.
Durante o desenvolvimento da aplicação, utilizei o Git
como ferramenta de controle de versão e o GitHub
como plataforma de hospedagem, seguindo o padrão Gitflow. A branch develop
foi o principal local de desenvolvimento, e suas mudanças foram periodicamente mescladas à branch main
através de pull requests, seguindo um processo cuidadoso de revisão e integração.
É importante lembrar que, ao encontrar problemas durante a instalação ou execução, uma boa prática é verificar as mensagens de erro que aparecem no terminal. Elas geralmente fornecem pistas sobre o que pode estar errado. Também é recomendável manter todas as dependências atualizadas e garantir que seu ambiente de desenvolvimento esteja configurado corretamente. Além disso, é aconselhável consultar a documentação oficial das dependências usadas no projeto em caso de problemas.
Em caso de dúvidas, não hesite em abrir uma issue no GitHub ou me contatar diretamente. Estou à disposição para ajudar.
Espero que estas instruções sejam úteis para a instalação e execução do projeto. Se houver mais alguma coisa em que eu possa ajudar, por favor, me avise.