Introdução à análise da Web em Python com Parsel

Python, Jan-03-20255 minutos de leitura

A Web scraping tornou-se uma habilidade essencial para desenvolvedores Python, cientistas de dados e entusiastas da Web scraping . Quer esteja extraindo dados para análise, criando uma ferramenta de comparação de preços ou automatizando a extração de conteúdo, a análise da Web está no centro de cada uma dessas tarefas. Mas o que torna a análise da Web eficiente e fácil para os iniciantes? Conheça o Parsel, umabiblioteca avançada em Python que simplifica a análise de HTML e a extração de dados.

Introdução ao Parsel

O que é Web Parsing e por que é importante?

Parsel é uma biblioteca Python leve projetada para análise HTML/XML e extração de dados. Criada com a Web scraping em mente, a Parsel facilita a interação com estruturas de páginas da Web usando seletores avançados como XPath e CSS. Essas ferramentas permitem que você localize e extraia elementos ou atributos específicos de páginas da Web com precisão. A integração do Parsel com o ecossistema Python também significa que ele funciona perfeitamente com bibliotecas como `requests` e `httpx` para buscar conteúdo da Web.

Principais recursos do Parsel

  • Suporte a seletores: Use XPath para navegação de caminho detalhada ou seletores CSS para sintaxe mais simples.
  • Flexibilidade: Oferece suporte a várias tarefas de análise de HTML/XML, desde a simples extração de texto até a manipulação de elementos profundamente aninhados.
  • Escalabilidade: O Parsel pode extrair dados de uma única página ou de várias páginas por meio de estruturas de looping.
  • Integração com o Scrapy: A compatibilidade do Parsel se estende naturalmente ao Scrapy, uma estrutura popular da Web scraping .

Casos de uso comuns

  • Web Scraping: Extração de dados de sites de comércio eletrônico para monitoramento de preços.
  • Mineração de dados: Coleta de informações de contato ou dados de pesquisa de registros públicos.
  • Automação: Simplificação de tarefas repetitivas, como o download de especificações de produtos.

Noções básicas sobre seletores e análise de HTML

O que é análise de HTML?

A análise de HTML é o processo de decompor um documento HTML em seus componentes estruturais, como tags, atributos e o Modelo de Objeto de Documento (DOM). O Parsel usa essa estrutura para localizar e extrair com precisão os dados de que você precisa.

Os documentos HTML são criados usando:

  • Tags: Definir o tipo de elemento (por exemplo, <h1>, <p>, <img>).
  • Atributos: Fornecer informações adicionais sobre um elemento (por exemplo, id, classe, href).
  • DOM: Uma representação hierárquica da página da Web, que permite a navegação entre os elementos.

O que são seletores?

Os seletores XPath e CSS são linguagens de consulta usadas para selecionar elementos em um documento HTML:

  • XPath: Poderoso e rico em recursos, o XPath permite selecionar nós com base em seu caminho no DOM, relações pai-filho e condições.
  • Seletores CSS: Uma sintaxe mais simples usada com frequência no desenvolvimento front-end, ideal para selecionar elementos com base em classes, IDs ou pseudo-seletores.

Leia mais sobre os seletores aqui.

Pré-requisitos

Antes de começar a usar o Parsel, verifique o seguinte:

  • Python instalado: Faça o download e instale o Python a partir de
  • Instale as bibliotecas necessárias(parsel, requests): 
pip install parsel requests

Técnicas de análise para análise de HTML

Extração de elementos por ID e classe

O Parsel nos permite analisar um elemento simplesmente conhecendo seu nome de classe ou ID. Isso é particularmente útil ao direcionar elementos específicos em uma página da Web para extração de dados.

Para demonstrar, usaremos o seguinte exemplo de site. Vamos nos concentrar na extração de dados de um elemento com o nome de classe produto_podque representa um único registro contábil.

Abaixo está um exemplo de sua estrutura HTML:

Desse elemento, extrairemos:

  • Título do livro
  • Preço do livro
  • Status de disponibilidade

Exemplo de código Python

importar solicitações
from parsel import Selector

# Busque a página da Web
url = "https://books.toscrape.com/"
resposta = requests.get(url)
seletor = seletor (response.text)

# Selecionar o primeiro produto por classe
product = selector.css("article.product_pod").get()

# Analisar detalhes do produto selecionado
product_selector = Selector(text=product)
title = product_selector.css("h3 a::attr(title)").get()
price = product_selector.css("p.price_color::text").get()
availability = product_selector.css("p.instock.availability::text").get().strip()

print("Title:", title)
print("Price:", price)
print("Availability:", availability)

Explicação do script:

  • Buscar a página da Web: O script envia um OBTER para o site de exemplo para recuperar seu conteúdo HTML.
  • Selecione o bloco de produtos: Ele usa o seletor CSS article.product_pod para selecionar a primeira entrada do livro na página.
  • Analisar os detalhes do produto: O script extrai o título, preçoe disponibilidade direcionando tags e atributos HTML específicos dentro do produto_pod bloco.
  • Exibir os resultados: Os dados extraídos são impressos no console em um formato legível.

Exemplo de saída

Título: Uma Luz no Sótão
Preço: £51.77
Disponibilidade: Em estoque

Extração de texto de elementos

O Parsel facilita a extração de texto de elementos HTML, seja um título, uma descrição ou outro conteúdo visível em uma página da Web.

Para demonstrar, usaremos o mesmo exemplo de site novamente. Vamos nos concentrar em extrair o texto do título de um único livro usando a função h3 aninhada em um elemento de artigo com a classe produto_pod.

Abaixo está um exemplo de sua estrutura HTML:

Desse elemento, extrairemos:

  • O texto do título do livro

Exemplo de código Python

importar solicitações
from parsel import Selector

# Busque a página da Web
url = "https://books.toscrape.com/"
resposta = requests.get(url)
seletor = seletor (response.text)

# Selecionar o primeiro produto por classe
product = selector.css("article.product_pod").get()

# Analisar o texto do título do produto selecionado
product_selector = Selector(text=product)

title_text = product_selector.css("h3 a::attr(title)").get()
print("Texto do título:", title_text)

Explicação do script:

  • Buscar a página da Web: O script envia um OBTER para recuperar o conteúdo HTML do site.
  • Selecione o bloco de produtos: O artigo.produto_pod O seletor CSS tem como alvo a primeira entrada do livro.
  • Extraia o texto do título: Usando h3 a::attr(title)o script extrai o atributo title do <a> aninhada na tag <h3> tag.
  • Exibir o resultado: O título extraído é impresso no console.

Exemplo de saída

Texto do título: Uma luz no sótão

Extração de atributos (por exemplo, `href`, `src`, `alt`)

O Parsel também nos permite extrair valores de atributos, como href, src ou alt, de elementos HTML. Esses atributos geralmente contêm dados valiosos, como URLs, fontes de imagem ou texto descritivo.

Vamos nos concentrar em extrair o link (href) para a página de detalhes de um livro na seção <a> dentro de uma tag artigo com a classe produto_pod.

Abaixo está um exemplo de sua estrutura HTML:

Desse elemento, extrairemos:

  • O link (href) para a página de detalhes do livro

Exemplo de código Python

importar solicitações
from parsel import Selector

# Busque a página da Web
url = "https://books.toscrape.com/"
resposta = requests.get(url)
seletor = seletor (response.text)

# Selecionar o primeiro produto por classe
product = selector.css("article.product_pod").get()

# Analisar o atributo "href" do produto selecionado
product_selector = Selector(text=product)
book_link = product_selector.css("h3 a::attr(href)").get()

print("Link do livro:", book_link)

Explicação do script:

  • Obter a página da Web: O script envia uma solicitação GET para recuperar o conteúdo HTML do site.
  • Selecione o bloco do produto: O seletor CSS article.product_pod tem como alvo a primeira entrada do livro.
  • Extraia o atributo href: Usando h3 a::attr(href), o script extrai o valor do href da tag aninhada na tag.
  • Exibir o resultado: O URL extraído é impresso no console.

Exemplo de saída

Link do livro: catalogue/a-light-in-the-attic_1000/index.html

Extração de listas de elementos

O Parsel simplifica a extração de vários elementos de uma página da Web usando seletores CSS ou XPath. Isso é especialmente útil quando se trabalha com listas, como títulos de produtos, links ou preços.

Vamos nos concentrar na extração de uma lista de todos os títulos de livros exibidos na página inicial do site de exemplo que estamos usando para este tutorial.

Abaixo está um exemplo da estrutura HTML relevante:

A partir desses elementos, extrairemos:

  • Os títulos de todos os livros exibidos na página inicial

Exemplo de código Python

importar solicitações
from parsel import Selector

# Busque a página da Web
url = "https://books.toscrape.com/"
resposta = requests.get(url)
seletor = seletor (response.text)

# Selecionar todos os títulos de livros
book_titles = selector.css("article.product_pod h3 a::attr(title)").getall()

# Imprimir cada título
for title in book_titles:
   print("Title:", title)

Explicação do script:

  • Buscar a página da Web: O script envia um OBTER para recuperar o conteúdo HTML do site.
  • Selecione todos os títulos: Usando o CSS seletor article.product_pod h3 a::attr(title), ele seleciona todos os <a> tags internas <h3> tags dentro de produto_pod elementos.
  • Títulos de extrato: O .getall() recupera uma lista de todos os títulos correspondentes.
  • Exibir resultados: Cada título da lista é impresso um a um.

Exemplo de saída

Título: Uma Luz no Sótão
Título: Tipping the Velvet
Título: Soumission
Título: Sharp Objects (Objetos Afiados)

Navegação em elementos aninhados

O Parsel permite a navegação eficiente de estruturas HTML complexas e aninhadas usando seletores CSS e XPath. Isso é particularmente valioso ao extrair dados enterrados em várias camadas de tags HTML.

Estaremos extraindo o preço de um livro de dentro do produto_pod elemento.

Abaixo está um exemplo da estrutura HTML relevante:

A partir dessa estrutura aninhada, extrairemos:

  • O preço do primeiro livro

Exemplo de código Python

importar solicitações
from parsel import Selector

# Busque a página da Web
url = "https://books.toscrape.com/"
resposta = requests.get(url)
seletor = seletor (response.text)

# Selecionar o primeiro produto por classe
product = selector.css("article.product_pod").get()

# Analisar o elemento de preço aninhado
product_selector = Selector(text=product)
price = product_selector.css("div.product_price p.price_color::text").get()

print("Preço:", preço)

Explicação do script:

  • Buscar a página da Web: O script recupera o conteúdo HTML da página da Web usando solicitações.
  • Selecione o primeiro bloco de produtos: Ele tem como alvo a primeira tag de artigo com a classe produto_pod.
  • Navegue até o elemento de preço aninhado: Usando o CSS seletor div.product_price p.price_colorele navega até a div e seleciona o p contendo o preço.
  • Extraia o texto do preço: O .get() recupera o valor do preço.
  • Exibir o resultado: O preço extraído é impresso.

Exemplo de saída

Preço: £51.77

Análise de tabelas e listas

O Parsel simplifica o processo de extração de dados estruturados de listas HTML e formatos semelhantes a tabelas. Os sites geralmente exibem informações em padrões repetitivos, como grades de produtos ou listas ordenadas, o que torna o Parsel uma ferramenta essencial para capturar esses dados com eficiência.

Como exemplo, trabalharemos novamente com o mesmo exemplo de site. Nosso objetivo é extrair uma lista de títulos de livros juntamente com seus preços. Especificamente, vamos nos concentrar no <ol> que contém várias tags <li> elementos, cada um representando um livro individual.

Abaixo está um exemplo da estrutura HTML relevante:

Dessa estrutura, extrairemos:

  • O título de cada livro
  • O preço de cada livro

Exemplo de código Python

import requests
from parsel import Selector

# Fetch the webpage
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)

# Select all book items in the list
books = selector.css("ol.row li.article")

# Loop through each book and extract title and price
for book in books:
    title = book.css("h3 a::attr(title)").get()
    price = book.css("p.price_color::text").get()
    print(f"Title: {title} | Price: {price}")

Explicação do script:

  • Buscar a página da Web: O script envia uma solicitação GET para buscar o conteúdo HTML do site.
  • Selecione todos os itens do livro: O seletor ol.row li.article visa a todos <li> elementos dentro da lista ordenada (<ol>), que representam itens de livros individuais.
  • Extraia o título e o preço: h3 a::attr(title) extrai o atributo title do <a> tag. --- p.price_color::text extrai o texto do preço do <p> tag.
  • Exibir os resultados: O script imprime o título e o preço de cada livro.

Exemplo de saída

Título: A Luz no no Sótão | Preço: £51.77
Título: Gorjeta o Veludo | Preço: £53.74
Título: Soumission | Preço: £50.10
Título: Sharp Objetos | Preço: £47.82
...

Conclusão

Neste tutorial, exploramos os fundamentos da análise da Web em Python com o Parsel. Desde a compreensão de seletores básicos até a navegação em elementos aninhados, extração de atributos e análise de listas, demonstramos como o Parsel simplifica o processo de extração de dados significativos de páginas da Web.

Aqui está uma rápida recapitulação do que abordamos:

  • Extração de elementos por ID e classe: Elementos HTML específicos direcionados usando seletores CSS.
  • Extração de texto e atributos: Aprendeu como extrair conteúdo de texto e atributos como href e src de elementos.
  • Manipulação de elementos aninhados: Explorou como navegar pelas relações pai-filho em estruturas HTML.
  • Listas de análise: Dados estruturados extraídos de padrões repetitivos, como tabelas ou listas de produtos.

Próximas etapas:

  • Faça experiências com diferentes páginas da Web e estruturas HTML complexas usando o Parsel.
  • Explore a integração com outras bibliotecas, como o Scrapy, para projetos de grande escala na Web scraping .
  • Siga as práticas recomendadas de ética scraping, como respeitar os arquivos robots.txt e evitar sobrecarregar os servidores.

O Parsel é uma ferramenta poderosa no kit de ferramentas da Web scraping , e dominá-lo abrirá inúmeras oportunidades de coleta e análise de dados.

Boa análise!