Voilà un bout de code pour faire une requête sur google, récupérer les serp, et parser les pages résultats avec un regex de type IP:PORT ou IP:DOMAIN
Les libs à inclure :
#!/usr/bin/env ruby # encoding: UTF-8 require 'net/http' require 'uri' require 'fileutils' require 'logger' require 'mechanize' require 'nokogiri'
création d’une instance de mechanize qu’on envoi direct sur google pour la requete, et récupération de la première page de serp :
@agent = Mechanize.new do |a| a.user_agent_alias = 'Linux Konqueror' a.max_history = 1 a.log = Logger.new(STDOUT) end
page = @agent.get 'http://www.google.com/' form = page.form_with(:action => '/search') form['q'] = 'keywords du genre free proxy, proxy list, proxies list, ...' page_serps = form.submit
on parse le résultat de la requete avec nokogiri pour obtenir la liste des urls de la premlière page de serps :
urls_array = [] page_serps.parser.xpath('//h3[@class="r"]').take(10).each do |site| urls_array << URI::extract( site.to_s, [ 'http' ] ) end
pour chacune des urls, on visite la page et on extrait les blocs de texte pur :
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}$'
urls_array.each |test_url| response = Net::HTTP.get_response( URI.parse( test_url ) ) doc = Nokogiri::HTML(response.body) res = doc.xpath("//text()").text
pour chacun des blocs de texte récupéré, on test l’occurence du regex de type IP:PORT ou IP:DOMAIN :
res.each do |part| part.split(" ").each do |sub_part| if sub_part.match(regex_domain_port) || sub_part.match(regex_domain_port) puts sub_part.match(regex_domain_port) puts sub_part.match(regex_domain_port) end end end
voilà 🙂
j’espère que ca vous aura plu