Voltar ao blogue
A ciência da extração de dados da Web
Suciu DanLast updated on Mar 31, 202611 min read

Web scraping simplificado: a importância da análise de dados

Web scraping simplificado: a importância da análise de dados

A análise de dados é o processo de analisar e transformar dados estruturados ou não estruturados num formato mais específico que vários sistemas de software possam utilizar e compreender.

Para facilitar a compreensão deste conceito, eis alguns exemplos de analisadores:

  • Analisadores CSV: para analisar e converter ficheiros CSV (Comma Separated Values) em formatos mais utilizáveis
  • Analisadores JSON: para analisar e converter dados JSON (JavaScript Object Notation) em formatos mais utilizáveis
  • Analisadores Regex: para analisar e extrair padrões específicos de texto utilizando expressões regulares
  • Compiladores: para analisar e converter código escrito numa linguagem de programação em código legível por máquina noutra linguagem de programação
  • Analisadores SQL: para analisar e interpretar uma consulta SQL, executar o comando e devolver os resultados

Quando se trata de web scraping, a análise de dados é essencial. Os sites são compostos por HTML, uma excelente linguagem de marcação para exibir informações num ecrã, mas não tão boa para ser lida por máquinas.

Quando fazemos web scraping de um site, estamos a recolher uma grande sequência de HTML. Para fazer algo útil com essa informação, precisamos de a analisar.

Isto irá abordar a importância da análise de dados no web scraping, bem como os diferentes tipos de analisadores de dados disponíveis, tais como bibliotecas de análise de HTML para várias linguagens de programação, expressões regulares e a criação do seu próprio analisador.

Criação de um analisador de dados

Um bom analisador de dados consegue extrair informações relevantes de um documento HTML com base em regras predefinidas, independentemente do tipo de analisador utilizado. O processo de análise consiste em duas etapas principais: análise lexical e análise sintática.

A análise lexical é o processo de analisar palavras e símbolos individuais num documento e dividi-los em partes menores e mais fáceis de gerir.

Isto envolve a tokenização, que é o processo de dividir um documento em tokens individuais, tais como palavras-chave, símbolos e números.

Vamos dar uma olhada neste documento HTML simples:

<html>

  <head>

	<title>Scraping</title>

  </head>

  <body>

	<h1>Welcome to my scraping page</h1>

	<p>This is a paragraph.</p>

	<ul>

  	<li>First Scraping Item</li>

  	<li>Second Scraping Item</li>

	</ul>

  </body>

</html>

O processo de análise lexical tokenizaria este documento em elementos individuais, tais como:

  • `<html>`
  • `<head>`
  • `<title>`
  • `Scraping`
  • `</title>`
  • `<body>`
  • `<h1>`
  • `Bem-vindo à minha página de scraping`
  • `</h1>`
  • [...]
  • `</body>`
  • `</html>`

Desta forma, cada elemento do documento HTML é dividido em tokens mais pequenos e mais fáceis de gerir, que podem ser posteriormente analisados e processados.

A análise sintática é o processo de analisar a estrutura de um documento e determinar como os tokens individuais se relacionam entre si. Isto envolve identificar padrões e estruturas nos dados e utilizar esta informação para criar uma estrutura em forma de árvore chamada árvore de análise.

Por exemplo, a tag <html> é o elemento raiz e contém os elementos <head> e <body>. Dentro do elemento <head>, existe um elemento <title> e, dentro do elemento <body>, existem os elementos <h1>, <p> e <a>.

Ao identificar estes elementos e as suas relações, pode construir uma árvore de análise, com o elemento <html> como raiz, <head> e <body> como seus filhos, e assim por diante.

Pode utilizar a árvore de análise para extrair dados específicos do documento HTML, tais como o texto dentro do elemento <title> ou o atributo href do elemento <a>.

As melhores bibliotecas de análise de HTML

Nesta secção, exploraremos algumas das bibliotecas de análise de HTML mais populares disponíveis para diferentes linguagens de programação. Estas bibliotecas facilitam a extração de dados estruturados de um documento HTML e podem ser um excelente ponto de partida para o seu projeto de web scraping.

Desde o Scrapy e o BeautifulSoup do Python, até ao Cheerio do NodeJS e ao JSoup do Java, iremos analisar cada biblioteca e fornecer exemplos de como utilizá-las.

Quer seja um principiante ou um programador experiente, esta secção irá proporcionar-lhe uma compreensão sólida das opções disponíveis ao trabalhar com dados HTML.

Vamos começar!

Cheerio

O Cheerio é uma biblioteca JavaScript que permite aos programadores analisar, manipular e navegar no DOM de um documento HTML ou XML, tal como o jQuery funciona. Este artigo aprofunda muito mais o Cheerio e aborda diferentes casos de utilização.

Eis uma implementação simples do Cheerio:

const cheerio = require('cheerio');

const $ = cheerio.load('<h2 class="title">Hello, World!</h2>');

console.log($('h2').text())

A execução deste código irá devolver o seguinte resultado:

Hello, World!

Scrapy e BeautifulSoup

O Scrapy e o BeautifulSoup são bibliotecas para web scraping em Python.

O Scrapy é um poderoso framework de web scraping que permite extrair dados estruturados de sites utilizando seletores ou expressões XPath.

Aqui está um exemplo básico do Scrapy:

import scrapy

class QuotesSpider(scrapy.Spider):

    name = "quotes"

    def start_requests(self):

        urls = [

            'https://quotes.toscrape.com/page/1/',

            'https://quotes.toscrape.com/page/2/',

        ]

        for url in urls:

            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):

        page = response.url.split("/")[-2]

        filename = f'quotes-{page}.html'

        with open(filename, 'wb') as f:

            f.write(response.body)

        self.log(f'Saved file {filename}')

Pode executar o código com este comando:

scrapy crawl quotes

O BeautifulSoup é uma biblioteca que permite analisar documentos HTML e XML e extrair dados deles de forma semelhante à de um navegador web.

Eis uma implementação simples do BeautifulSoup:

from bs4 import BeautifulSoup

html_doc = """<html><head><title>Scraper</title></head>

<body>

<h1 class="title">Hello, World!</h1>

</body>"""

soup = BeautifulSoup(html_doc, 'html.parser')

print(soup.title.string)

Ambas as bibliotecas oferecem uma API simples e prática para percorrer, pesquisar e modificar o conteúdo de páginas web, sendo ideais para projetos de web scraping.

JSoup

Se a sua linguagem de programação preferida for Java, o JSoup é um analisador de dados que fornece uma API prática para extrair e manipular dados, utilizando o melhor do DOM, CSS e métodos semelhantes ao jQuery.

Isto permite-lhe analisar e navegar em documentos HTML, bem como alterar o conteúdo de um documento utilizando uma API simples e intuitiva. A biblioteca é ideal para projetos de web scraping, web crawling e extração de dados.

Eis uma implementação simples do JSoup para extrair o texto da tag title:

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

public class JSoupExample {

	public static void main(String[] args) {

    	String html = "<html><head><title>Example Title</title></head>"

            	+ "<body>Hello, World!</body></html>";

    	Document doc = Jsoup.parse(html);

    	// Get the title of the document

    	String title = doc.title();

    	System.out.println("Title: " + title);

	}

}

Nokogiri

O Nokogiri é uma biblioteca para Ruby que fornece uma interface fácil de usar para analisar e pesquisar documentos XML e HTML e suporta seletores XPath e CSS, tornando-o útil para tarefas de web scraping e extração de dados.

Para uma análise mais abrangente das bibliotecas de análise de dados no ecossistema Ruby, pode ler este artigo.

Use este comando para instalar a gem nokogiri:

gem install nokogiri

O próximo exemplo de código é uma implementação simples do nokogiri:

require "nokogiri"

html = "<!DOCTYPE html><html><head><title>Hello, World!</title></head><body>Hello, World!</body></html>"

parsed_data = Nokogiri::HTML.parse(html)

puts parsed_data.title

Expressões regulares

As expressões regulares, também conhecidas como regex, são uma ferramenta poderosa para corresponder padrões em cadeias de caracteres. São frequentemente utilizadas para tarefas de processamento de texto, tais como pesquisar, validar e extrair informações de um documento.

Pode utilizar expressões regulares para extrair informações de HTML, pesquisando padrões específicos, como extrair endereços de e-mail ou títulos de um documento HTML.

Por exemplo, para extrair todos os URLs de um documento HTML, pode utilizar a seguinte expressão regular:

/https?:\/\/[\w\.-]+\.[a-z]+/gi

Esta expressão irá corresponder a qualquer cadeia de caracteres que comece por «http» ou «https», seguida de um «:» e duas barras, depois qualquer combinação de caracteres de palavras, pontos e hífens, seguida de um ponto e uma ou mais letras minúsculas. O sinalizador «gi» torna a pesquisa global e insensível a maiúsculas e minúsculas.

Usar expressões regulares pode ser um pouco complicado, pois a sintaxe pode ser complexa e acertar o padrão exatamente pode exigir alguma tentativa e erro. Existem também alguns sites, como o Regex101 ou o Rubular, que podem ajudá-lo a testar e depurar as suas expressões regulares.

Se não quiser utilizar as bibliotecas disponíveis ou expressões regulares, pode sempre criar o seu próprio analisador.

Construir o seu próprio analisador pode ser uma ótima maneira de obter uma compreensão mais profunda dos dados com os quais está a trabalhar e também pode ser uma boa opção se tiver requisitos específicos que não são atendidos pelas bibliotecas ou ferramentas existentes.

Construir um analisador

Construir o seu analisador pode ser uma tarefa desafiante, mas também pode ser gratificante. O processo de construção de um analisador envolve a criação de um conjunto de regras e instruções que especificam como os dados são analisados e organizados.

Pode fazê-lo utilizando uma variedade de técnicas, tais como expressões regulares, máquinas de estados e análise recursiva descendente.

Ao criar um analisador, é crucial ter uma compreensão profunda da estrutura e do formato dos dados para poder conceber um conjunto adequado de regras e instruções para o analisador. A escolha de uma linguagem de programação adequada é também uma consideração importante.

Uma das vantagens de construir o seu próprio analisador é que pode adaptá-lo aos dados e ao caso de utilização em questão. Isto pode resultar num analisador mais eficiente e eficaz, em comparação com a utilização de uma biblioteca ou ferramenta genérica.

Além disso, construir o seu próprio analisador pode também ser uma excelente experiência de aprendizagem, uma vez que lhe permite obter uma compreensão mais profunda dos conceitos e técnicas subjacentes à análise de dados.

Construir um analisador do zero também tem desvantagens:

  • Pode ser demorado e exigir um esforço significativo para projetar e implementar, especialmente se não estiver familiarizado com algoritmos de análise e estruturas de dados.
  • Pode ser difícil conseguir que o seu analisador tenha um desempenho tão bom quanto o das bibliotecas ou ferramentas existentes que foram otimizadas para o desempenho.
  • Pode ser difícil manter e atualizar o analisador ao longo do tempo se o formato ou a estrutura dos dados se alterarem.
  • Pode ser difícil depurar ou encontrar erros no seu código, especialmente se não estiver familiarizado com o processo de análise.
  • Pode estar sujeito a erros e bugs, o que pode fazer com que o analisador não funcione como esperado.
  • No caso de análise complexa, pode ser difícil implementar todas as regras e casos extremos.
  • Pode não ser tão eficiente quanto as bibliotecas e ferramentas pré-existentes, uma vez que estas foram otimizadas e utilizadas por muitas pessoas.

Em resumo, construir um analisador personalizado a partir do zero tem o seu próprio conjunto de desvantagens, tais como tempo de desenvolvimento elevado, custos de manutenção elevados e risco elevado de erros. Recomenda-se geralmente utilizar bibliotecas ou ferramentas existentes ou utilizar expressões regulares, caso estas possam satisfazer os requisitos específicos do seu caso de utilização.

Metadados do Schema.org

A análise de metadados do schema.org é uma forma de extrair dados estruturados de páginas web utilizando padrões de esquema web. A comunidade por trás do schema.org gere estes padrões e promove a utilização de esquemas para dados estruturados na web.

A análise de metadados do Schema.org pode ser útil por várias razões, tais como encontrar informações atualizadas sobre eventos ou para investigadores que recolhem dados para estudos. Além disso, sites que agregam dados como anúncios imobiliários, ofertas de emprego e previsões meteorológicas também podem beneficiar da análise de dados do Schema.org.

Existem diferentes formatos de schema que pode utilizar, incluindo JSON-LD, RDFa e Microdata.

O JSON-LD (JavaScript Object Notation for Linked Data) é um formato para codificar dados ligados utilizando JSON. O design deste padrão facilita a leitura e escrita por humanos e a análise e geração por máquinas.

Eis como ficaria o JSON-LD numa página web sobre um livro:

<script type="application/ld+json">

{

  "@context": "http://schema.org",

  "@type": "Book",

  "name": "The Adventures of Tom Sawyer",

  "author": "Mark Twain",

  "datePublished": "1876-12-01",

  "description": "The Adventures of Tom Sawyer is a novel about a young boy growing up along the Mississippi River in the mid-1800s. It is a classic of American literature and has been loved by generations of readers.",

  "publisher": "Penguin Books",

  "image": "https://www.example.com/images/tom_sawyer.jpg"

}

</script>

A recomendação do World Wide Web Consortium (W3C) é o RDFa, ou Resource Description Framework in Attributes, utilizado para incorporar declarações RDF em XML e HTML.

Pode ver abaixo como o RDFa ficaria dentro de uma página HTML. Pode observar como os atributos das tags são usados para armazenar os dados adicionais.

<!DOCTYPE html>

<html>

  <head>

    <title>RDFa Example</title>

  </head>

  <body>

    <div about="http://example.com/books/the-great-gatsby" typeof="schema:Book">

      <h1 property="schema:name">The Great Gatsby</h1>

      <div property="schema:author" typeof="schema:Person">

        <span property="schema:name">F. Scott Fitzgerald</span>

      </div>

      <div property="schema:review" typeof="schema:Review">

        <span property="schema:author" typeof="schema:Person">

          <span property="schema:name">John Doe</span>

        </span>

        <span property="schema:reviewBody">

          A classic novel that explores themes of wealth, love, and the decline of the American Dream.

        </span>

        <span property="schema:ratingValue">4.5</span>

      </div>

    </div>

  </body>

</html>

Microdata é uma especificação HTML do WHATWG utilizada para aninhar metadados dentro de conteúdo existente em páginas web e pode utilizar schema.org ou vocabulários personalizados.

Aqui está um exemplo de Microdata em HTML:

<div itemscope itemtype="http://schema.org/Product">

  <span itemprop="name">Shiny new gadget</span>

  <img itemprop="image" src="shinygadget.jpg" alt="A shiny new gadget" />

  <div itemprop="offerDetails" itemscope itemtype="http://schema.org/Offer">

    <span itemprop="price">$19.99</span>

    <link itemprop="availability" href="http://schema.org/InStock" />

  </div>

</div>

Existem muitas ferramentas disponíveis para analisar esquemas em diferentes linguagens, tais como o Extruct da Zyte e a biblioteca RDFLib, facilitando a extração de dados estruturados de páginas web utilizando padrões de esquemas web.

Analisadores premium

Até agora, discutimos os fundamentos da análise de dados, incluindo os conceitos subjacentes da análise lexical e sintática. Também examinámos várias bibliotecas de código aberto para análise de dados, o uso de expressões regulares, a construção de um analisador do zero e a análise de dados utilizando o schema.org.

Pode sempre contar com um analisador web como o WebScrapingAPI, o SERP API ou o Amazon API. Estes analisadores web permitem-lhe extrair dados em tempo real sem ter de se preocupar com manutenção, código ou infraestrutura.

Existem várias vantagens em utilizar um analisador web premium, incluindo:

  • Fiabilidade: os analisadores web são geralmente mais estáveis e fiáveis do que as alternativas gratuitas ou de código aberto, que podem ser propensas a bugs e erros.
  • Velocidade: os analisadores web são otimizados para velocidade e desempenho, permitindo-lhe extrair dados de forma rápida e eficiente.
  • Escalabilidade: os analisadores web conseguem lidar com grandes volumes de dados e níveis elevados de tráfego, tornando-os adequados para projetos de extração de dados e scraping em grande escala.
  • Funcionalidades avançadas: Os analisadores web incluem frequentemente funcionalidades e características avançadas, tais como rotação de IP, falsificação de agente de utilizador e resolução de CAPTCHA, que podem ajudá-lo a contornar medidas anti-scraping e a aceder a sites bloqueados.
  • Suporte e manutenção: Os analisadores web incluem suporte ao cliente e atualizações regulares de software, garantindo que tem acesso às funcionalidades mais recentes e às correções de bugs.

Mas sejamos honestos: os analisadores web premium não trazem apenas vantagens. Aqui estão algumas desvantagens:

  • Custo: Os analisadores web premium podem ter um custo mais elevado em comparação com as opções de código aberto
  • Personalização limitada: A funcionalidade de um analisador web premium pode ser mais limitada em comparação com a criação do seu próprio analisador
  • Dependência do serviço: Se o serviço ficar inativo ou tiver algum problema, isso pode afetar a sua capacidade de analisar dados
  • Controlo limitado sobre os dados: Com um analisador web premium, poderá ter menos controlo sobre os dados a que pode aceder e processar
  • Dependência das fontes de dados do fornecedor: A qualidade e a relevância dos dados fornecidos pelo analisador web premium podem ser limitadas pelas fontes de dados do fornecedor.

Conclusão

Este artigo forneceu uma visão geral abrangente da análise de dados, incluindo o processo de análise, diferentes tipos de bibliotecas de análise HTML e como utilizar metadados schema.org para melhorar o SEO.

Também destacámos as vantagens e desvantagens de criar um analisador personalizado, utilizar expressões regulares e utilizar ferramentas existentes.

Uma conclusão importante é que a análise de dados é um passo crucial na extração de dados da web e na análise de dados, pois permite extrair e organizar informações de forma útil.

Para o ajudar a começar, pode experimentar a nossa API SERP, uma ferramenta premium de web scraping que o pode ajudar a extrair facilmente dados dos motores de busca. Se estiver interessado em experimentá-la, não hesite em inscrever-se na nossa versão de avaliação gratuita de 14 dias.

Sobre o autor
Suciu Dan, Co-fundador @ WebScrapingAPI
Suciu DanCo-fundador

Suciu Dan é cofundador da WebScrapingAPI e escreve guias práticos, voltados para programadores, sobre web scraping em Python, web scraping em Ruby e infraestruturas de proxy.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.