Blog

Postado em em 15 de fevereiro de 2024

Como Pegar Notícias Automaticamente com Python – Web Scraping

Veja como pegar notícias automaticamente com Python! Isso mesmo, aprenda a fazer web scraping de notícias com Python!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Como Pegar Notícias Automaticamente com Python – Web Scraping

Na aula de hoje, vou te mostrar como pegar notícias automaticamente com Python! Vou te ensinar a fazer web scraping de notícias com Python, para extrair as informações que você deseja de dentro de um site para o seu código.

Você aprenderá o passo a passo da raspagem de dados na internet e como buscar quaisquer informações que precise.

Para evitar problemas, é MUITO IMPORTANTE que você leia os termos de uso e a política de privacidade do site onde vai realizar o processo, assim, você evita problemas futuros!

Então, faça o download do material disponível e vem comigo aprender como pegar notícias automaticamente com Python!

Raspagem de Dados – Web Scraping

A raspagem de dados, ou Web Scraping, é um processo que consiste em obter informações de um site através do seu código fonte. Com Python, podemos automatizar e simplificar esse processo.

ATENÇÃO: É de extrema importância que você leia os termos de uso e a política de privacidade do site onde irá realizar o processo, para evitar problemas. Alguns sites não permitem ou autorizam a raspagem de dados.

Beautiful Soup e Requests

Para realizar esse processo de web scraping, estaremos utilizando a biblioteca Beautiful Soup, uma biblioteca em Python que nos permite extrair informações do site após fazer uma requisição HTTP, acessar o código fonte do site e trazer para o Python.

Além do Beautiful Soup será necessário instalarmos também a biblioteca Requests para fazer essa requisição.

Então, no terminal de comando do seu editor de códigos, execute:

pip install beautifulsoup4 requests

Feito isso, podemos partir para o desenvolvimento do nosso código. Como exemplo dessa aula, pegaremos as notícias referentes ao Vasco do site do Globo Esporte, mas você pode pegar do seu time, ou aplicar o mesmo código para outras situações e temas.

Para isso, utilizaremos a biblioteca Requests para fazer uma requisição HTTP para o site do Globo Esporte e, com o Beautiful Soup, vamos tratar o código HTML obtido da requisição e extrair as informações específicas que desejamos dele.

Então, vamos importar as duas bibliotecas no início do código:

import requests
import bs4

Criando a Requisição

Para obtermos o HTML do site, precisamos criar uma requisição HTTP para o site escolhido. Faremos isso através do método get(), passando para ele a URL desejada.

import requests
import bs4

url = 'https://globoesporte.globo.com/futebol/times/vasco/'

requisicao = requests.get(url)

Essa requisição retorna todo o código fonte do site, que pode ser visualizado imprimindo o atributo text.

print(requisicao.text)

Tratando o Código da Página

Com a requisição concluída, precisamos tratar o código obtido para facilitar a manipulação e obtenção das informações desejadas.

Faremos isso criando um objeto Beautiful Soup chamado pagina. Esse objeto recebe como parâmetro o texto da solicitação HTTP (requisicao.text) e o analisador HTML (html.parser), que indica que o conteúdo é do tipo HTML e permite ao Beautiful Soup decodificá-lo e tratá-lo.

import requests
import bs4

url = 'https://globoesporte.globo.com/futebol/times/vasco/'

requisicao = requests.get(url)

pagina = bs4.Beautiful Soup(requisicao.text, "html.parser")

Dessa forma, temos dentro do objeto pagina as informações tratadas e acessíveis.

Pegar Notícias Automaticamente com Python – Beautiful Soup

Para pegarmos as notícias desejadas, é preciso localizar e selecionar elementos específicos dentro da página do site. Isso pode ser feito utilizando a ferramenta de desenvolvedor do navegador para inspecionar o código da página.

No nosso caso, vamos pegar o título da notícia e o link de acesso a ela. Para identificar esses elementos, podemos abrir a página do site desejado, clicar com o botão direito no título da notícia e selecionar Inspecionar.

Inspecionar elemento

Clicando em Inspecionar, será aberta a janela do desenvolvedor, onde podemos visualizar os elementos HTML da página.

HTML da página

No código, encontraremos o elemento h2, referente ao título da notícia, já selecionado.

Se a janela não abrir com o título selecionado, você pode clicar no ícone da seta e posicionar sobre o título na página do site, em seguida, clicar uma vez sobre ele.

Inspecionando elemento título

Feito isso, o elemento h2 ficará em destaque no código.

Observando o código da página, veremos que o link para a notícia está dentro do elemento a (âncora) acima do título.

Elemento H2

Esse elemento possui três classes, e por padrão, quando os elementos de um site possuem estruturas e formatações visuais iguais, costumam compartilhar das mesmas classes.

Isso é útil porque, como queremos extrair todas as notícias da página, podemos construir uma estrutura dentro do nosso código que busque todos os elementos HTML com uma determinada classe.

Se a primeira classe não funcionar corretamente, podemos testar outras classes para ver qual delas funcionará.

Para o nosso exemplo, iremos buscar pelos elementos a que possuam a classe feed-post-link. O Beautiful Soup nos permite fazer isso utilizando o método find_all. Só precisamos passar como parâmetro o tipo do elemento e a classe dele.

import requests
import bs4

url = 'https://globoesporte.globo.com/futebol/times/vasco/'

requisicao = requests.get(url)

pagina = bs4.BeautifulSoup(requisicao.text, "html.parser")

# pegar os elementos "a" que tenham a classe "feed-post-link"
lista_noticias = pagina.find_all("a", class_="feed-post-link")

Esse método irá localizar todos os elementos presentes na página e armazená-los dentro da lista lista_noticias. Podemos visualizar o tamanho dela com um print.

print(len(lista_noticias))
Resultado da lista

Com esse print, vemos que o Beautiful Soup localizou e armazenou 7 elementos a com a classe feed-post-link.

Agora que já temos a lista de notícias armazenada, podemos criar uma estrutura de repetição for que percorrerá cada notícia dentro da lista de notícias e exibirá o título e o link para a página da matéria.

import requests
import bs4

url = 'https://globoesporte.globo.com/futebol/times/vasco/'

requisicao = requests.get(url)

pagina = bs4.BeautifulSoup(requisicao.text, "html.parser")

# pegar os elementos "a" que tenham a classe "feed-post-link"
lista_noticias = pagina.find_all("a", class_="feed-post-link")

for noticia in lista_noticias:
    print(noticia.text)
    print(noticia.get("href"))
    print("###############")

Executando esse código, teremos todas as 7 notícias com o título e a URL correspondente.

Resultado do código

No entanto, se observarmos o resultado, veremos que o Beautiful Soup não trouxe todas as notícias presentes no site, e a partir de um determinado ponto, ele também não conseguiu mais carregar todas as informações.

Resultado do código 2

Repare que o link para a última notícia já veio como None.

Por que Não Conseguimos Pegar Todas as Informações?

Ao acessarmos um site de notícias, como no caso desse exemplo, apenas algumas notícias são carregadas inicialmente. Conforme rolamos para baixo, mais notícias são carregadas dinamicamente.

No entanto, o Beautiful Soup não captura automaticamente essas novas informações que são trazidas de forma dinâmica para a página. Ou seja, ele só captura e extrai as notícias que são carregadas inicialmente, quando a página é carregada.

Para extrair essas informações de forma dinâmica, é mais aconselhado o uso da biblioteca Selenium, outra biblioteca para web scraping no Python muito eficiente.

Conclusão – Como Pegar Notícias Automaticamente com Python – Web Scraping

Nessa aula, você aprendeu como pegar notícias automaticamente com Python! Utilizando a biblioteca Beautiful Soup para fazer web scraping em um site de notícias.

Com poucas linhas de código, você pode obter as últimas notícias relacionadas ao seu time, e com esse mesmo código, apenas alterando a URL utilizada, você pode obter notícias de diferentes times.

Apesar de serem necessárias algumas adaptações, com essa mesma estrutura e com a lógica aprendida aqui, você poderá fazer web scraping em diferentes sites, de diferentes assuntos. No entanto, lembre-se sempre de verificar os termos de uso e a política de privacidade antes de iniciar esse processo, para que não tenha problemas futuros.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador