Esse projeto tem como objetivo desenvolver um processo de web crawling para estruturar dados de portais concorrentes de notícias, agregar métricas sobre esses dados e disponibilizar informações.
Aqui estão as tecnologias usadas neste projeto.
- Python 3.10.4
- MongoDB 5.0.8
-
Definição da área no qual serão extraído os dados.
- Games:
- League Of Legends
- Counter-Strike: Global Offensive
- Games:
-
Procurar sites com estruturas parecidas, ou seja, contiam os mesmos elementos como Autor, Data, Tags entre outos. Foram escolhidos:
- Sites:
- MaisEsports
- Techtudo Esports
- Sites:
-
Escolha de Framework e Pacotes auxiliares.
- Framework:
- Scrapy - Muito usado no mercado, Rápido, Facilmente extensível e Diversas alternativas para deploy.
- Pacotes Auxiliares
- Pymongo - Criado pela MongoDB, possui diversas funções que auxiliam durante o uso do MongoDB via python.
- Pymongo - Criado pela MongoDB, possui diversas funções que auxiliam durante o uso do MongoDB via python.
- Framework:
-
Desenvolvimento e organização do código.
O programa foi desenvolvido de forma modular, afim de facilitar na detecção de erros, manutenção de código e reutilização de funções.
│ mongo_script.txt #Comandos para criação de Database e Collection para o MongoDB │ README.md #Documentação │ requirements.txt #Pacotes e versões necessários para rodar o programa │ run.py #Script que inicia todo o programa │ scrapy.cfg #Configurações do Scrapy │ ├───esports │ │ items.py #Classe para padronização e manipulação dos dados │ │ pipelines.py #Classe para transformação e inserção de cada item em nossa Collection │ │ settings.py #Setados nossas configurações de projeto │ │ __init__.py │ │ │ └───spiders │ maisesports.py #Classe criada para a extração de dados e retorno de item para o pipeline │ techtudo.py #Classe criada para a extração de dados e retorno de item para o pipeline │ __init__.py │ └───logs #Pasta onde fica localizado os logs do sistema, são gerados automaticamente, sendo registrados pelo dia da execução 2022-05-27.log
-
Extração, Transformação e Carregamento
-
Dados extraídos:
- Site
- Url
- Título
- Autor
- Data de Publicação
- Data de Extração
- Tags
-
Transformações aplicadas:
- Padronização da Data de Publicação
- Remoção de espaços desnecessários nas tags
- Caso o retorno das tags sejam listas vazias, definimos como tipo None
- Verificação da quantidade de Autores
-
Carregamento dos dados:
- Dados carregados ao final de sua passagem pelo pipeline
- Somente são carregados dados novos, que não possuem registro em nosso Banco de Dados
-
-
Desempenho do programa
Nossos logs salvam tudo que o programa execulta, lá podemos encontrar a métrica de tempo de execução, onde ficaram da seguinte maneira:
-
Techtudo Esports
- Quantidade de Noticias - 19
- Tempo de Execução - 25.71 segundos
-
MaisEsports
- Quantidade de Noticias - 24
- Tempo de Execução - 33.26 segundos
O tempo de execução pode variar de acordo com os hardwares da máquina e velocidade da internet.
-
-
Deploy e Escalabilidade
Para o deploy da aplicação, temos 3 alternativas:
- Implantando em um servidor Scrapyd(indicado pelo framework)
- Facilidade no deploy
- Monitoramento
- Agendamento via requisição HTTP/GET
- Baixa Escalabilidade
- Implantando no Zyte Scrapy Cloud(indicado pelo framework)
- Servidor em Nuvem
- Interface gráfica
- Gerenciar spiders, revisar itens, logs e estatísticas dos scrapings.
- Alta Escalabilidade
- Agendando nosso run.py em um servidor
- Maior economia
- Facilidade no deploy
- Baixa Escalabilidade
- Implantando em um servidor Scrapyd(indicado pelo framework)
- Clone o repositório
$ git clone https://github.com/andreventura02/ProjetoScrapingEsports.git
- Abra o terminal e navegue até a pasta clonada
$ pip install -r requirements.txt
- Caso esteja utilizando linux, será necessário executar o comando abaixo
$ sudo apt install python3-scrapy
-
Em seguida, execute os comandos localizados no arquivo mongo_script.txt para criar a Database e a Collection.
-
Configure a conexão e modo de extração no arquivo esports/settings.py
- MONGO_URI - String de Conexão
- MONGO_DATABASE - Nome da Database
- ITEM_DAY - True raspa apenas os dados do dia, caso seja False ele raspa todos os dados disponíveis
-
Necessário a criação de uma pasta chamada 'logs/'
-
Após a configuração, vá até a raiz da pasta e execute
$ python run.py
Em nossos dados, podemos buscar por padrões, como:
- Processamento de Linguagem Natural nos títulos
- Analisar quais as tags mais utilizadas em ambos os sites
- Quais horários as noticias são postadas
- Quais os dias da semana em que mais são postados as noticias