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:
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!
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.
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
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)
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.
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.
Clicando em Inspecionar, será aberta a janela do desenvolvedor, onde podemos visualizar os elementos 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.
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.
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))
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.
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.
Repare que o link para a última notícia já veio como None.
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.
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.
Para acessar outras publicações de Python, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.