Search
Close this search box.
Web scraping com Python na prática
web scraping com Python

Posts Relacionados:

Web scraping é uma forma rápida e eficiente de extrair dados de sites quando não existe API disponível. Scraping é uma técnica essencial em machine learning para obter dados públicos em grandes quantidades para treinar modelos. Neste post, mostraremos como fazer scraping na prática.

Receba nossa newsletter

Web scraping (raspagem) é o processo de extrair dados de sites com ferramentas de software automatizadas. O uso de web scraping é uma forma rápida e eficiente de extrair dados de sites quando não existem APIs disponíveis. Web scraping é uma técnica essencial em machine learning para obter dados para o treinamento de modelos. Na postagem anterior, fizemos uma introdução geral sobre Web scraping com Python usando Beautiful Soup. Neste post, faremos a demonstração prática de como scraping pode ser feito.

Web Scraping com Python

Partiremos do código desenvolvido anteriormente. Para instruções sobre as bibliotecas usadas, veja o post anterior. Usaremos esse site como exemplo. Nosso código por enquanto está assim:

				
					import requests
from bs4 import BeautifulSoup 

url = "http://quotes.toscrape.com/"
response = requests.get(url)

if response.status_code == 200: 
    soup = BeautifulSoup(response.text, 'lxml') 
				
			

Uma inspeção na página-alvo mostra que ela contém um título e uma coleção de frases com os nomes de seus autores e algumas tags para classificá-las. Primeiro extrairemos o título. Com o botão direito do mouse, clicamos no título para inspecionar a estrutura de seu código HTML.

web scraping

O HTML mostra que o título está numa tag a dentro de uma tag H1. Essa estrutura será usada para extraí-lo.

web scraping

A extração do título com Beautiful Soupe é bem direta. Veja o trecho de código abaixo (linhas em destaque), ele é uma continuação do código anterior mostrado acima.

				
					
if response.status_code == 200: 
    soup = BeautifulSoup(response.text, 'lxml') 
    title = soup.find('h1').a.text
    print(title)

				
			

Com a execução desse código, obtemos o título com sucesso.

				
					Quotes to Scrape
				
			

Web Scraping para Extrair Outros Elementos

Mas é obvio que ninguém usa scraping para extrair apenas o título de uma página. Geralmente, queremos vários dados diferentes. Na página do nosso exemplo, isso pode significar obter as frases, autores e tags mostradas. É preciso clicar nesses elementos e fazer a inspeção do HTML correspondente. Ele mostra que os elementos estão numa div com class=quotes. Usaremos essa especificação para raspar apenas as informações que queremos. Dentro da div, as frases estão numa tag span, os autores estão com tag small e as tags estão num elemento meta com atributo content.

A partir das informações sobre o HTML dos dados que queremos, a extração dos elementos da primeira frase pode ser feita com o código abaixo. Ele expande o código anterior. Os trechos novos são mostrados em destaque.

				
					import requests
from bs4 import BeautifulSoup 

url = "http://quotes.toscrape.com/"
response = requests.get(url)

if response.status_code == 200: 
    soup = BeautifulSoup(response.text, 'lxml') 
    title = soup.find('h1').a.text
    quote = soup.find('div', class_='quote')
    frase = quote.find('span', class_='text').text  
    autor = quote.find('small', class_='author').text  
    tags = quote.meta['content'] 
    print(frase, autor, tags)
				
			

 Nesse trecho, primeiro criamos uma variável quote com a div desejada (linha 10) e depois a utilizamos para acessar os elementos dentro dela (linhas 11-13). Os dados extraídos são mostrados abaixo.

				
					“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” Albert Einstein change,deep-thoughts,thinking,world
				
			

Extração de Múltiplos Elementos

Nossos resultados mostram que extraímos apenas a primeira frase da página, mas ela possui várias outras frases. Para extraí-las, basta modificar a variável quote definida anteriormente para achar todas as divs que precisamos. Isso é feito substituindo o comando find por findall (linha 10 abaixo). Depois usamos um for loop para salvar todos os dados que queremos. Abaixo, as linhas em destaque mostram as mudanças feitas no código.

				
					import requests
from bs4 import BeautifulSoup 

url = "http://quotes.toscrape.com/"
response = requests.get(url)

if response.status_code == 200: 
    soup = BeautifulSoup(response.text, 'lxml') 
    title = soup.find('h1').a.text
    quotes = soup.find_all('div', class_='quote')
    for quote in quotes:
        frase = quote.find('span', class_='text').text  
        autor = quote.find('small', class_='author').text  
        tags = quote.meta['content'] 
        print(f'frase: {frase}', '\n', f'autor: {autor}', '\n', f'tags: {tags}')
				
			

Executando esse código, obtemos todas as frases, autores e tags correspondentes mostradas na página.

				
					frase: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” 
 autor: Albert Einstein 
 tags: change,deep-thoughts,thinking,world
frase: “It is our choices, Harry, that show what we truly are, far more than our abilities.” 
 autor: J.K. Rowling 
 tags: abilities,choices
frase: “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.” 
 autor: Albert Einstein 
 tags: inspirational,life,live,miracle,miracles
frase: “The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.” 
 autor: Jane Austen 
 tags: aliteracy,books,classic,humor
frase: “Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.” 
 autor: Marilyn Monroe 
 tags: be-yourself,inspirational
frase: “Try not to become a man of success. Rather become a man of value.” 
 autor: Albert Einstein 
 tags: adulthood,success,value
frase: “It is better to be hated for what you are than to be loved for what you are not.” 
 autor: André Gide 
 tags: life,love
frase: “I have not failed. I've just found 10,000 ways that won't work.” 
 autor: Thomas A. Edison 
 tags: edison,failure,inspirational,paraphrased
frase: “A woman is like a tea bag; you never know how strong it is until it's in hot water.” 
 autor: Eleanor Roosevelt 
 tags: misattributed-eleanor-roosevelt
frase: “A day without sunshine is like, you know, night.” 
 autor: Steve Martin 
 tags: humor,obvious,simile
				
			

Inspecionando a URL do nosso exemplo, vemos que ela possui várias outras páginas com frases e nosso scraping só extraiu os dados da primeira. A extração dos dados de múltiplas páginas será o tema do nosso próximo post.

Imagem com IA Generativa – Dia 102

IA generativa img102

Arte com IA generativa: imagem do dia

Todos os dias, postamos um exemplo de imagem artística gerada com inteligência artificial.

Tutoriais

Postagens Mais Recentes

Outras Postagens Que Podem Interessar

Veja
Mais

Fique em contato

Se inscreva para receber nossa newsletter com novidades.

aprendiz artificial