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.
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.
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:
<h1>
, <p>
, <img>
).id
, classe
, href
).Os seletores XPath e CSS são linguagens de consulta usadas para selecionar elementos em um documento HTML:
Leia mais sobre os seletores aqui.
Antes de começar a usar o Parsel, verifique o seguinte:
pip install parsel requests
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_pod
que representa um único registro contábil.
Abaixo está um exemplo de sua estrutura HTML:
Desse elemento, extrairemos:
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:
OBTER
para o site de exemplo para recuperar seu conteúdo HTML.article.product_pod
para selecionar a primeira entrada do livro na página.produto_pod
bloco.Título: Uma Luz no Sótão
Preço: £51.77
Disponibilidade: Em estoque
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:
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)
OBTER
para recuperar o conteúdo HTML do site.produto_pod
O seletor CSS tem como alvo a primeira entrada do livro.h3 a::attr(title)
o script extrai o atributo title do <a>
aninhada na tag <h3>
tag.Texto do título: Uma luz no sótão
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:
href
) para a página de detalhes do livroimportar 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:
Link do livro: catalogue/a-light-in-the-attic_1000/index.html
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:
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:
OBTER
para recuperar o conteúdo HTML do site. article.product_pod h3 a::attr(title)
, ele seleciona todos os <a>
tags internas <h3>
tags dentro de produto_pod
elementos..getall()
recupera uma lista de todos os títulos correspondentes.Título: Uma Luz no Sótão
Título: Tipping the Velvet
Título: Soumission
Título: Sharp Objects (Objetos Afiados)
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:
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:
produto_pod
.div.product_price p.price_color
ele navega até a div e seleciona o p
contendo o preço..get()
recupera o valor do preço.Preço: £51.77
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:
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}")
ol.row
li.article
visa a todos <li> elementos dentro da lista ordenada (<ol>), que representam itens de livros individuais.h3 a::attr(title)
extrai o atributo title do <a>
tag. --- p.price_color::text
extrai o texto do preço do <p>
tag.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
...
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:
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!