Annonce

Réduire
Aucune annonce.

[MULTI LANGAGE] En route vers le crawl de l'internet mondial !

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Tutoriel [MULTI LANGAGE] En route vers le crawl de l'internet mondial !

    Bonjour à tous, suite à la lecture de ce topic. J'ai put constater que bon nombre de personne était interessé par la création de robot pouvant interagir avec des sites internets.

    Je vais aborder quelques outils que j'ai put soit voir soit utilisé :

    Les plugins navigateurs :
    * Niveau novice :
    * iMacro

    iMacro se présente sous forme de Plugin navigateur (Chrome/Firefox) et permet de créer des script .imm avec une suite de commande Basique permettant d'intéragir avec une page. Ces commandes seront traduite et éxécuté en JavaScript au sain de votre navigateur. Voici un exemple basique d'un script iMacro :

    Code:
    VERSION BUILD=8510617 RECORDER=FX
    TAB T=1
    URL GOTO=http://www.presentezvous.com/presentez-vous-infos/les-scripts-imacros-sur-presentezvous-com-pourquoi-et-comment-ca-marche.html
    TAG POS=1 TYPE=INPUT:TEXT FORM=ID:commentform ATTR=ID:author CONTENT=lorem
    TAG POS=1 TYPE=INPUT:TEXT FORM=ID:commentform ATTR=ID:email [email protected]
    TAG POS=1 TYPE=INPUT:TEXT FORM=ID:commentform ATTR=ID:url CONTENT=http://seopower.com
    TAG POS=1 TYPE=TEXTAREA FORM=ID:commentform ATTR=ID:comment CONTENT=lorem<SP>ipsum<SP>para<SP>bellum.
    TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:commentform ATTR=ID:submit
    Les avantages :
    - Facile à prendre en main
    - Mode Clic and build
    - Tout peut ce faire en GUI
    - Les commandes sont simples et la communauté est assez grosse
    - Execution au sein de votre navigateur ce qui le rend peu détectable

    Les inconveniants :
    - On est vite limité par l'outils qui reste très basique
    - Difficile de parcourir un DOM complexe sans ID
    - Peut intéropérable (export en CSV possible ou text)
    - Nécéssite un lancement manuel de votre part
    - Ne peut tourner sur un serveur sans Navigateur


    * Niveau intermediaire :
    * greasemonkey

    GreaseMonkey est un plugin navigateur (Chrome/Firfox) qui permet d'injecter et executer des scrits javascript au sein d'une page. Il embarque un framework maison pour enrichir la bibliotheque javascript native. Il peut biensur vous permette d'injecter d'autre extern library tel que Angular / jQuery / Mootools...

    Tout ce fait en javascript ce qui rend l'outils bien plus flexible que iMacro (voir plus haut).

    Les avantages :
    - Une forte communautée
    - Développement en JavaScript
    - Execution au sein de votre navigateur ce qui le rend peu détectable
    - Bon nombre de tutorial sur le web

    Les inconvéniants :
    - Projet en déclin
    - Peut intéropérable (extraction des données)
    - Nécéssite un lancement manuel de votre part
    - Ne peut tourner sur un serveur sans Navigateur


    Le fait de passer par un langage de programmation va vous apporter des avantages non négligeable :
    - Gain en performance
    - Automatisation
    - Architecture complexe
    - Acces à de puissante library
    - Utilisation automatique de proxy
    - Post et pre traitement
    - Multi source

    En somme vous êtes le maitre du monde !

    * Niveau Avancé :
    PHP
    Si vous souhaitez faire un bot en PHP. Rien de plus simple, il vous suffit de maitriser deux composants essentiels :
    - Curl
    - QueryPath

    Le socle curl :
    Il vous permettra d'intéroger via HTTP un serveur en GET / POST / PUT / DELETE / HEAD / ANYWHERE
    Il vous permettra de passer par un proxy
    Il vous permettra de multi thread vos requêtes (si le langage vous le permet, ce qui n'est pas le cas de PHP)
    Il vous permettra d'envoyer le cookie et donc d'accèder à des zones du site User only
    Bien d'autre avantage...

    Le socle QueryPath :
    Surement le plus intéressant de cette partie, quand vous avez à crawler une page web .. rien de plus pénible que de cibler la partie qui vous interesse... Sauf si vous pouvez le faire avec des selecteurs CSS. Et c'est là que QueryPath interviens. Cette library PHP va vous permettre de parcourir votre DOM en utilisant des selecteur CSS tel que :

    Code:
    //Get pagination on Wordpress website
    public function getListOfPages($qp,$link_pages){
        $pagination = $qp->find("#pagination ol.wp-paginate li a"); // Here you use CSS selector
        foreach($pagination as $li){
            if(!$li->hasClass("next") and !$li->hasClass("prev")) // Some internal fonction of library realy usefull like with jQuery
                $link_pages[] = $li->attr("href");
        }
        return $link_pages;
    }


    JAVASCRIPT
    Vous pouvez biensûr faire un crawler en JavaScript, c'est d'ailleurs la meilleur solution monothread existante et surement la plus discrète.. Une pure merveille !

    GasperJS + PhantomJS

    Il faut commencer par ces deux outils NodeJS permettant initialement de faire des jeux de test de navigation lors du développement d'un site. Cela permet de virtualiser un navigateur et d'en tester le rendu. Outil très puissant et maintenu par les grands major du web, il deviennent de très puissant allier quand on souhaite s'en servir pour faire du crawling.

    Code:
    /*
    	Crawler de proxy sur le site : www.cnproxy.com
    	@author misterPoc
    	@description Crawler De proxy pour le site cnproxy.com, ceci est un proof of concept
    */
    
    var links = [
    	"http://www.cnproxy.com/proxy1.html",
    	"http://www.cnproxy.com/proxy2.html",
    	"http://www.cnproxy.com/proxy3.html",
    	"http://www.cnproxy.com/proxy4.html",
    	"http://www.cnproxy.com/proxy5.html",
    	"http://www.cnproxy.com/proxy6.html",
    	"http://www.cnproxy.com/proxy7.html",
    	"http://www.cnproxy.com/proxy8.html",
    	"http://www.cnproxy.com/proxy9.html",
    	"http://www.cnproxy.com/proxy10.html"
    
    ];
    
    
    var fs = require("fs");
    
    
    var casper = require('casper').create({
        clientScripts: ["jquery.js"],
      verbose: true,
      logLevel: 'debug',
      pageSettings: {
        loadImages: false,
        loadPlugins: true,
        javascriptEnabled: true,
        userAgent: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36'
      }
    });
    
    //Lunch Casper.js
    casper.start();
    var i = 1;
    casper.eachThen(links,function(response){
    	this.thenOpen(response.data, function(response) {
        	console.log('Page : ', response.url); // Debug
    
        	var proxys = this.evaluate(function() {
              	elements = __utils__.findAll('table tr td:first-child');
              	return Array.prototype.map.call(elements, function(e) {
    				return e.textContent.replace(/document\.write\(":"[+|\w]+\)/g,'').replace(/IP:Port/g,'');
    			});
        		
            });
    
    //		console.log(proxys);
    		fs.write("output/proxy/"+i+"/proxyList.json",JSON.stringify(proxys),'w');
    		i++;
      	});
    });
    
    
    
    //let's go !
    casper.run(function(){
    		this.exit();
    });

    Voici ci dessus un script opérationel dont je me sert pour me forger une liste de proxy frais. on commence par créer une instance de Casper avec les différents paramètres que l'on souhaite. J'atire votre attention au niveau de clientScripts qui permet de charger des library JS externe (ici jQuery même si c'est inutile dans notre cas).

    La partie "this.thenOpen" est la partie sandbox où le code sera executé à l'interieur de la page souhaité, nous pouvons donc "this.evaluate" du code au sein de la page et en extraire les information. Ensuite il vous suffit de les stocker quelques parts. Ici un fichier json.


    Python :
    le Framework Scrapy
    - avantage
    - MultiThread (je recommande un thread par proxy)
    - Très gros framework très complet
    - selecteur CSS
    - intéropérable

    Je complèterai cette partie plus tard, je n'ai pas assès de connaissance pour approfondir le sujet.
    ToxID : 7322307290A75F5F36142EF206D95374966F10FE2CCD8224BEC07F16137875058C3BC4020609


    Petite énigme, seriez vous décoder ce code ? WW4gZXJjYmFmciBoYXZpcmVmcnl5ciA/
Chargement...
X