escuro proxyscrape logótipo

Web Scraping para principiantes: Noções básicas e estrutura usando Python

Python, Raspagem, Mar-01-20215 minutos de leitura

A recolha de dados da Web é a arte de extrair dados de um sítio Web de forma automatizada e bem estruturada. Podem existir diferentes formatos para a extração de dados, como Excel, CSV e muitos outros. Alguns casos práticos de utilização da recolha de dados da Web são os estudos de mercado, a monitorização de preços, a informação sobre preços, os estudos de mercado e a geração de oportunidades. A recolha de dados da Web é uma técnica instrumental para utilizar da melhor forma os dados publicamente disponíveis e tomar decisões mais inteligentes. Por isso, é ótimo que todos saibam, pelo menos, as noções básicas de Web scraping para beneficiarem dela.

Este artigo abordará os conceitos básicos de web scraping, brincando com a estrutura do Python chamada Beautiful Soup. Iremos utilizar o Google Colab como ambiente de codificação.

Etapas envolvidas no Web Scraping usando Python

  1. Em primeiro lugar, precisamos de identificar a página Web que queremos extrair e enviar um pedido HTTP para esse URL. Em resposta, o servidor devolve o conteúdo HTML da página Web. Para esta tarefa, vamos utilizar uma biblioteca HTTP de terceiros para tratar os pedidos python.
  2. Depois de conseguirmos aceder ao conteúdo HTML, a tarefa principal é a análise dos dados. Não podemos processar os dados simplesmente através do processamento de cadeias de caracteres, uma vez que a maior parte dos dados HTML está aninhada. É aí que o analisador entra em ação, criando uma estrutura de árvore aninhada dos dados HTML. Uma das bibliotecas de analisador HTML mais avançadas é a html5lib.
  3. A seguir vem a travessia da árvore, que envolve navegar e pesquisar a árvore de análise. Para este efeito, utilizaremos a Beautiful Soup (uma biblioteca Python de terceiros). Esta biblioteca Python é utilizada para extrair dados de ficheiros HTML e XML.

Agora já vimos como funciona o processo de recolha de dados da Web. Vamos começar com a codificação,

Passo 1: Instalar bibliotecas de terceiros

Na maioria dos casos, o Colab vem com pacotes de terceiros já instalados. Mas, mesmo assim, se as suas instruções de importação não estiverem a funcionar, pode resolver este problema instalando alguns pacotes através dos seguintes comandos, 

pip install requests
pip install html5lib
pip install bs4
Passo 2: Aceder ao conteúdo HTML a partir da página Web
pedidos de importação 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
print(r.content)

Apresenta o resultado do formulário,

Vamos tentar compreender este pedaço de código,

  1. Na primeira linha de código, estamos a importar a biblioteca requests.
  2. De seguida, especificamos o URL da página Web que pretendemos extrair.
  3. Na terceira linha de código, enviamos o pedido HTTP para o URL especificado e guardamos a resposta do servidor num objeto chamado r.
  4. Finalmente, print(r.content) devolve o conteúdo HTML em bruto da página Web.
Passo 3: Analisar o conteúdo HTML
importar pedidos 
from bs4 import BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') # Se esta linha causar um erro, execute 'pip install html5lib' ou instale html5lib 
print(soup.prettify())
Saída:

O resultado é muito longo; algumas das capturas de ecrã estão anexadas abaixo.

Uma das melhores coisas sobre o Beautiful Soup é que ele é construído sobre as bibliotecas de análise HTML como html5lib, html.parse, lxml etc., que permite que o objeto do Beautiful Soap e especifique a biblioteca de análise a ser criada simultaneamente. 

No código acima, criámos o objeto Beautiful Soup passando dois argumentos:

r.content: Conteúdo HTML em bruto.
html5lib: Especifica o analisador HTML que queremos utilizar.

Finalmente, soup.prettify() é impresso, dando à árvore de análise uma representação visual do conteúdo HTML em bruto.

Passo 4: Pesquisar e navegar na árvore de análise

Agora é altura de extrair alguns dos dados úteis do conteúdo HTML. Os objectos soup contêm os dados sob a forma de uma estrutura aninhada, que pode ser extraída de forma programática. No nosso caso, estamos a extrair uma página Web que contém algumas citações. Por isso, vamos criar um programa que resolve estas citações. O código é apresentado a seguir,

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Antes de avançar, recomenda-se que percorra o conteúdo HTML da página Web, que imprimimos utilizando o método soup.prettify(), e tente encontrar um padrão para navegar para as citações.

Agora vou explicar como é que isto é feito no código acima, 

Se navegarmos pelas aspas, descobriremos que todas as aspas estão dentro de um contentor div cujo id é "all_quotes". Por isso, procuramos esse elemento div (designado por tabela no código) utilizando o método find():

table = soup.find('div', attrs = {'id':'all_quotes'})

O primeiro argumento desta função é a etiqueta HTML que deve ser procurada. O segundo argumento é um elemento do tipo dicionário para especificar os atributos adicionais associados a essa etiqueta. O método find() devolve o primeiro elemento correspondente. Pode tentar table.prettify() para ter uma melhor noção do que este pedaço de código faz.

Se nos concentrarmos no elemento table, o contentor div contém cada citação cuja classe é quote. Por isso, vamos percorrer cada contentor div cuja classe é quote.

Aqui o método findAll() é muito útil, pois é semelhante ao método find() no que diz respeito aos argumentos, mas a principal diferença é que devolve uma lista de todos os elementos correspondentes. 

Estamos a iterar através de cada citação utilizando uma variável chamada linha.

Vamos analisar um exemplo de conteúdo de linha HTML para melhor compreensão:

Agora considere o seguinte trecho de código:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
Aqui estamos a criar um dicionário para guardar toda a informação sobre uma citação. A notação de ponto é utilizada para aceder à estrutura aninhada. Para aceder ao texto dentro do elemento HTML, utilizamos .text:

Além disso, também podemos adicionar, remover, modificar e aceder aos atributos da etiqueta. Fizemos isto tratando a etiqueta como um dicionário:

quote['url'] = row.a['href']
De seguida, anexámos todas as aspas à lista chamada aspas. 

Por fim, vamos gerar um ficheiro CSV, que será utilizado para guardar os nossos dados.

nome do ficheiro = 'inspirational_quotes.csv'

Demos o nome de inspirational_qoutes.csv ao nosso ficheiro e guardámos nele todas as citações para serem utilizadas no futuro. Eis o aspeto do nosso ficheiro inspirational_quotes.csv,

No resultado acima, mostrámos apenas três linhas, mas na realidade existem 33 linhas. Isto significa que extraímos uma quantidade considerável de dados da página Web com uma simples tentativa. 

Nota: Em alguns casos, a recolha de dados da Web é considerada ilegal, o que pode causar o bloqueio permanente do seu endereço IP pelo sítio Web. Por isso, é preciso ter cuidado e fazer scraping apenas nos sítios e páginas web que o permitam. 

Porquê utilizar o Web Scraping?

Alguns dos cenários do mundo real em que a raspagem da Web pode ser de grande utilidade são

Geração de leads
Uma das actividades de vendas mais importantes para a maioria das empresas é a geração de leads. De acordo com um relatório da Hubspot, a geração de tráfego e de contactos era a prioridade número um de 61% dos profissionais de marketing de entrada. A raspagem da Web pode desempenhar um papel importante nesse processo, permitindo que os profissionais de marketing acedam a listas de potenciais clientes estruturadas em toda a Internet.
Pesquisa de mercado 

Fazer o estudo de mercado correto é o elemento mais importante de qualquer negócio em funcionamento e, por isso, requer informações altamente precisas. A análise de mercado está a ser alimentada por um volume elevado, de alta qualidade e altamente perspicaz de raspagem da Web, que pode ser de diferentes tamanhos e formas. Estes dados podem ser uma ferramenta muito útil para a realização de informações comerciais. Os estudos de mercado centram-se principalmente nos seguintes aspectos comerciais:

  • Pode ser utilizado para analisar as tendências do mercado.
  • Pode ajudar-nos a prever o preço de mercado.
  • Permite otimizar os pontos de entrada em função das necessidades do cliente.
  • Pode ser muito útil para monitorizar os concorrentes.
Criar listagens

A recolha de dados da Web pode ser uma técnica muito útil e frutuosa para criar as listagens de acordo com os tipos de negócio, por exemplo, imóveis e lojas de comércio eletrónico. Uma ferramenta de recolha de dados da Web pode ajudar a empresa a pesquisar milhares de listagens de produtos da concorrência na sua loja e a recolher todas as informações necessárias, como preços, detalhes do produto, variantes e críticas. Isto pode ser feito em apenas algumas horas, o que pode ajudar a criar as suas próprias listagens, concentrando-se assim mais nas exigências dos clientes.

Comparar informações

A raspagem da Web ajuda várias empresas a recolher e comparar informações e a fornecer esses dados de uma forma significativa. Consideremos os sítios Web de comparação de preços que extraem avaliações, características e todos os pormenores essenciais de vários outros sítios Web. Estes pormenores podem ser compilados e adaptados para um acesso fácil. Assim, pode ser gerada uma lista de diferentes retalhistas quando o comprador procura um determinado produto. Assim, a recolha de dados da Web facilitará muito o processo de tomada de decisão para o consumidor, mostrando várias análises de produtos de acordo com a procura do consumidor.

Informações agregadas

A raspagem da Web pode ajudar a agregar a informação e a apresentá-la de forma organizada ao utilizador. Consideremos o caso dos agregadores de notícias. A raspagem da Web será utilizada das seguintes formas,

  1. Utilizando o web scraping, é possível recolher os artigos mais exactos e relevantes.
  2. Pode ajudar a recolher ligações para vídeos e artigos úteis.
  3. Construir cronogramas de acordo com as notícias.
  4. Captar as tendências de acordo com os leitores das notícias.

Portanto, neste artigo, analisámos em profundidade o funcionamento do web scraping, considerando um caso de utilização prático. Também fizemos um exercício muito simples sobre a criação de um simples raspador web em Python. Agora pode fazer scraping de qualquer outro site à sua escolha. Além disso, também vimos alguns cenários do mundo real em que o web scraping pode desempenhar um papel importante. Esperamos que tenha gostado do artigo e que tudo tenha sido claro, interessante e compreensível.  

Se está à procura de serviços proxy fantásticos para os seus projectos de recolha de dados da Web, não se esqueça de consultar ProxyScrapeproxies residenciais e premium.