{"id":26934201,"url":"https://github.com/imsamuelcovalero/web-scraper","last_synced_at":"2026-04-12T17:02:38.258Z","repository":{"id":209214649,"uuid":"722317843","full_name":"imsamuelcovalero/web-scraper","owner":"imsamuelcovalero","description":"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.","archived":false,"fork":false,"pushed_at":"2023-12-04T17:41:05.000Z","size":137,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-04-16T08:49:43.676Z","etag":null,"topics":["docker-compose","inquirerjs","jest-tests","json","mysql","nodejs","puppeteer","sequelize","webscraper"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imsamuelcovalero.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-11-22T22:09:16.000Z","updated_at":"2024-04-16T08:49:43.677Z","dependencies_parsed_at":"2023-11-28T19:51:37.221Z","dependency_job_id":null,"html_url":"https://github.com/imsamuelcovalero/web-scraper","commit_stats":null,"previous_names":["imsamuelcovalero/web-scraper"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsamuelcovalero%2Fweb-scraper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsamuelcovalero%2Fweb-scraper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsamuelcovalero%2Fweb-scraper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsamuelcovalero%2Fweb-scraper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imsamuelcovalero","download_url":"https://codeload.github.com/imsamuelcovalero/web-scraper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246798350,"owners_count":20835773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-compose","inquirerjs","jest-tests","json","mysql","nodejs","puppeteer","sequelize","webscraper"],"created_at":"2025-04-02T10:34:34.272Z","updated_at":"2026-04-12T17:02:38.174Z","avatar_url":"https://github.com/imsamuelcovalero.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Raspagem e Armazenamento de Dados de Laptops\n\nO 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.\n\n## Sumário\n\n- [Raspagem e Armazenamento de Dados de Laptops](#raspagem-e-armazenamento-de-dados-de-laptops)\n  - [Sumário](#sumário)\n  - [Visualização](#visualização)\n  - [Contexto](#contexto)\n    - [Funcionalidades](#funcionalidades)\n  - [Como Rodar a Aplicação](#como-rodar-a-aplicação)\n    - [Pré-requisitos](#pré-requisitos)\n    - [Configuração](#configuração)\n    - [Execução](#execução)\n  - [Detalhes Técnicos](#detalhes-técnicos)\n    - [Estrutura do Projeto](#estrutura-do-projeto)\n    - [Arquivos](#arquivos)\n    - [Tecnologias e Ferramentas Utilizadas](#tecnologias-e-ferramentas-utilizadas)\n    - [Testes](#testes)\n    - [Lint](#lint)\n  - [Notas](#notas)\n    - [Git, GitHub e Histórico de Commits](#git-github-e-histórico-de-commits)\n    - [Problemas e Soluções](#problemas-e-soluções)\n\n## Visualização\n\n\u003cdiv align=\"center\"\u003e\n\n![Web Scraper](https://github.com/imsamuelcovalero/web-scraper/assets/98184355/d5443311-164d-4316-aafb-04cfb23deab8)\n\n\u003c/div\u003e\n\n## Contexto\n\nEste 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.\n\n### Funcionalidades\n\n- **Raspagem de Dados:** Extrai informações de *laptops*, incluindo título, descrição e opções de HDD, de um *website* de *e-commerce*.\n- **Armazenamento em Banco de Dados:** Salva os dados raspados em um banco de dados `MySQL`.\n- **Exportação de Dados:** Gera arquivos `JSON` e/ou `SQL` a partir dos dados armazenados no banco de dados.\n\n## Como Rodar a Aplicação\n\n### Pré-requisitos\n\n- **Node.js**\n- **MySQL**\n- **Git** (para clonar o repositório)\n\n### Configuração\n\nClone o repositório:\n\n```bash\ngit clone git@github.com:imsamuelcovalero/web-scraper.git\n```\n\nAcesse o diretório do projeto e instale as dependências:\n\n```bash\ncd web-scraper\nnpm install\n```\n\nConfigure 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`.\n\nRenomeie o arquivo `.env.example` para `.env` e atualize as variáveis de ambiente de acordo com o seu ambiente de desenvolvimento:\n\n```bash\nAPP_PORT=3000 # Porta para o servidor escutar (padrão: 3000)\nMYSQL_USER=root # Nome de usuário do MySQL (padrão: root)\nMYSQL_PASSWORD=sua_senha # Senha do MySQL\nMYSQL_DB=web-scraper-db # Nome do banco de dados MySQL\nMYSQL_HOST=localhost # Host do MySQL (padrão: localhost)\nMYSQL_PORT=3306 # Porta do MySQL (padrão: 3306)\n```\n\nPara iniciar o serviço do banco de dados `MySQL` utilizando o `docker-compose`, execute o seguinte comando:\n\n```bash\ndocker-compose up -d\n```\n\nEste 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`.\n\n### Execução\n\nPara iniciar o processo de raspagem e armazenamento de dados, execute o seguinte comando:\n\n```bash\nnpm start\n```\n\nApós a execução do comando, você será apresentado com um menu interativo com as seguintes opções:\n\n1. **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.\n2. **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.\n3. **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.\n4. **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.\n5. **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.\n6. **Cancelar** - Use esta opção para sair do script e encerrar a execução do programa.\n\nSiga as instruções na tela para selecionar a opção desejada e proceder com a raspagem e o armazenamento de dados.\n\n## Detalhes Técnicos\n\n### Estrutura do Projeto\n\n```lua\n.\n├── src\n│   ├── database\n│   │   ├── config\n│   │       └── database.js\n│   │   └── models\n│   │       └── HddOption.js\n│   │       └── Laptop.js\n│   ├── scraperFunctions.js\n│   └── ...\n├── tests\n|   ├── ...\n├── .env.example\n├── createDatabase.js\n├── docker-compose.yaml\n├── lenovo_laptops.sql *\n├── lenovo-laptops.json *\n├── package.json\n├── script.js\n└── ...\n```\n\n**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`.*\n\n### Arquivos\n\n- **src:** Contém os arquivos-fonte da aplicação.\n  - **database:** Contém os arquivos relacionados ao banco de dados.\n    - **models:** Contém os modelos de dados utilizados pela aplicação.\n    - **config:** Contém o arquivo de configuração do banco de dados.\n  - **scraperFunctions.js:** Contém as funções de raspagem de dados.\n- **.env.example:** Contém um exemplo do arquivo `.env` utilizado para armazenar as variáveis de ambiente.\n- **createDatabase.js:** Contém o script para criação do banco de dados.\n- **docker-compose.yaml:** Contém a configuração do banco de dados MySQL para uso com `Docker Compose`.\n- **lenovo_laptops.sql:** Contém os comandos SQL para recriar os dados raspados em outro banco de dados MySQL.\n- **lenovo-laptops.json:** Contém os dados raspados em formato `JSON`.\n- **package.json:** Contém as informações do projeto e as dependências da aplicação e os `scripts` de execução.\n- **script.js:** Contém o script principal da aplicação.\n\n### Tecnologias e Ferramentas Utilizadas\n\n- [**Node.js**](https://nodejs.org): 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.\n- [**Puppeteer**](https://pptr.dev/): 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.\n- [**MySQL**](https://www.mysql.com/): 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.\n- [**Sequelize**](https://sequelize.org/): `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.\n- [**Inquirer.js**](https://www.npmjs.com/package/inquirer): 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*.\n- [**Jest**](https://jestjs.io/): `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.\n- [**ESLint**](https://eslint.org/): 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.\n\n### Testes\n\nPara executar os testes da aplicação, use o comando:\n\n```bash\nnpm test\n```\n\nOs testes foram desenvolvidos utilizando o `framework` [Jest](https://jestjs.io/) 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.\n\n### Lint\n\nPara verificar a qualidade do código com o `linter`, use o comando:\n\n```bash\nnpm run lint\n```\n\nEste projeto foi desenvolvido seguindo os padrões de código JavaScript com o uso do [ESLint](https://eslint.org/), utilizando a configuração do [Airbnb](https://github.com/airbnb/javascript) e algumas regras personalizadas para promover um código limpo e bem estruturado.\n\n## Notas\n\n### Git, GitHub e Histórico de Commits\n\nEste projeto utiliza a [Especificação de Commits Convencionais](https://www.conventionalcommits.org/en/v1.0.0/), com alguns tipos da [convenção Angular](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines). Além disso, foi utilizado o pacote [conventional-commit-cli](https://www.npmjs.com/package/conventional-commit-cli).\n\nDurante 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](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow). 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.\n\n### Problemas e Soluções\n\nÉ 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.\n\nEm caso de dúvidas, não hesite em abrir uma [issue](https://github.com/imsamuelcovalero/web-scraper/issues) no GitHub ou me contatar diretamente. Estou à disposição para ajudar.\n\nEspero 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.\n\n[⬆ Voltar ao topo](#sumário)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimsamuelcovalero%2Fweb-scraper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimsamuelcovalero%2Fweb-scraper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimsamuelcovalero%2Fweb-scraper/lists"}