Projeto: Construção de um Feed de Site de Notícias usando Beautiful Soup e Streamlit

Posted by : on

Categoria : python   beautifulsoup   streamlit   webscraping


1 – Introdução

A proposta deste projeto é demonstrar o conhecimento nas bibliotecas utilizadas para a extração de dados de sites e a criação de um feed dinâmico para exibição em uma aplicação Streamlit. Serão coletados: URL da imagem da notícia, título da notícia, URL da notícia, descrição e data de atualização. O programa será dividido em duas partes:

  • Extração de dados e armazenamento no banco de dados.
  • Exibição dos dados usando Streamlit.

2 – Tecnologias Utilizadas

  • Python 3.10
  • Beautiful Soup
  • Streamlit
  • SQLite (banco de dados)

3 – Sites Extraídos (NoticiasRss)

Aqui estão os feeds de notícias utilizados no projeto:

4 – Modelagem

4.1 – Construção do Banco de Dados

O banco de dados é composto por duas tabelas principais:

  • SITE: Armazena os detalhes dos sites de notícias.
  • NOTÍCIA: Armazena as notícias, associando cada notícia a um site.

Cada site possui várias notícias, e cada notícia pertence a um site específico.

Diagrama do Banco de Dados

4.2 – Construção do Pipeline

O pipeline é constituído de uma classe principal chamada NoticiasRss, onde cada atributo recebe um serviço de banco de dados e uma estratégia de web scraping. O projeto segue os princípios SOLID, mais especificamente o D – Princípio da Inversão da Dependência.

Diagrama de Classe do Pipeline

Diagrama do Pipeline

4.3 – Dashboard, Padrão MVC

O padrão MVC (Model, View, Controller) é utilizado para isolar as regras de negócio da lógica de apresentação. Esse modelo garante que as responsabilidades sejam bem separadas, facilitando a manutenção e evolução do código.

Diagrama de Classe MVC

Diagrama MVC

5 – Demonstração

Você pode ver o projeto em ação no seguinte link:


Estrutura SQL do SQLITE

CREATE TABLE NOTICIA(
    ID_NOTICIA INTEGER PRIMARY KEY AUTOINCREMENT,
    ID_SITE INT,
    TITULO_NOTICIA TEXT,
    URL_NOTICIA TEXT,
    URL_IMG TEXT,
    DESCRICAO TEXT,
    DATA_PUBLICACAO TEXT,
    CATEGORIA TEXT,
    FOREIGN KEY (ID_SITE) REFERENCES SITE(ID_SITE)
);

CREATE INDEX idx_noticia ON NOTICIA(ID_NOTICIA);

CREATE TABLE SITE(
    ID_SITE INT PRIMARY KEY,
    NOME_SITE TEXT UNIQUE
);

CREATE INDEX idx_site ON SITE(ID_SITE);

Sobre Rodrigo Rocha

Hoje trabalho com Pentaho data Integration, SQL (Consulta Simples No Banco de dados) Consumo de API (REST E SOAP)