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.