Publié le 18 Aug 2013
Pour ne pas se faire refouler par Google quand on lui envoie trop de requêtes en automatique, il est important de se munir de proxies. Mais encore faut-il qu'ils soient valides ! Qu'ils soient publics ou privés, l'important, c'est donc de pouvoir tester leur validité avant d'entamer toute action de scraping.
Je vous propose donc un nouveau petit script Ruby, qui à partir, d'un array de proxies, vérifie s'ils sont valides Google ou non. Ce script utilise la librairie Net::HTTP, pensez donc à ajouter ceci en début de fichier.
#!/usr/bin/env ruby
require 'net/http'
Commencez par définir une variable contenant vos proxies. Par exemple :
proxies = ["1.179.147.2:8080","1.93.21.147:2222","100.45.50.131:8080","101.109.251.140:80","101.109.251.140:8080"]
Voici ensuite la méthode utilisée (que j'ai nommée connectable), commentée pas à pas :
def connectable(array)
# on crée un array vide qui nous servira à collecter les proxies valides
results = Array.new(0)
# on définit un block à partir de l'array
array.each do |proxy|
# on découpe le proxy avec ":"
# on crée ainsi les variables host et port à partir des deux éléments
host, port = proxy.split(':')
# on démarre un block begin/end
begin
# on crée un nouvel objet HTTP utilisant les paramètres du proxy
# la session n'est pas encore ouverte
http = Net::HTTP::Proxy(host, port).new('www.google.fr')
# on définit un timeout de 0,5 secondes pour la connexion
http.open_timeout = 0.5
# on définit un timeout de 0,5 secondes pour le chargement
http.read_timeout = 0.5
# on ouvre la session avec la méthode start
http.start do |connect|
# on récupère la réponse HTTP d'une requête "site:example.com" sur Google
response = connect.head('/search?safe=off&hl=fr&q=site:example.com')
# on définit un comportement spécifique en fonction de la réponse
case response
# si le code retour apartient à la classe Net::HTTPOK (code 200)
when Net::HTTPOK
# on stocke le proxy utilisé dans l'array results
results << proxy
end
end
rescue
# si la connexion est impossible, on retourne nil
nil
end
end
# on affiche les proxies valides dans la console
puts results
end
Concrètement, l'objectif est d'ouvrir une connexion sur www.google.fr, en passant à travers chaque proxy de l'array, puis d'effectuer une requête assez “sensible” en utilisant la commande “site:”. Si le code réponse renvoyé par Google est 200, le proxy est considéré valide donc on le stocke, sinon on passe au suivant.
Libre à vous de jouer sur les temps de timeout en fonction de votre tolérance aux performances des proxies. Pour améliorer ce script, vous pouvez également exporter le tout dans un fichier CSV.
Pour exécuter la méthode, ajoutez simplement à la fin de votre fichier .rb :
connectable(proxies)
A vous de jouer !
comments powered by Disqus