Voltar ao blogue
Guias
Raluca PenciucLast updated on Mar 31, 202612 min read

O guia definitivo sobre bibliotecas Ruby para analisar HTML e XML

O guia definitivo sobre bibliotecas Ruby para analisar HTML e XML

A extração de dados da Web, ou web scraping, envolve a leitura e o processamento de conteúdos de documentos HTML e XML. Para facilitar esta tarefa, os programadores utilizam bibliotecas especializadas denominadas «parsers».

A comunidade Ruby oferece uma vasta gama de opções no que diz respeito a analisadores HTML em Ruby, e escolher o mais adequado para o seu projeto pode ser uma tarefa complexa. Para o ajudar a tomar uma decisão informada, eis alguns fatores-chave a considerar ao selecionar um analisador:

  • Ser de código aberto e estar disponível gratuitamente para utilização.
  • O nível de suporte a diferentes padrões HTML e XML.
  • Possuir documentação abrangente e tutoriais para ajudar os programadores a começarem facilmente.
  • A capacidade de lidar com diferentes tipos de codificações, especialmente ao lidar com idiomas não latinos.
  • Ter uma API leve e fácil de usar, facilitando a navegação e a pesquisa em documentos HTML e XML.
  • O nível de tratamento de erros e validação fornecido pela biblioteca.
  • Ter uma comunidade forte e ativa que forneça suporte e recursos.
  • O tamanho e o consumo de memória da biblioteca.
  • Ter um bom desempenho, especialmente ao trabalhar com ficheiros de grande dimensão.
  • O nível de suporte a namespaces XML, caso se lide com documentos que os utilizem.
  • Ser mantida ativamente para garantir a compatibilidade com as versões mais recentes do Ruby e para receber correções de bugs.
  • O nível de extensibilidade ou opções de personalização que a biblioteca oferece.

Este artigo irá analisar mais detalhadamente seis bibliotecas Ruby populares para a análise de HTML e XML e avaliá-las com base nos critérios acima mencionados, para o ajudar a encontrar a ferramenta perfeita para as suas necessidades de web scraping.

Nokogiri

A Nokogiri é uma biblioteca popular e poderosa para analisar e pesquisar documentos XML e HTML em Ruby. Possui uma API limpa e simples e é construída sobre a libxml2, uma biblioteca C bem estabelecida para analisar XML.

Comando Gem

gem install nokogiri

Exemplos de código

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

Prós e Contras

Aqui estão alguns dos prós e contras de usar o Nokogiri:

Prós

  • É amplamente considerado o analisador mais popular e mais utilizado para Ruby
  • É muito rápido e eficiente, graças à utilização da libxml2 como motor de análise. Consegue lidar com documentos de grande dimensão com facilidade.
  • Possui uma API simples e intuitiva que facilita a navegação e a pesquisa em documentos XML e HTML.
  • Suporta tanto documentos XML como HTML, o que permite utilizar a mesma biblioteca para analisar diferentes tipos de documentos.
  • Possui um conjunto abrangente de métodos para pesquisar e manipular elementos num documento, o que facilita a extração das informações necessárias. É possível extrair dados utilizando seletores CSS ou XPath.
  • É capaz de analisar documentos HTML malformados
  • É compatível com diferentes versões do Ruby e é mantido ativamente.
  • Também suporta os analisadores SAX (Simple API for XML) e DOM (Document Object Model)

Contras

  • Algumas das tarefas de análise podem exigir um conhecimento profundo da estrutura DOM, o que pode ser difícil de aprender se o programador não estiver familiarizado com ela.
  • Pode exigir mais memória em comparação com outras bibliotecas como a Ox.
  • Pode enfrentar dificuldades na análise de documentos protegidos por autenticação, por exemplo, um site que exija um nome de utilizador e uma palavra-passe para aceder.
  • Não é seguro para threads, pelo que é necessário ter um cuidado redobrado se pretender utilizá-lo num ambiente multithread.
  • Não é adequado para passar documentos com conteúdo carregado dinamicamente via JavaScript, como com AJAX.

Ox

O Ox, ou Optimized XML, é uma biblioteca poderosa e eficiente para analisar e manipular documentos XML e JSON em Ruby.

A biblioteca é implementada em C para melhor desempenho e eficiência de memória. O Ox utiliza uma abordagem de analisador pull para analisar o documento, o que lhe permite analisar ficheiros grandes com menor utilização de memória do que um analisador baseado em DOM.

Algumas das formas como o Ox processa documentos XML são:

  • Como analisador e gravador XML genérico: o Ox pode ler e escrever documentos XML, fornecendo métodos para pesquisar e manipular elementos no documento.
  • Como um rápido marshaller de objetos/XML: o Ox pode converter documentos XML em objetos Ruby e vice-versa. Esta funcionalidade permite uma fácil serialização e deserialização de dados.
  • Como analisador SAX de fluxo: o Ox pode analisar XML de forma contínua, o que é adequado para ficheiros de grande dimensão e proporciona uma forma rápida de lidar com os eventos XML.

Comando Gem

gem install ox

Exemplos de código

require "ox"

doc = Ox.parse(%{

  <?xml version="1.0"?>

  <Payment>

	<Shop>ikea</Shop>

	<Amount>199.99</Amount>

	<Date>2023-01-12</Date>

  </Payment>

})

puts doc.Payment.Shop.text

Prós e contras

Aqui estão alguns prós e contras da utilização do Ox:

Prós

  • O Ox é muito rápido e eficiente em termos de memória, graças à sua abordagem de analisador pull e ao facto de estar implementado em C. Isto torna-o adequado para analisar grandes documentos XML e JSON ou para trabalhar com dados em streaming
  • O Ox possui uma API limpa e simples que o torna fácil de usar e compreender
  • O Ox suporta tanto JSON como XML, o que permite utilizar a mesma biblioteca para analisar diferentes tipos de documentos
  • Tem suporte integrado para namespaces XML, o que facilita o tratamento de documentos XML com namespaces.
  • É mantido e atualizado ativamente

Contras

  • A API para pesquisar e manipular elementos pode ser menos rica em comparação com outras bibliotecas como Nokogiri ou REXML
  • A sua comunidade e suporte podem não ser tão fortes como os de bibliotecas mais estabelecidas, como a Nokogiri

Oga

O Oga é uma biblioteca moderna e leve para analisar e pesquisar documentos XML e HTML em Ruby. Utiliza uma abordagem mais moderna em comparação com outras bibliotecas, recorrendo a uma implementação em Ruby puro, o que significa que não tem quaisquer dependências de bibliotecas C.

A biblioteca é adequada para documentos de tamanho pequeno a médio e não requer funcionalidades avançadas como XSLT ou validação de esquemas XML.

Embora a biblioteca não exija quaisquer bibliotecas de sistema como a libxml, para alcançar um melhor desempenho, a Oga utiliza uma pequena extensão nativa (C para MRI/Rubinius, Java para JRuby).

Comando Gem

gem install oga

Exemplos de código

require "oga"

doc = Oga.parse_xml(%{

  <?xml version="1.0"?>

  <Payment>

	<Shop>ikea</Shop>

	<Amount>199.99</Amount>

	<Date>2023-01-12</Date>

  </Payment>

})

puts doc.at_xpath("Payment/Shop/text()")

Prós e contras

Aqui estão alguns prós e contras da utilização do Oga:

Prós

  • O Oga possui uma API simples e clara, facilitando a navegação e a pesquisa em documentos XML e HTML.
  • A implementação em Ruby puro facilita a instalação e a execução em diferentes plataformas e ambientes.
  • A API do Oga permite analisar e consultar documentos num ambiente multithread de forma segura, sem preocupações com questões de desempenho
  • O Oga é leve e fácil de integrar com outras bibliotecas e módulos.
  • O Oga tem um baixo consumo de memória.

Contras

  • O Oga não oferece suporte a funcionalidades avançadas, como XPath, XSLT ou validação de documentos XML em relação a um DTD ou esquema XML.
  • As funcionalidades do Oga são limitadas em comparação com outras bibliotecas como o Nokogiri, o que pode torná-lo inadequado para tarefas complexas de análise de XML ou HTML.
  • Apesar de ser mantido, recebe menos atualizações em comparação com o Nokogiri

LibXML Ruby

O LibXML Ruby é uma ligação à biblioteca C libxml2, que é uma biblioteca bem estabelecida para analisar e manipular documentos XML. A ligação fornece uma interface para as funcionalidades da libxml2 e é utilizada por várias outras bibliotecas populares, incluindo a Nokogiri.

A biblioteca inclui funcionalidades avançadas como suporte a XPath, análise de DTD, transformações XSL e muito mais.

Comando Gem

gem install libxml-ruby

Exemplos de código

require "xml"

doc = XML::Parser.string(%{

  <?xml version="1.0"?>

  <Payment>

	<Shop>ikea</Shop>

	<Amount>199.99</Amount>

	<Date>2023-01-12</Date>

  </Payment>

})

puts doc.parse.find('//Shop').first.content

Prós e contras

Aqui está uma lista dos seus prós e contras:

Prós

  • Oferece uma forma rápida e eficiente de analisar e manipular documentos XML e HTML em Ruby, graças à sua biblioteca C subjacente.
  • Suporta vários tipos de codificação e consegue lidar com documentos com estruturas e namespaces complexos
  • Oferece suporte para XPath, uma linguagem que permite navegar e selecionar elementos de um documento XML com base nas suas propriedades e relações.
  • Suporta transformações XSLT e validação de esquemas DTD/XML
  • Possui uma vasta gama de funcionalidades e opções que o tornam adequado para casos de utilização avançados.
  • É bem apoiado pela comunidade e é uma biblioteca estável e bem documentada.

Contras

  • Pode consumir mais memória do que algumas outras bibliotecas que são implementações puramente em Ruby
  • A API não é tão intuitiva ou fácil de usar como algumas outras bibliotecas Ruby para analisar XML, o que pode tornar a sua utilização mais desafiante para programadores menos experientes
  • Não suporta nativamente a análise de JSON, sendo necessária configuração e ferramentas adicionais para lidar com JSON
  • Pode não lidar com XML malformado tão bem como algumas outras bibliotecas.

REXML

A REXML é uma biblioteca Ruby pura para analisar documentos XML; está incluída na biblioteca padrão do Ruby, pelo que é fácil de usar e não requer qualquer instalação adicional.

Inspirada na biblioteca Electric XML para Java, apresenta uma API fácil de usar, um tamanho reduzido e rapidez.

Comando Gem

gem install rexml

Exemplos de código

require "rexml/document"

doc = REXML::Document.new(%{

  <?xml version="1.0"?>

  <Payment>

	<Shop>ikea</Shop>

	<Amount>199.99</Amount>

	<Date>2023-01-12</Date>

  </Payment>

})

doc.elements.each("//Shop"){ |element| puts element.text }

Prós e Contras

Prós

  • Está incluído na biblioteca padrão do Ruby, pelo que é fácil de instalar e utilizar.
  • O REXML é Ruby puro, o que significa que não depende de quaisquer bibliotecas C ou dependências externas, tornando-o independente da plataforma.
  • Possui uma API simples e fácil de usar, o que o torna uma boa escolha para documentos XML de pequeno a médio porte
  • Possui uma implementação XPath integrada, o que facilita a pesquisa e seleção de elementos num documento XML

Contras

  • O REXML não é tão rápido quanto outras bibliotecas, como o Nokogiri, e pode consumir mais memória, o que o torna pouco adequado para documentos XML de grande porte.
  • Carece de algumas das funcionalidades mais avançadas de outras bibliotecas XML, como o tratamento de namespaces XML ou o tratamento avançado de erros

Selenium WebDriver

O Selenium WebDriver não é, em primeiro lugar, um analisador de HTML ou XML, mas sim uma ferramenta de automação de navegadores. Permite-lhe interagir com um navegador da Web de forma programática, simulando ações do utilizador, tais como clicar em botões, preencher formulários e navegar entre páginas.

O Selenium WebDriver permite automatizar interações com navegadores web, tais como clicar em botões, preencher formulários e navegar entre páginas.

A ferramenta é útil em casos em que é necessário extrair dados de um site que utiliza JavaScript para carregar dinamicamente o seu conteúdo ou para realizar ações específicas, como interagir com um formulário ou um botão na página.

Comando Gem

gem install selenium-webdriver webdrivers

Exemplos de código

require "selenium-webdriver"

require "webdrivers/chromedriver"

driver = Selenium::WebDriver.for :chrome

driver.get("https://webscrapingapi.com")

puts driver.title

Prós e Contras

Aqui estão alguns dos prós e contras de usar o Selenium WebDriver em Ruby:

Prós

  • O Selenium WebDriver suporta uma vasta gama de navegadores web, incluindo o Chrome, Firefox, Edge, Safari e outros, o que significa que os testes que criar podem ser executados em diferentes navegadores sem necessidade de modificação.
  • O Selenium WebDriver oferece várias formas de inspecionar o conteúdo de uma página web, como localizar elementos pelo seu ID, nome de classe ou seletor CSS, o que facilita a interação com páginas web e a automatização de tarefas.
  • Permite-lhe interagir com elementos JavaScript em páginas web; esta funcionalidade torna-o adequado para testar o comportamento de páginas web com JavaScript.
  • É amplamente utilizado na indústria, está bem documentado e conta com uma grande comunidade de programadores que podem fornecer suporte.

Contras

  • O Selenium WebDriver pode ser mais lento do que outras bibliotecas de análise de HTML, uma vez que precisa de iniciar um navegador e simular a interação de um utilizador real, o que pode aumentar o tempo necessário para extrair os dados.
  • O Selenium WebDriver depende da instalação de um navegador na máquina, o que pode causar problemas ao executar o script num ambiente headless ou num servidor sem GUI.
  • O Selenium WebDriver não é uma biblioteca especializada em análise de HTML e a sua API pode não ser tão intuitiva ou fácil de utilizar como bibliotecas especializadas como o Nokogiri ou

Digno de menção

Embora tenhamos focado em bibliotecas ativas e bem mantidas para analisar HTML e XML em Ruby, existem algumas outras bibliotecas que vale a pena considerar.

No entanto, é importante ter em mente que estas bibliotecas podem ser mantidas de forma menos ativa ou ter menos apoio da comunidade, o que pode acrescentar um nível adicional de risco se forem utilizadas num ambiente de produção.

É essencial avaliar cuidadosamente as funcionalidades e o desempenho da biblioteca, bem como o tamanho e a complexidade dos documentos que precisa de analisar, antes de tomar uma decisão.

Hpricot

O Hpricot é outro analisador HTML popular em Ruby com suporte para documentos XML. O Hpricot possui uma API simples e fácil de usar, sendo adequado para documentos de pequeno a médio porte.

Comando Gem

gem install hpricot

Exemplos de código

require "hpricot"

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

puts Hpricot(doc).at("title").inner_html

Prós e contras

Aqui estão alguns prós e contras da utilização do Hpricot:

Prós

  • O Hpricot possui uma API simples e fácil de usar que facilita a navegação e a pesquisa em documentos HTML e XML.
  • As funções de pesquisa do Hpricot baseiam-se em seletores CSS semelhantes aos do jQuery, que são fáceis de compreender e utilizar.
  • Como algumas partes do Hpricot estão escritas em C, a biblioteca é relativamente rápida e eficiente
  • É adequado para documentos de pequeno a médio porte
  • Tal como o Nokogiri, consegue analisar documentos malformados

Contras

  • O Hpricot não tem sido mantido ativamente desde 2010, pelo que poderá não funcionar bem com versões recentes do Ruby e poderá não ter suporte para novas funcionalidades e correções de erros.
  • As funções de pesquisa do Hpricot não suportam todos os seletores CSS e não suportam namespaces XML.
  • Não consegue lidar com documentos XML malformados
  • O desempenho do Hpricot pode ser mais lento e pode consumir mais memória em comparação com outras bibliotecas como o Nokogiri ou o Ox, especialmente no caso de documentos maiores.

Conclusão

Em conclusão, quando se trata de analisar documentos HTML e XML em Ruby, há uma variedade de bibliotecas à escolha, cada uma com o seu próprio conjunto de prós e contras.

Nokogiri, REXML, Ox, Hpricot e LibXML Ruby são todas bibliotecas poderosas que podem ser usadas para web scraping, mas é importante avaliar os requisitos e necessidades específicos do seu projeto antes de decidir qual usar.

O Selenium WebDriver, embora não tenha sido concebido principalmente para a análise de HTML, também pode ser utilizado para web scraping; no entanto, é uma ferramenta de automação de navegadores que acarreta alguma complexidade adicional e um desempenho mais lento em comparação com bibliotecas especializadas.

No entanto, criar um script de web scraping pode ser uma tarefa demorada e difícil, especialmente se precisar de lidar com sites dinâmicos, CAPTCHAs e bloqueios.

A WebScrapingAPI oferece uma solução simples e eficaz para obter dados da web, eliminando a necessidade de criar o seu próprio script. Utilizando a funcionalidade Regras de extração, pode facilmente recuperar informações de uma página web especificando os seletores CSS do elemento.

Porque não cria uma conta hoje mesmo?

Sobre o autor
Raluca Penciuc, Desenvolvedor Full-Stack @ WebScrapingAPI
Raluca PenciucDesenvolvedor Full-Stack

Raluca Penciuc é programadora Full Stack na WebScrapingAPI, onde desenvolve scrapers, aperfeiçoa estratégias de evasão e procura formas fiáveis de reduzir a deteção nos sites-alvo.

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.