Portanto, temos um documento HTML, mas queremos dados, o que significa que devemos analisar a resposta anterior para obter informações legíveis por humanos.
Começando com pequenos passos, vamos extrair o título do site. Um facto notável sobre o Ruby é que tudo é um objeto, com muito poucas exceções, o que significa que mesmo uma simples string pode ter atributos e métodos.
Portanto, podemos simplesmente aceder ao valor do título do site através dos atributos do objeto parsed_page.
puts parsed_page.title
Continuando, vamos extrair todos os links do site. Para isso, usaremos um método mais genérico que analisa tags específicas, o método css.
links = parsed_page.css('a')
links.map {|element| element["href"]}
puts links
Também usamos o método map para manter apenas os links com um atributo href do HTML.
Vamos ver um exemplo mais realista. Precisamos de extrair os artigos do blogue, o seu título, endereço e meta descrição.
Se inspecionar um dos cartões de artigo, poderá ver que podemos obter o endereço e o título do artigo através dos atributos do link. Além disso, a meta descrição encontra-se numa tag <div> com um nome de classe específico.
É claro que existem muitas formas de realizar esta pesquisa. A que iremos utilizar consistirá em procurar todas as tags <div> com o nome de classe td_module_10 e, em seguida, percorrer cada uma delas para extrair as tags <a> e as tags internas com o nome de classe td-excerpt.
article_cards = parsed_page.xpath("//div[contains(@class, 'td_module_10')]")
article_cards.each do |card|
title = card.xpath("div[@class='td-module-thumb']/a/@title")
link = card.xpath("div[@class='td-module-thumb']/a/@href")
meta = card.xpath("div[@class='item-details']/div[@class='td-excerpt']")
end
Sim, como já deve ter adivinhado, uma expressão XPath é o que faz o truque, porque estamos à procura de elementos HTML pelos seus nomes de classe e pelos seus ascendentes.