Lista dos melhores analisadores HTML Python

Descubra os melhores analisadores HTML do Python — Beautiful Soup, HTMLParser, lxml, PyQuery e Scrapy — para simplificar e acelerar seus projetos de Scraping de dados.
15 min de leitura

Python é uma escolha popular para Scraping de dados, graças ao número de analisadores HTML disponíveis. Neste artigo, você explorará os analisadores mais usados:Beautiful Soup,HTMLParser,lxml,PyQuery eScrapy. Esses analisadores são preferidos por sua facilidade de uso, velocidade, suporte a padrões HTML modernos, documentação e suporte da comunidade.

Vamos começar!

Beautiful Soup

Beautiful Soup é uma biblioteca Python para analisar documentos HTML e XML. Ela cria uma árvore de análise que reflete a estrutura de cada página, facilitando a extração automática de dados. Essa árvore representa a hierarquia dos elementos dentro do documento, permitindo que você navegue e pesquise nele com eficiência para localizar nós específicos.

Recursos e facilidade de uso

O Beautiful Soup é útil para organizar documentos HTML em informações estruturadas. Ele vem com vários analisadores, incluindohtml.parser,lxml ehtml5lib, que ajudam você a lidar com diferentes tipos de marcação, como HTML padrão, HTML malformado ou corrompido, XHTML, HTML5 e XML. Isso oferece flexibilidade para escolher o melhor equilíbrio entre velocidade e precisão. Por exemplo, se você estiver trabalhando com uma página da web que tem tags ausentes ou elementos aninhados incorretamente, você pode usaro html5libpara analisar o conteúdo HTML da mesma forma que um navegador da web faria.

O Beautiful Soup também pode ajudar quando se trata de tarefas de Scraping de dados, em que a estrutura HTML é imprevisível ou desorganizada. Depois que um documento é analisado, você pode pesquisar facilmente a árvore para localizar nós. Métodos de pesquisa como find(), find_all() e select() fornecem maneiras de acessar elementos com base em identificadores, classes, conteúdo de texto ou atributos. Esteja você procurando todas as instâncias de uma tag ou visando um elemento, usar o seletor certo garante acesso rápido aos dados necessários com o mínimo de esforço de codificação.

Velocidade

O Beautiful Soup não é o analisador mais rápido, mas oferece estratégias de análise flexíveis que proporcionamadaptabilidade. Por padrão, ele usao html.parser do Python, que é ideal para tarefas simples, como trabalhar com documentos pequenos para extrair dados de uma postagem de blog. Se você deseja extrair e processar uma grande quantidade de dados, considere usar um analisador diferente.

Suporte para padrões HTML atualizados

Se você deseja analisar elementos e atributosHTML5de páginas da web estáticas, o Beautiful Soup é uma ótima escolha. Sua compatibilidade com analisadores garante a conformidade com ospadrões HTML mais recentes.

Documentação e suporte

O Beautiful Soup possuiuma documentação extensa e é usado por mais de 850.000 usuários noGitHub. Sua documentação oferece exemplos, tutoriais e referências que facilitam o início.

Saiba mais sobre scraping de dados com o Beautiful Soup aqui.

Exemplo de código

Para instalar o Beautiful Soup, execute o seguinte comando em seu shell ou terminal:

pip3 install beautifulsoup4

O trecho de código a seguir usa o Beautiful Soup para analisar dados dosite Books to Scrape:

import requests
from bs4 import BeautifulSoup

# URL da página da web a ser extraída
books_page_url = "https://books.toscrape.com/"

# Obter o conteúdo da página da web
response = requests.get(books_page_url)

# Verificar se a solicitação foi bem-sucedida
if response.status_code == 200:
    # Analisar o conteúdo HTML da página
    soup_parser = BeautifulSoup(response.text, 'html.parser')

    # Encontrar todos os artigos que contêm informações sobre livros
    book_articles = soup_parser.find_all('article', class_='product_pod')

    # Percorrer cada artigo de livro e extrair seu título e preço
    para artigo_livro em artigos_livro:
        # Extrair o título do livro
        nome_livro = artigo_livro.h3.a['title']
        
        # Extrair o preço do livro
        custo_livro = artigo_livro.find('p', class_='price_color').text
        
        # Imprimir o título e o preço do livro
        print(f"Título: {book_name}, Preço: {book_cost}")
else:
    # Imprimir uma mensagem de erro se a página não puder ser recuperada
    print("Falha ao recuperar a página da web")

Se você quiser testar este código, salve-o em um arquivo chamado beautifulsoup_books_scrape.py e execute-o usando o seguinte comando:

python3 beautifulsoup_books_scrape.py

Você deverá ver todos os títulos e preços dos livros da primeira página impressos no seu terminal ou shell:

…saída omitida…
Título: Soumission, Preço: £ 50,10
Título: Sharp Objects, Preço: £ 47,82
Título: Sapiens: Uma Breve História da Humanidade, Preço: £ 54,23
Título: The Requiem Red, Preço: £ 22,65
Título: The Dirty Little Secrets of Getting Your Dream Job, Preço: £ 33,34...
 saída omitida ...

Se você é novo no mundo do Scraping de dados, a simplicidade e a capacidade do Beautiful Soup de navegar pela árvore HTML tornam-no uma boa escolha para seus projetos de Scraping de dados.

HTMLParser

HTMLParser é uma biblioteca que vem pré-instalada com Python e permite analisar e extrair dados de documentos HTML.

Recursos e facilidade de uso

Embora o HTMLParser não tenha alguns dos recursos fornecidos por outras bibliotecas de análise, comolxmlehtml5lib, a simplicidade do HTMLParser e a integração com o Python o tornam uma boa escolha para projetos com estruturas de dados simples, onde o conteúdo HTML é consistente (por exemplo,scraping de páginas da web estáticas). No entanto, se você estiver lidando com conteúdo HTML malformado, o HTMLParser não é a melhor opção.

Velocidade

A velocidade do HTMLParser é adequada para a maioria dos casos de uso de análise HTML em que você tem documentos de tamanho pequeno a moderado (ou seja, alguns kilobytes a alguns megabytes) e necessidades mínimas de pré-processamento. No entanto, para documentos HTML mais complexos, é preferível usar analisadores como o lxml.

Suporte para padrões HTML atualizados

O HTMLParser oferece suporte à análise HTML básica, mas pode ter dificuldades com documentos HTML muito complexos ou mal formados. Além disso, ele não oferece suporte total ao padrão HTML5 mais recente.

Documentação e suporte

Como o HTMLParser faz parte da biblioteca do Python, ele temdocumentaçãoe suporte confiáveis. É fácil encontrar ajuda em plataformas como Stack Overflow, GitHub e fóruns relacionados ao Python.

Exemplo de código

Conforme mencionado anteriormente, o módulo HTMLParser está incluído na biblioteca padrão do Python e não requer instalação adicional.

A seguir, um exemplo de código usando html.parser para analisar dados HTML:

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Encontrada uma tag inicial:", tag)
        
    def handle_endtag(self, tag):
        print("Encontrada uma tag final:", tag)
        
    def handle_data(self, data):
        print("Encontrados alguns dados:", data)

parser = MyHTMLParser()

html_data = """
<html>
  <head><title>Exemplo</title></head>
  <body><h1>Título</h1><p>Parágrafo.</p></body>
</html>
"""

parser.feed(html_data)

Neste script, você estende a classe HTMLParser para criar um analisador HTML que gerencia tags iniciais, tags finais e exibições de cada elemento.

Para usar este código, salve-o em um arquivo chamado htmlparser_example.py e execute-o com o seguinte comando em seu terminal ou shell:

python3 htmlparser_example.py

A saída mostra cada tag e dados:

…saída omitida…
Encontrada uma tag inicial: html
Encontrados alguns dados:  
  
Encontrada uma tag inicial: head
Encontrada uma tag inicial: title
Encontrados alguns dados: Exemplo
Encontrada uma tag final: title
Encontrada uma tag final: head
…saída omitida…

lxml

O lxml é uma escolha popular para Scraping de dados e extração de dados porque combina o poder das bibliotecas XML integradas com a facilidade de uso do Python.

Recursos e facilidade de uso

O lxml é popular graças às suas funções eficientes e versáteis para navegar e analisar documentos HTML e XML. Ele oferece recursos avançados de processamento XML, incluindoXPath,XSLT e XPointer, permitindo extrair e transformar dados com precisão.

Assim como o Beautiful Soup, o lxml suporta estruturas em árvore, facilitando a navegação e a análise de conteúdo HTML. Se você estiver trabalhando com conteúdos diversos, sua capacidade de funcionar bem com documentos formatados e não formatados pode ser útil.

Velocidade

O lxml é conhecido por sua velocidade e eficiência, graças à utilização de bibliotecas C comolibxml2elibxslt. Isso torna o lxml mais rápido do que outras bibliotecas de análise, especialmente ao lidar com documentos extensos ou tarefas de análise complexas, como extrair dados profundamente aninhados de grandes tabelas HTML.

O lxml é uma ótima opção para projetos com prazos apertados ou que exigem o processamento de grandes quantidades de dados.

Suporte para padrões HTML atualizados

O lxml pode lidar com as tecnologias web mais recentes, incluindo arquivos HTML5 e HTML mal estruturado. Isso torna o lxml uma das melhores opções para tarefas de Scraping de dados, onde a qualidade e a estrutura do HTML podem variar.

Documentação e suporte

O lxml possuidocumentação abrangentecom exemplos detalhados que atendem a desenvolvedores de todos os níveis. Além disso, você pode buscar mais informações, dicas de solução de problemas e práticas recomendadas em plataformas comoStack OverfloweGitHub.

Saiba mais sobre scraping de dados com o lxml aqui.

Exemplo de código

Para instalar o lxml, execute o seguinte:

pip3 install lxml

O exemplo a seguir mostra como analisar dados HTML com o lxml:

from lxml import html

html_content = """
<html>
  <body>
    <h1>Olá, mundo!</h1>
    <p>Este é um parágrafo.</p>
  </body>
</html>
"""

tree = html.fromstring(html_content)

h1_text = tree.xpath('//h1/text()')[0]
print("Texto H1:", h1_text)

p_text = tree.xpath('//p/text()')[0]
print("Texto do parágrafo:", p_text)

Aqui, você usa lxml para analisar o conteúdo HTML e, em seguida, extrai o texto dos elementos HTML com expressões XPath.

Se você quiser testar o lxml, salve este código em um arquivo chamado lxml_example.py e execute-o com o seguinte comando no seu shell ou terminal:

python3 lxml_example.py

Você deverá ver o texto dos elementos <h1> e <p> impresso assim:

Texto H1: Olá, mundo!
Texto do parágrafo: Este é um parágrafo.

Se você precisar de um analisador completo e pronto para produção, capaz de lidar com a complexidade das consultas XPath (como tipos em XML ou vários itens), use o lxml.

PyQuery

PyQuery é uma bibliotecasemelhante ao jQuerypara Python que permite extrair páginas inteiras da web em segundos.

Recursos e facilidade de uso

Semelhante à sintaxe do jQuery, o PyQuery é fácil de usar. Você pode selecionar elementos, fazer loops sobre eles, atualizar seu conteúdo e gerenciar atributos HTML com facilidade. Isso é especialmente útil quando se trata de tarefas como Scraping de dados, nas quais você deseja extrair dados de páginas HTML e trabalhar com eles.

O PyQuery também oferece suporte a seletores CSS, o que facilita o início se você já estiver familiarizado com a animação de documentos DOM usando jQuery.

Velocidade

O PyQuery usa a biblioteca lxml para analisar HTML. Isso o torna fácil de usar, mas mais lento do que se você estivesse usando o lxml diretamente.

Suporte para padrões HTML atualizados

O PyQuery está em conformidade com os padrões HTML5 mais recentes e, como usa lxml para análise, o PyQuery pode lidar com HTML estruturado e não estruturado.

Documentação e suporte

O PyQuery fornecedocumentaçãocompleta que pode ajudá-lo a começar rapidamente. Embora tenha umacomunidade menordo que outras bibliotecas, ele é ativamente suportado por mais de quarenta colaboradores. Também existem outros recursos disponíveis, como fóruns online, Stack Overflow e vários tutoriais, que podem ajudá-lo se você encontrar problemas.

Exemplo de código

Para instalar o PyQuery, execute o seguinte:

pip3 install pyquery

Aqui está um trecho de código que usa o pyquery para analisar dados HTML:

from pyquery import PyQuery as pq

html_content = """
<html>
  <body>
    <h1>Olá, do PyQuery!</h1>
    <p>Este é um parágrafo.</p>
  </body>
</html>
"""

doc = pq(html_content)

h1_text = doc('h1').text()
print("Texto H1:", h1_text)

p_text = doc('p').text()
print("Texto do parágrafo:", p_text)

Neste trecho, você analisa o conteúdo HTML e extrai o texto de elementos específicos.

Salve este código em um arquivo chamado pyquery_example.py e execute-o usando o seguinte comando em seu shell ou terminal:

python3 pyquery_example.py

Sua saída será semelhante a esta:

Texto H1: Olá, do PyQuery!
Texto do parágrafo: Este é um parágrafo.

Se você já sabe usar o jQuery e está procurando recursos semelhantes, o PyQuery é uma ótima opção.

Scrapy

O Scrapy é uma estrutura flexível e de código aberto para Scraping de dados que permite aos usuários construir e operarspiderspara coletar informações. Ele oferece ferramentas para lidar com todos os aspectos de uma tarefa de scraping, desde o gerenciamento de solicitações HTTP até o parsing, o processamento e o salvamento dos dados extraídos. A estrutura gerencia toda a complexidade envolvida nas tarefas de scraping para que você possa se concentrar na coleta das informações desejadas.

Recursos e facilidade de uso

O Scrapy foi projetado para ser fácil de usar e se destaca no parsing de dados complexos da web com uma estrutura modular. Ele oferece seletores XPath e CSS para navegar em HTML e XML e inclui utilitários como limitação de solicitações, falsificação de agente do usuário e rotação de IP, que são essenciais para scraping em grande escala.

Velocidade

O Scrapy é eficiente. Suafuncionalidade de redepermite processar solicitações simultaneamente para realizar a recuperação de dados. Isso é especialmente poderoso ao conduzir conjuntos de dados em grande escala ou quando você deseja fazer scraping em sites comerciais.

Suporte para padrões HTML atualizados

O Scrapy oferece suporte aos padrões HTML5 e pode lidar com sites complexos, mesmo aqueles que contêm JavaScript gerado dinamicamente. Embora o Scrapy em si não processe JavaScript, ele funciona em conjunto com ferramentas comoo Seleniumpara gerenciar páginas JavaScript.

Leia mais sobre como extrair conteúdo dinâmico aqui.

Documentação e suporte

O Scrapy tem uma grande quantidade dedocumentaçãoe uma comunidade vibrante por trás dele. A documentação oficial cobre tudo o que você precisa saber sobre o uso básico e tópicos avançados, e inclui muitos exemplos, guias e práticas recomendadas para dar suporte a desenvolvedores de todos os níveis.

Além disso, a comunidade Scrapy se envolve ativamente por meio de fóruns e repositórios GitHub, garantindo que você possa buscar ajuda e acessar recursos para qualquer problema que encontrar.

Exemplo de código

Para instalar o Scrapy, execute o seguinte:

pip3 install scrapy

A seguir, um exemplo usando um spider do Scrapy para extrair dados:

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('small.author::text').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }

Este script define uma classe spider, define as URLs iniciais e especifica como analisar a resposta para extrair dados.

Salve este código em um arquivo chamado quotes_spider.py e execute-o usando o seguinte comando no seu terminal ou shell:

scrapy runspider quotes_spider.py -o quotes.json

Quando você executa este código, o Scrapy rastreia uma página Quotes to Scrape e extrai e analisa citações de dados desta página com seus respectivos autores e tags. Em seguida, o Scrapy salva os dados extraídos em um arquivoquotes.jsonque se parece com isto:

[
{"text": "u201cO mundo como o criamos é um processo do nosso pensamento. Ele não pode ser mudado sem mudar nosso pensamento.u201d", "author": "Albert Einstein", "tags": ["mudança", "pensamentos profundos", "pensamento", "mundo"]},
{"text": "u201cSão nossas escolhas, Harry, que mostram quem realmente somos, muito mais do que nossas habilidades.u201d", "author": "J.K. Rowling", "tags": ["habilidades", "escolhas"]}
...saída omitida...
]

Para projetos complexos de extração da web em que você tem necessidades específicas, o Scrapy é uma ótima opção com suas ferramentas ricas em recursos e escalabilidade.

Conclusão

Neste artigo, você conheceu cinco analisadores HTML para Python, incluindo Beautiful Soup, HTMLParser, lxml, PyQuery e Scrapy.

O Beautiful Soup é ótimo para iniciantes devido à sua simplicidade. O HTMLParser é uma opção leve para necessidades básicas de análise. O lxml é algo a se considerar se você estiver procurando por melhor desempenho e suporte a XPath. O PyQuery traz uma simplicidade semelhante ao jQuery para Python. O Scrapy é a estrutura a ser usada se você estiver lidando com projetos de scraping em grande escala.

Quer pular a extração e obter os dados? Confira nossos Conjuntos de Dados inscrevendo-se e baixe uma amostra gratuita agora.