Skip to content

AnaCandida/desafio-crawler

 
 

Repository files navigation

Python Version Scrapy Version PostgreSQL Version Code Style: Black License: MIT

Welcome to desafio-crawler 👋

Este é um projeto de raspagem de dados para o site IMDB, usando a biblioteca Scrapy. Ele foi construído a partir das orientações do desafio da beeMôn 🐝

O MVP + funcionalidades adicionais do desafio implementadas:

  • Buscar dados de forma automatizada(script de linha de comando ou interface clicavel) ✅
  • Padronizar os retornos de forma estruturada (json/csv) ✅
  • Sistema de logs de para acompanhamento da execução ✅
  • Ter um prova da consulta (Screenshot) ✅
  • Armazenamento dos resultados em um banco relacional ou não relacional ✅
  • Fazer um dataframe que possibilite visualizar os resultados via pandas ✅
  • Trazer resultados de forma dinamica sem fixar caminhos no xpath ✅
  • Dockerizar a aplicação ✅
  • Conseguir agendar uma execução para um dia e horario. ✅

Tecnologias Utilizadas

Executando o projeto:

IMPORTANTE: Certifique-se de ter o Docker e o Docker Compose instalados.Veja a documentação, caso ainda não os tenha instalado.

  1. Clone o repositório:

    git clone https://github.com/AnaCandida/desafio-crawler.git
  2. Navegue até a pasta do projeto e execute:

    docker-compose up -d --build  OU docker compose up -d --build

Nota: O build pode demorar um pouco na primeira execução pois a lib scrapy-playwright requer algumas dependencias adicionais

Execução e Agendamento do IMDB Spider

Agendamento:

O script run_schedule.py permitirá que você escolha o dia da semana e a hora para o agendamento do spider.

  1. Você pode acessar o shell do container:

    docker exec -it /desafio-crawler-scrapy_service-1 /bin/sh
    
  2. Rodar o seguinte comando:

python run_schedule.py

Nota: Para manter o agendamento ativo, é crucial manter o script em execução. Caso o script seja encerrado, o agendamento será perdido. Isso inclui reinicializações do container.

Execução única:

Se preferir rodar o spider uma única vez, utilize o seguinte comando dentro do sheel do container:

python run_schedule.py run_once

Detalhes sobre as implementações 📚:

Este projeto proporcionou uma imersão mais aprofundada nos conceitos de web scraping, oferecendo um entendimento abrangente da biblioteca Scrapy, bem como sua integração eficaz com a biblioteca scrapy_playwright.

Implementações Realizadas:

  • Middleware customizado para rotação de user-agent e ajudar a evitar bloqueios
  • Pipeline customizada para integração com banco de dados Postgres.Isso facilita a manutenção e a reusabilidade do código, separando as preocupações de extração e armazenamento.
  • Class Item para defintir a estrutura dos dados extraídos e manter a consistência.
  • ItemLoader para criar e limpar os dados extraídos. Uso de MapCompose, Takefirt e Compose.
  • Salvamento em lote no banco de dados para reduzir a sobrecarga de operações de banco de dados, melhorando a performance geral.
  • Metodo para evitar o carregamento de recursos desnecessários, como imagens e solicitações POST, otimizando assim a performance
  • Agendamento interativo do usuario via terminal

Author

👩🏻‍💻 Ana Cândida Pereira de Quadros

Licença

Este projeto está licenciado sob a Licença MIT.

About

Este repositório contém a minha solução para o teste técnico da beeMôn.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 96.7%
  • Dockerfile 3.3%