O guia definitivo para bibliotecas Ruby para análise de HTML e XML
Suciu Dan em 02 fev 2023

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

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!


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.


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.
