Nokogiri est une librairie ruby qui permet de parser du contenu html (ainsi que du xml accessoirement).
on débute le code avec les libs :
require 'mechanize' require 'nokogiri'
instance mechanize pour avoir notre petit robot simple :
@agent = Mechanize.new do |a| a.user_agent_alias = 'Mac Safari' a.max_history = 1 a.read_timeout = 5 a.keep_alive = false end
on récupère l’url que l’on souhaite
page = @agent.get url
et on parse simplement le code html (ici on récupère tous les H1)
doc = Nokogiri::HTML::DocumentFragment.parse(page.body) puts doc.search('h1').map { |n| n.inner_text }
On peut coupler nokogiri avec la librairie standard mechanize pour récupèrer la balise description
puts page.at('meta[@name="description"]')[:content]
une autre astuce sympa avec nokogiri, parser la page web et tester la présence d’expressions régulières, ici des regex de type « ip:port » ou « domaine:port » :
lst_proxy = [] regex_ip_port = '\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?:?[0-9]{0,5})\b' regex_domain_port = '^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}:[0-9]{0,5}$' doc = Nokogiri::HTML(page.body) res = doc.xpath("//text()").text res.each do |part| temp_part = part.split(" ") temp_part.each do |sub_part| if sub_part.match(regex_domain_port) puts sub_par lst_proxy << sub_part elsif sub_part.match(regex_ip_port) puts sub_part lst_proxy << sub_part end end end