Présentée par Chenghua LIANG Encadrée par J. Gest et G. Leroy
#nwxtech7 Sébastien Gest - Web scraping avec Mechanize et Selenium
-
Upload
normandie-web-xperts -
Category
Technology
-
view
26 -
download
1
Transcript of #nwxtech7 Sébastien Gest - Web scraping avec Mechanize et Selenium
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.
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. »
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