Aplicação que provê meios para raspar dados do blog da Trybe. Foi desenvolvida como projeto de aprendizado no curso de desenvolvimento Web da Trybe.
Habilidades trabalhadass
- Utilizar o terminal interativo do Python
- Escrever módulos e importá-los em outros códigos
- Aplicar técnicas de raspagem de dados
- Extrair dados de conteúdo HTML
- Armazenar os dados obtidos em um banco de dados
MongoDB
A aplicação usa um banco de dados denominado tech_news
gerenciado pelo MongoDB rodando na porta 27017
.
As funções que interagem com o banco de dados estão presentes no módulo database.py
.
As notícias são armazenadas em uma coleção chamada news
.
Docker
É possível rodar o MongoDB pelo docker com o comando no terminal:
docker-compose up -d mongodb
Para mais detalhes acerca do mongo com o docker, olhe o arquivo docker-compose.yml
Caso queira instalar e rodar o servidor MongoDB nativo na máquina, siga as instruções no tutorial oficial:
Ubuntu: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
Instalação
27017
- Clone o repositório e entre na pasta do repositório que você acabou de clonar
git clone git@github.com:pennaor/tech_news.git
cd ./tech_news
- Crie o ambiente virtual para o projeto
python3 -m venv .venv && source .venv/bin/activate
- Instale as dependências
python3 -m pip install -r dev-requirements.txt
Utilização
- Abra um terminal Python importando as funções do arquivo menu.py
python3 -i tech_news/menu.py
- Execute a função analyzer_menu e em seguida digite o número da opção desejada
analyser_menu()
Selecione uma das opções a seguir:
0 - Popular o banco com notícias;
1 - Buscar notícias por título;
2 - Buscar notícias por data;
3 - Buscar notícias por categoria;
4 - Listar top 5 categorias;
5 - Sair.
0 - Popula o banco de dados com a quantidade de notícias informada
1 - Busca
case insensitive
de nóticias por título que contenha o valor procurado. É retornada uma lista de tuplas contendo o título e URL da notícia
2 - Busca notícias pela data no formato YYYY-MM-DD. É retornada uma lista de tuplas contendo o título e URL da notícia
3 - Busca
case insensitive
de notícias por categoria, É retornada uma lista de tuplas contendo o título e URL da notícia
4 - Lista as 5 categorias mais encontradas
5 - Encerra o programa
Teste da classe ReadingPlanService
O teste test_reading_plan_group_news
, presente em tests/reading_plan/test_reading_plan.py
, deve garantir o funcionamento correto do método group_news_for_available_time
da classe ReadingPlanService
.
ReadingPlanService
, implementado no arquivo tech_news/analyzer/reading_plan.py
, coleta as notícias do banco de dados e as divide em 2 agrupamentos:
readable
: notícias que podem ser lidas em atéX
minutosunreadable
: notícias que não podem ser lidas em atéX
minutos
Além disso, as notícias readable
são organizadas em sub-grupos cuja soma dos tempos de leitura seja menor que X
. Assim, a pessoa leitora pode ler mais do que 1 notícia sem ultrapassar o tempo disponível!
O valor de X
, que é o tempo de leitura que uma pessoa tem disponível, é passado por parâmetro no método group_news_for_available_time
.
Para executar o teste, digite em um terminal:
python3 -m pytest