O guia definitivo para bibliotecas Ruby para análise de HTML e XML

Suciu Dan em 02 fev 2023

imagem do blogue

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

A comunidade Ruby oferece uma vasta gama de opções no que diz respeito a analisadores HTML Ruby, e escolher o mais adequado para o seu projeto pode ser uma tarefa difícil. Para o ajudar a tomar uma decisão informada, aqui estão alguns factores chave a considerar quando selecionar um analisador:

  • Ser de fonte aberta e livremente disponível para utilização.
  • O nível de suporte para diferentes normas HTML e XML.
  • Ter documentação e tutoriais completos para ajudar os programadores a iniciarem-se facilmente.
  • A capacidade de lidar com diferentes tipos de codificações, especialmente quando se trata de línguas não latinas.
  • Ter uma API leve e fácil de utilizar, 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 apoio e recursos.
  • O tamanho e o espaço de memória da biblioteca.
  • Bom desempenho, especialmente quando se trabalha com ficheiros grandes.
  • O nível de suporte para namespaces XML, se estiver a lidar com documentos que os utilizam.
  • Está a ser ativamente mantido para garantir a compatibilidade com as versões mais recentes do Ruby e para receber correcções de erros.
  • O nível de extensibilidade ou opções de personalização que a biblioteca oferece.

Este artigo analisará seis bibliotecas Ruby populares para analisar 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 recolha de dados da Web.

Nokogiri

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

Comando Gem

gem install nokogiri

Amostras 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

Eis alguns dos prós e contras da utilização do Nokogiri:

Prós

  • É amplamente considerado como 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. Pode lidar com documentos grandes com facilidade.
  • Tem uma API simples e de fácil utilização que facilita a navegação e a pesquisa em documentos XML e HTML.
  • Suporta documentos XML e HTML, o que lhe permite utilizar a mesma biblioteca para analisar diferentes tipos de documentos.
  • Dispõe de um vasto conjunto de métodos de pesquisa e manipulação de elementos num documento, o que facilita a extração das informações de que necessita. Pode extrair dados utilizando selectores CSS ou XPath.
  • Pode analisar documentos HTML malformados
  • É compatível com diferentes versões do Ruby e é ativamente mantido.
  • 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, que pode ser difícil de aprender se o programador não estiver familiarizado com ela.
  • Poderá necessitar de mais memória em comparação com outras bibliotecas como a Ox.
  • Pode ter dificuldades em analisar documentos protegidos por autenticação, por exemplo, um sítio Web que exija um nome de utilizador e uma palavra-passe para aceder.
  • Não é thread-safe, por isso é necessário ter cuidado extra se estiver a planear utilizá-lo num ambiente multithread.
  • Não é adequado para transmitir documentos com conteúdo carregado dinamicamente através de JavaScript, tal como acontece com AJAX.

Boi

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. Ox usa uma abordagem pull-parser para analisar o documento, o que lhe permite analisar ficheiros grandes com menos utilização de memória do que um analisador baseado em DOM.

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

  • Como um analisador e gravador XML genérico: Ox pode ler e escrever documentos XML, fornecendo métodos para pesquisar e manipular elementos no documento.
  • Como um rápido Marshaller Object/XML: Ox pode converter documentos XML em objectos Ruby e vice-versa. Esta caraterística permite a fácil serialização e desserialização de dados.
  • Como analisador SAX de fluxo: Ox pode analisar XML em fluxo contínuo, o que é adequado para ficheiros grandes e fornece uma forma rápida de tratar os eventos XML.

Comando Gem

gem install ox

Amostras 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

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

Prós

  • Ox é muito rápido e eficiente em termos de memória, graças à sua utilização de uma abordagem pull-parser e ao facto de ser implementado em C. Isto torna-o adequado para analisar grandes documentos XML e JSON ou trabalhar com dados de streaming
  • Ox tem uma API limpa e simples que facilita a sua utilização e compreensão
  • Ox suporta JSON e XML, o que lhe permite utilizar a mesma biblioteca para analisar diferentes tipos de documentos
  • Tem um suporte integrado para namespaces XML, o que facilita o tratamento de documentos XML com namespaces.
  • É ativamente mantido e atualizado

Contras

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

Oga

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, usando 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 pequena e média dimensão e não requer funcionalidades avançadas como XSLT ou validação de esquemas XML.

Apesar de a biblioteca não necessitar de bibliotecas de sistema como a libxml, para obter um melhor desempenho, o Oga utiliza uma pequena extensão nativa (C para MRI/Rubinius, Java para JRuby).

Comando Gem

gem install oga

Amostras 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

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

Prós

  • O Oga tem uma API simples e limpa, que facilita a navegação e a pesquisa em documentos XML e HTML.
  • A implementação Pure-Ruby 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 problemas de desempenho
  • Oga é leve e fácil de integrar com outras bibliotecas e módulos.
  • Oga tem um baixo consumo de memória.

Contras

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

Rubi LibXML

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

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

Comando Gem

gem install libxml-ruby

Amostras 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

Segue-se uma lista dos seus prós e contras:

Prós

  • Fornece 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 pode tratar documentos com estruturas e espaços de nomes complexos
  • Fornece suporte para XPath, que é 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çada.
  • É bem suportada 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 puras do Ruby
  • A API não é tão intuitiva ou fácil de utilizar como algumas outras bibliotecas Ruby para analisar XML, o que pode tornar a sua utilização mais difícil para programadores menos experientes
  • Não suporta nativamente a análise de JSON, pelo que serão necessárias configurações e ferramentas adicionais para lidar com JSON
  • Pode não tratar XML malformado tão bem como algumas outras bibliotecas.

REXML

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

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

Comando Gem

gem install rexml

Amostras 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 Ruby padrão, 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, o que o torna independente de plataforma.
  • Tem uma API simples e fácil de utilizar, o que a torna uma boa escolha para documentos XML de pequena e média dimensão
  • Tem uma implementação XPath incorporada, que facilita a pesquisa e a seleção de elementos num documento XML

Contras

  • O REXML não é tão rápido como outras bibliotecas, como o Nokogiri, e pode consumir mais memória, o que faz com que não seja adequado para grandes documentos XML.
  • Faltam-lhe algumas das funcionalidades mais avançadas de outras bibliotecas XML, como o tratamento de espaços de nomes XML ou o tratamento avançado de erros

Driver Web Selenium

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

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

A ferramenta é útil nos casos em que é necessário recolher dados de um sítio Web que utiliza JavaScript para carregar dinamicamente o seu conteúdo ou para executar acções específicas, como interagir com um formulário ou um botão na página.

Comando Gem

gem install selenium-webdriver webdrivers

Amostras 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 da utilização do Selenium WebDriver em Ruby:

Prós

  • O Selenium WebDriver suporta uma vasta gama de navegadores Web, incluindo Chrome, Firefox, Edge, Safari e outros, o que significa que os testes que cria podem ser executados em diferentes navegadores sem modificação.
  • O Selenium WebDriver fornece várias formas de inspecionar o conteúdo de uma página Web, como a localização de elementos pelo seu ID, nome da 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 caraterística torna-o adequado para testar o comportamento de páginas Web com javascript.
  • É amplamente utilizado na indústria, está bem documentado e tem uma grande comunidade de programadores que podem prestar apoio.

Contras

  • O Selenium WebDriver pode ser mais lento do que outras bibliotecas de análise HTML, uma vez que necessita de iniciar um browser 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 Web no computador, o que pode causar problemas ao executar o script num ambiente sem cabeça ou num servidor sem GUI.
  • O Selenium WebDriver não é uma biblioteca especializada para análise de HTML e a sua API pode não ser tão intuitiva ou fácil de utilizar como as bibliotecas especializadas como o Nokogiri ou o

Vale a pena mencionar

Embora nos tenhamos concentrado em bibliotecas activas e bem mantidas para analisar HTML e XML em Ruby, há algumas outras bibliotecas que vale a pena considerar.

No entanto, é importante ter em conta 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 Ruby popular com suporte para documentos XML. O Hpricot tem uma API simples e fácil de utilizar, e é adequado para documentos de pequena e média dimensão.

Comando Gem

gem install hpricot

Amostras 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

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

Prós

  • O Hpricot tem uma API simples e fácil de utilizar que facilita a navegação e a pesquisa em documentos HTML e XML.
  • As funções de pesquisa do Hpricot baseiam-se em selectores CSS do tipo jQuery, que são fáceis de compreender e utilizar.
  • Como algumas partes do Hpricot são escritas em C, a biblioteca é relativamente rápida e eficiente
  • É adequado para documentos de pequena e média dimensão
  • Tal como o Nokogiri, pode analisar documentos malformados

Contras

  • O Hpricot não tem sido mantido ativamente desde 2010, pelo que pode não funcionar bem com versões recentes do Ruby e pode não ter suporte para novas funcionalidades e correcções de erros.
  • As funções de pesquisa do Hpricot não suportam todos os selectores CSS e não suportam espaços de nomes XML.
  • Não pode tratar documentos XML malformados
  • O desempenho do Hpricot pode ser mais lento e pode consumir mais memória em comparação com outras bibliotecas como Nokogiri ou Ox, particularmente para documentos maiores.

Conclusão

Em conclusão, quando se trata de analisar documentos HTML e XML em Ruby, há uma variedade de bibliotecas para escolher, 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 utilizadas para a recolha de dados da Web, mas é importante avaliar os requisitos e necessidades específicos do seu projeto antes de decidir qual delas utilizar.

O Selenium WebDriver, embora não tenha sido concebido principalmente para a análise de HTML, também pode ser utilizado para a recolha de dados da Web, no entanto, é uma ferramenta de automatização do browser que traz alguma complexidade adicional e um desempenho mais lento em comparação com bibliotecas especializadas.

No entanto, a criação de um script de recolha de dados da Web pode ser uma tarefa morosa e difícil, especialmente se precisar de lidar com sítios Web dinâmicos, CAPTCHAs e proibições.

O 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 de regras de extração, pode facilmente obter informações de uma página Web especificando os selectores CSS do elemento.

Porque não cria uma conta hoje?

Notícias e actualizações

Mantenha-se atualizado com os mais recentes guias e notícias sobre raspagem da Web, subscrevendo a nossa newsletter.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artigos relacionados

miniatura
GuiasAPI de raspagem da Amazon - Guia de início

Faça scraping da Amazon de forma eficiente com a solução económica da Web Scraping API. Aceda a dados em tempo real, desde produtos a perfis de vendedores. Registe-se agora!

WebscrapingAPI
avatar do autor
WebscrapingAPI
8 min. de leitura
miniatura
Ciência da recolha de dados da WebScrapy vs. Selenium: Um guia abrangente para escolher a melhor ferramenta de raspagem da Web

Explore a comparação aprofundada entre o Scrapy e o Selenium para raspagem da Web. Desde a aquisição de dados em grande escala até o tratamento de conteúdo dinâmico, descubra os prós, os contras e os recursos exclusivos de cada um. Saiba como escolher a melhor estrutura com base nas necessidades e na escala do seu projeto.

WebscrapingAPI
avatar do autor
WebscrapingAPI
14 min ler
miniatura
Casos de utilizaçãoUtilização de Web Scraping para dados alternativos em finanças: Um guia completo para investidores

Explore o poder transformador da recolha de dados da Web no sector financeiro. Desde dados de produtos a análises de sentimentos, este guia oferece informações sobre os vários tipos de dados da Web disponíveis para decisões de investimento.

Mihnea-Octavian Manolache
avatar do autor
Mihnea-Octavian Manolache
13 min ler