tuto – ruby – mechanize

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

Post navigation