lundi 22 juin 2015

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://ift.tt/1BGmJr5
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 CONTENT=ipsum@about.me
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://ift.tt/1CnECpq;,
        "http://ift.tt/1CnEAOp;,
        "http://ift.tt/1CnECpu;,
        "http://ift.tt/1CnEAOr;,
        "http://ift.tt/1BGmM6g;,
        "http://ift.tt/1CnECFK;,
        "http://ift.tt/1BGmM6i;,
        "http://ift.tt/1CnECFS;,
        "http://ift.tt/1CnECFU;,
        "http://ift.tt/1CnECFY;

];


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.


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1BGmM6q
via IFTTT

Aucun commentaire:

Enregistrer un commentaire