#nwxtech7 sébastien gest - web scraping avec mechanize et selenium

16
I Wb Srpp v M S #NwT7 – Mrr 12 Mr 2014 Sb G – www.wb.fr - @wb.fr - @rr

Upload: normandie-web-xperts

Post on 31-Jul-2015

26 views

Category:

Technology


1 download

TRANSCRIPT

Initiation au Web Scrapping avec Mechan+e et Selenium

#NwxTech7 – Mercredi 12 Mars 2014

Séb2tien G3t – www.webandcaux.fr - [email protected] - @drumsgreen

« Technique d’extraction de contenu d’une page

internet au travers d’un script ou d’un programme

dans le but de transformer les données pour en

permettre l’utilisation dans un autre contexte. »

« Technique d’extraction de contenu d’une page

internet au travers d’un script ou d’un programme

dans le but de transformer les données pour en

permettre l’utilisation dans un autre contexte. »

Le Web Scrapping n’3t p2 uniquement de l’4traction !

- Envoi de donnée GET/POST/PUT/DELETE. - Vol de librairies, scripts js, feuilles css.

-  Extraction et modication du code source. - Screenshot des pages.

« Technique d’extraction de contenu d’une page

internet au travers d’un script ou d’un programme

dans le but de transformer les données pour en

permettre l’utilisation dans un autre contexte. »

Le Web Scrapping n’3t p2 uniquement de l’4traction !

- Envoi de donnée GET/POST/PUT/DELETE. - Vol de librairies, scripts js, feuilles css.

-  Extraction et modication du code source. - Screenshot des pages.

Qui util5e le Web Scrapping ?

Comparateur de pr6 de supermarché Voyag5te Site de rencontr3

Simple à installer : cpan install WWW:Mechanize ou apt‐get install libwww‐mechanize‐perl 

Existe dans plusieurs langages : Perl, Ruby, Python etc ... 

Simple à coder : 

my $mech = WWW::Mechanize‐>new(); # InstanciaJon de mon objet mechanize 

my $search_url =  ‘hNp://monsitecible.com’; # IniJalisaJon de l’adresse dans une variable 

$mech‐>get($search_url); # Requête HTTP GET my  $content = $mech‐>content(); # RécupéraJon du code source 

Configurable : 

My $mech = WWW::Mechanize‐>new({ agent => Mozilla/5.0, #Se]ng de l’user agent  

                                                                        cookie_jar => {}, #Mise en cache du cookie dans une hash 

}); 

User agent :  Windows IE 6, Windows Mozilla, Mac Safari, Mac Mozilla, 

Linux Mozilla, Linux Konqueror. 

Google Tags « inurl » « terms »

WWW:Mechan+e

wget

my $mech = WWW::Mechanize‐>new(); # InstanciaJon de mon objet mechanize 

my $search_url =  ‘hNp://monsitecible.com’; # IniJalisaJon de l’adresse dans une variable 

$mech‐>get($search_url); # Requête HTTP GET 

my  $content = $mech‐>content(); # RécupéraJon du code source 

# Découpage de chaque ligne dans un tableau       

my @codes = split(/\n/,$content); 

# CréaJon d’un tableau vide 

my @links; 

# Parsing du code 

foreach my $code (@codes){    

    if($code=~/\<A HREF="(.*)\.mp3"\>/i){       

          my $mp3 = $1;        

          $mp3=~s/\n//;        

          $mp3=~s/\s//;         

           push(@links,$mp3);     

}} 

# ConsolidaJon du code 

foreach my $mp (@links){     

     my $file = "$search_url$mp.mp3\n";     

    `wget ‐O $mp.mp3  $file`; 

‐ RécupéraJon des codes hNp : $mech‐>status(); 

‐ AuthenJficaJon simple : $mech‐>credenJals($login,$password); 

‐ RécupéraJon du texte de la page : $mech‐>text(); ‐ RécupéraJon du Jtre de la page : $mech‐>Jtle(); 

‐ RécupéraJon de la liste des liens de la page : $mech‐>links(); 

Ma5, Mechan+e ne gère p2 le jav2cript : « Here's another approach that answers the quesJon, "It works in Firefox, but why not Mech?" 

Everything the web server knows about the client is present in the HTTP request. If two requests are 

idenJcal, the results should be idenJcal. So the real quesJon is "What is different between the mech 

request and the Firefox request?"The Firefox extension "Tamper Data" is an effecJve tool for 

examining the headers of the requests to the server. Compare that with what LWP is sending. Once 

the two are idenJcal, the acJon of the server should be the same as well.I say "should", because this 

is an oversimplificaJon ‐ some values are naturally unique, e.g. a SessionID, but if a SessionID is 

present, that is probably sufficient, even though the value will be different between the LWP request 

and the Firefox request. The server could use the session to store informaJon which is troublesome, 

but that's not the first place to look (and highly unlikely to be relevant when you are requesJng the 

login page of your site). » 

« Framework de Test Unitaire émulant les principaux

browsers. »

« Framework de Test Unitaire émulant les principaux

browsers. »

Rapport avec Web Scrapping ?

‐ Aucun rapport avec le web scrapping. 

‐  C’est un ouJl graphique != runlevel 2. 

‐  Serveur en java. ‐  OuJl orienté receNe  

« Framework de Test Unitaire émulant les principaux

browsers. »

Rapport avec Web Scrapping ?

‐ Aucun rapport avec le web scrapping. 

‐  C’est un ouJl graphique != runlevel 3. 

‐  Serveur en java. ‐  OuJl orienté receNe  

Oui ma5 !

‐ Librairie Client en Perl,Python,Ruby. 

‐  Selenium gère le javascript. 

‐  Possibilité de buffering avec Xv|.  

use WWW::Selenium;     

my $sel = WWW::Selenium‐>new( host => "localhost",                                   

                                                                          port => 4444,                                  

                                                           browser => "*firefox",                                   

                                                              browser_url => $url,                                 

                                                      hNp_method => "POST" );     

$sel‐>start;    $sel‐>open($url);           

$sel‐>type("username", $username);     

$sel‐>type("password", $password);      

$sel‐>click("goto");     

$sel‐>set_speed(500);     

$sel‐>wait_for_page_to_load(10000);     

my $page = $sel‐>get_html_source;     

my $v = split(/\n/,$page);          

if($page=~/MAC Address/i){              

          if($page=~/<span class="text1">(.*) <\/span>/i){                 

                   print "ADRESSE MAC $1\n";               

          }        

$sel‐>stop;        

Point de vue légal : En noJfiant vos visiteurs dans le CondiJon Général d’UJlisaJon 

Technique : 

     

                  Le « honeypot » 

                  UJlisaJon de css sprite 

                  Interdire certains user agent 

                  Bannir les ip si le temps de visite est trop rapide 

Merci !

Contact :

SébasJen GEST 

TwiNer : @drumsgreen 

Email : [email protected] 

Web  : www.webandcaux.fr