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. ✅
- Poetry (v1.1.12)
- Python (v3.11.*)
- Scrapy (v2.11.0)
- scrapy-playwright (v0.0.33)
- schendule (1.2.1)
- pandas (^2.1.3)
- sqlalchemy (^2.0.23)
IMPORTANTE: Certifique-se de ter o Docker e o Docker Compose instalados.Veja a documentação, caso ainda não os tenha instalado.
-
Clone o repositório:
git clone https://github.com/AnaCandida/desafio-crawler.git
-
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
O script run_schedule.py permitirá que você escolha o dia da semana e a hora para o agendamento do spider.
-
Você pode acessar o shell do container:
docker exec -it /desafio-crawler-scrapy_service-1 /bin/sh -
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.
Se preferir rodar o spider uma única vez, utilize o seguinte comando dentro do sheel do container:
python run_schedule.py run_once
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
👩🏻💻 Ana Cândida Pereira de Quadros
- Github: @AnaCandida
- LinkedIn: @https://www.linkedin.com/in/anacandidaquadros/
Este projeto está licenciado sob a Licença MIT.