imsamuelcovalero / web-scraper

Aplicação para raspar e armazenar dados de laptops Lenovo de sites de e-commerce. Utiliza Node.js e MySQL para coleta e gestão de dados, com opções de exportação para JSON e SQL.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Raspagem e Armazenamento de Dados de Laptops

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.

Sumário

Visualização

Web Scraper

Contexto

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.

Funcionalidades

  • 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/ou SQL a partir dos dados armazenados no banco de dados.

Como Rodar a Aplicação

Pré-requisitos

  • Node.js
  • MySQL
  • Git (para clonar o repositório)

Configuração

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.

Execução

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:

  1. 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.
  2. 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.
  3. 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.
  4. Gerar ambos os arquivos a partir do banco MySQL - Esta opção realiza a geração dos arquivos lenovo_laptops.sql e lenovo-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.
  5. 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.
  6. 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.

Detalhes Técnicos

Estrutura do Projeto

.
├── 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.

Arquivos

  • 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.
  • .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.

Tecnologias e Ferramentas Utilizadas

  • 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 desenvolvimento JavaScript 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 para Node.js. Escolhido por ser um ORM 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 em JavaScript. Jest é um framework 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.

Testes

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.

Lint

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.

Notas

Git, GitHub e Histórico de Commits

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.

Problemas e Soluções

É 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.

⬆ Voltar ao topo

About

Aplicação para raspar e armazenar dados de laptops Lenovo de sites de e-commerce. Utiliza Node.js e MySQL para coleta e gestão de dados, com opções de exportação para JSON e SQL.


Languages

Language:JavaScript 95.2%Language:Dockerfile 4.8%