SlideShare une entreprise Scribd logo
Scrapez facilement et
gratuitement
Teknseo 2018 – Madeline Pinthon
Pourquoi scraper des données ?
- Suivi de positions : scraper les résultats de google
- Recetter un site : scraper des éléments d’un site pour voir s’ils sont en place
- Récupérer des mots clés : scraper le menu, le contenu, etc.
Level 0 : des outils clés en main
Skrapp
Avantages
Fait le boulot : trouver des emails sur linkedin
Défauts
Version gratuite assez limitée
Inscription au service obligatoire
Import.io, dexi, parsehub, scrapinghub
Avantages
Fait le boulot
Facile d’utilisation (point and click)
Défauts
Version gratuite assez limitée
Inscription au service obligatoire
Import.io, dexi, parsehub, scrapinghub
Avantages
Fait le boulot
Facile d’utilisation (point and click)
Défauts
Version gratuite assez limitée
Inscription au service obligatoire
La problématique
Industriel
Gratuit Facile
(sans code)
Il faut
coder
Petits volumes
Il faut
payer
Les différents niveaux
1. Extraire les données d’une page
2. Extraire les données sur plusieurs pages
3. Industrialiser : traiter des gros volumes
Level 1 :
scraper des éléments d’une page
Extraire les données d’une page
Quelques outils :
▪ Scrape similar (scraper), un addon chrome:
https://chrome.google.com/webstore/detail/mbigbapnjcgaffohmbkdlecacce
pngjd
▪ Xpath helper :
https://chrome.google.com/webstore/detail/hgimnogjllphhhkhlmebbmlgjoejd
pjl
▪ Chrome dev tools
Scraper (scrap similar)
Scraper (scrape similar)
Avantages
 Ultra facile d’utilisation
 Possibilité de personnaliser les requêtes
avec le xpath
 Mémoriser les requetes
Défauts
 Page par page
 Uniquement sur chrome
DEMO SCRAPER
Je veux obtenir la filmographie
d’Albert Dupontel (acteur).
https://www.imdb.com/name/nm0
243355/?ref_=ttfc_fc_cl_t1
DEMO SCRAPER
DEMO SCRAPER - Résultats
DEMO SCRAPER - Résultats
Comprendre le xpath
Scraper donne :
// div[2] / div / b / a
Ce qui se traduit par :
Les balises a, dans une balise b, dans une balise div, dans (à partir de) la 2e div
Comprendre le xpath
Scraper donne :
// div[2] / div / b / a
Ce qui se traduit par :
Les balises a, dans une balise b, dans une balise div, dans (à partir de) la 2e div
Le html
Le html
Un arbre avec des noeuds
div
div
bspan
ph1
a
div
body
// div
Le html
div
div
bspan
ph1
a
div
body
// div[2]
Le html
div
div
bspan
ph1
a
div
body
// div[2] / div
Le html
div
div
bspan
ph1
a
div
body
// div[2] / div / b
Le html
div
div
bspan
ph1
a
div
body
// div[2] / div / b / a
Le html
div
div
bspan
ph1
a
div
body
Sélectionner les nœuds
 Un nœud : un élément, un attribut, un commentaire, du texte,….
nodename Tous les noeuds avec le nom “nodename”
/ Sélectionne depuis le noeud racine
// Sélectionne tous les noeuds dans le document depuis le noeud
demandé, peu importe leur emplacement dans le document
. Sélectionne le nœud courant
.. Sélectionne le parent du noeud courant
@ Sélectionne un attribut
Exemples simples
 /html/head/title
 //title
 //meta/@content
 //a
 //a/@href
 //h1
Les axes
ancestor Sélectionne les ascendants (parent, grandparent, etc.) du noeud courant
ancestor-or-self Sélectionne les ascendants et le noeud courant
attribute Sélectionne tous les attributs du noeud courant
child Sélectionne tous les enfants du noeud courant
descendant Sélectionne tous les descendants (enfants, petits enfants,…) du noeud courant
descendant-or-self Sélectionne les descendants et le noeud courant
following Sélectionne tout ce qui est après la balise fermante du noeud courant
following-sibling Sélectionne tous les frères/soeurs après le noeud
parent Sélectionne les parents du noeud
preceding Séletionne tous les noeuds qui apparaissent avant le noeud courrant, sauf les ascendants, les
attributs et les namespaces.
preceding-sibling Sélectionne tous les frères/soeurs avant le noeud
self Selectionne le nœud courant
Exemples
 /descendant-or-self::div
=> //div
 /descendant-or-self::div/child::div/child::b/child::a
=> // div / div / b / a
Les prédicats
/bookstore/book[1] Sélectionne le premier élément book qui est dans l’élément bookstore
/bookstore/book[last()] Sélectionne le dernier élément book qui est dans l’élément bookstore
/bookstore/book[last()-1] Sélectionne l’avant-dernier élément book qui est dans l’élément
bookstore
/bookstore/book[position()<3] Sélectionne les 2 premiers éléments book qui sont dans l’élément
bookstore
//title[@lang] Sélectionne tous les title qui ont un attribut lang
//title[@lang='en'] Sélectionne tous les title qui ont un attribut lang dont la valeur est égale à
"en"
/bookstore/book[price>35.00] Sélectionne tous les éléments book dont l’attribute prix est strictement
inférieur à 35 qui sont dans l’élément bookstore
/bookstore/book[price>35.00]/title Sélectionne tous les éléments title qui sot dans les éléments book qui ont
un attribute prix inférieur à 35, qui sont dans l’élément bookstore
@ : les attributs
//div[@id=‘toto’]
 Tous les div avec un attribut id = toto
//*[@itemprop]
 Tous les éléments qui ont un attribut itemprop
//a/@href
 tous les attributs href des balises a
//a[@rel=‘nofollow’]/@href
 tous les attributs @href des éléments a ayant un attribut rel = nofollow
Les opérateurs
Operator Description Example
| Demande 2 élements (ET) //book | //cd
+ Addition 6 + 4
- soustraction 6 - 4
* Multiplication 6 * 4
div Division 8 div 4
= Egal à price=9.80
!= Différent de price!=9.80
< Inférieur à price<9.80
<= Inférieur ou égal à price<=9.80
> Supérieur à price>9.80
>= Supérieur ou égal à price>=9.80
or ou price=9.80 or price=9.70
and Et price>9.00 and price<9.90
mod modulo 5 mod 2
Les fonctions
concat Concatène les chaines
starts-with Vérifie si la chaine commence par
contains Vérifie si la chaine contient
ends-with Vérifie si la chaine ermine par
string-join Joindre des chaines de caractères
last() Sélectionne le dernier
position() Sélectionne la position
count() Compte le nombre d’éléments
not Qui est l’inverse de
replace substitue
match Vérifie si la chaine correspond à l’expression régulière
Exemples
 //*[@class='filmo-category-section']
 //div[starts-with(@id,'actor-tt')]
 //div[contains(@id,'actor-tt’)]
 //a[not(@rel=‘nofollow’)]/@href
Le xpath : en résumé
// = tous les
[ ] : prédicat, permet d’affiner la sélection
@ : attribut
+ quelques fonctions (contains, count, position,…)
Antisèche
http://scraping.pro/res/xpath-
cheat/xpath_css_dom_ref.pdf
Tester avec xpath helper
Demo Xpath Helper
Ctrl + maj = sélectionner un élement
Xpath helper : tester les requêtes
Sans plugin : les outils de dev
Dans la console chrome
$x("expression xpath")
$x("//div[starts-with(@id,'actor-tt')]")
Level 2 :
scraper une liste de pages
Web scraper
Web scraper
Avantages :
 Très facile d’utilisation
 Multipages
 Éléments dynamiques
 Export csv
 Un bon outil de fainéant
 Sélecteurs css
Défauts
 Pas de xpath
DEMO Web Scraper : google maps
Je veux scraper les résultats de google maps
DEMO Web Scraper : google maps
Je sélectionne chaque brique de résultat
(éléments, et multiple)
DEMO Web Scraper : google maps
Une par une, je sélectionne chaque information du bloc, qui m’intéresse.
(Texte)
DEMO Web Scraper : google maps
Je lance le scrape
DEMO Web Scraper : google maps
DEMO Web Scraper : google maps
DEMO Web Scraper : google maps
J’utilise le meme scraper pour d’autres types de résultats
DEMO WEB SCRAPER : suivre les liens
Je veux scraper la filmographie d’albert dupontel + tout le casting des films dans lesquels il a joué
https://www.imdb.com/name/nm0243355/?ref_=ttfc_fc_cl_t1
DEMO WEB SCRAPER : suivre les liens
DEMO WEB SCRAPER : suivre les liens
 Sur chaque page film, récupérer différents éléments.
DEMO WEB SCRAPER : suivre les liens
imacro
https://chrome.google.com/webstore/detail/imacros-for-
chrome/cplklnmnlbnpmjogncfgfijoopmnlemp?hl=fr
imacro
 Avantages
• Multi navigateurs
• Récursivité
 Défauts
• Le gratuit est plus limité
• Incompatible avec la derniere version
de FF
Imacro pour scraper les PAA
VERSION BUILD=1002 RECORDER=CR
'URL
GOTO=https://www.google.fr/search?q=comment+faire+une+mayonnaise&oq=comment+faire+u
ne+mayonnaise
SET !LOOP 1
TAG POS={{!loop}} TYPE=DIV ATTR=CLASS:aCBg7&&TXT:
WAIT SECONDS=2
TAG XPATH="//div[@decode-data-ved][{{!loop}}]/div[1]" EXTRACT=TXT
TAG XPATH="//div[@decode-data-ved][{{!loop}}]/div[2]" EXTRACT=TXT
Xidel
 http://www.videlibri.de/xidel.html#home
Xidel
Avantages :
 Multiples sélecteurs
 Compatible xpath 3.0
 Peut s’intégrer dans des scripts
 Simple et puissant
Défauts
 Pas très user friendly
 Ligne de commande (pas de rendu JS)
Exemple : extraire les urls à partir d’un index de sitemap
 xidel https://www.washingtonpost.com/news-sitemap-index.xml -f « //loc » -e « //loc » > url.txt
Extraire les titres des résultats de google
 xidel http://www.google.de/search?q=test --follow "//a/extract(@href, 'url[?]q=([^&]+)&', 1)[. !=
'']" --extract //title --download '{$host}/'
Level 3 : industrialisation
Les outils
Utiliser les crawlers existants :
- Screaming frog
- Botify (ne supporte pas le xpath dans les champs personnalisés
- Mnogosearch
- …
Créer son propre crawler
(en partant d’un framework existant)
Scrapy
Avantages
Asynchrone
Crawler : logique de crawl + nettoyage +
stockage des données
Compatible avec d’autres modules python
(beautiful soup)
Défauts :
Plusieurs modules à installer
Connaître le python
Fonctionnement de Scrapy
Les composants principaux
▪ Projet : structure globale
▪ Spider : Correspond à la logique de crawl et d’extraction (penser en général un spider = un
site web)
▪ Spidermiddleware : prépare/filtre les requêtes avant envoi au scheduler (referer, longueur de
l’url maximum, depth)
▪ Scheduler : reçoit les urls récupérés, canonicalise, vérifie les urls déjà scrapés, programmes les
prochains urls à scraper
▪ Downloader middleware : gestion des cookies, des redirections, des erreurs http
▪ Items : stockage temporaires des données scrapées (penser un item = une ligne d’un csv)
▪ Itemloader : Nettoyage des données scrapées (suppression des espaces, conversion des
devises)
▪ Pipeline : stockage des données finales : JSON, JSONlines, XML, DB, amazon S3
Ya plus qu’à…
@razbithume
Scrapez facilement et gratuitement

Contenu connexe

Tendances

Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
Abdoulaye Dieng
 
Ce bon vieux propel
Ce bon vieux propelCe bon vieux propel
Ce bon vieux propel
Francois Zaninotto
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
MICHRAFY MUSTAFA
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
halleck45
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
Abdoulaye Dieng
 
Introduction à ajax
Introduction à ajaxIntroduction à ajax
Introduction à ajax
Abdoulaye Dieng
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
Abdelouahed Abdou
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
Abdoulaye Dieng
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Olivier Le Goaër
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
Abdoulaye Dieng
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
halleck45
 

Tendances (15)

Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Ce bon vieux propel
Ce bon vieux propelCe bon vieux propel
Ce bon vieux propel
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Introduction à ajax
Introduction à ajaxIntroduction à ajax
Introduction à ajax
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Cours php
Cours phpCours php
Cours php
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Javascript
JavascriptJavascript
Javascript
 

Similaire à Scrapez facilement et gratuitement

Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
Gregory Renard
 
Utilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérienceUtilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérience
louschwartz
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
svuillet
 
Comment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleurComment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleur
David Paccoud
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
Mathieu Goeminne
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
Jaouad Rachek
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
Martin Latrille
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
Club Scientifique de l'ESI - CSE
 
Langage HTML - Fondamentaux et ateliers
Langage HTML - Fondamentaux et ateliersLangage HTML - Fondamentaux et ateliers
Langage HTML - Fondamentaux et ateliers
Frédéric Simonet
 
Apache ANT
Apache ANTApache ANT
Apache ANT
le.genie.logiciel
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
Damien Seguy
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
Paris Salesforce Developer Group
 
JQuery
JQueryJQuery
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
MICHRAFY MUSTAFA
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
coursuniv
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
ssuser65180a
 

Similaire à Scrapez facilement et gratuitement (20)

Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Utilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérienceUtilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérience
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Comment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleurComment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleur
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
 
22410 b 04
22410 b 0422410 b 04
22410 b 04
 
Tapestry
TapestryTapestry
Tapestry
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Langage HTML - Fondamentaux et ateliers
Langage HTML - Fondamentaux et ateliersLangage HTML - Fondamentaux et ateliers
Langage HTML - Fondamentaux et ateliers
 
Apache ANT
Apache ANTApache ANT
Apache ANT
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
JQuery
JQueryJQuery
JQuery
 
Vs2008 Linq
Vs2008 LinqVs2008 Linq
Vs2008 Linq
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
 

Plus de Madeline Pinthon

Looker Studio - trucs et astuces pour améliorer ses dashboards
Looker Studio - trucs et astuces pour améliorer ses dashboardsLooker Studio - trucs et astuces pour améliorer ses dashboards
Looker Studio - trucs et astuces pour améliorer ses dashboards
Madeline Pinthon
 
Webperf : par où commencer ? - SEOGoodVibes
Webperf : par où commencer ? - SEOGoodVibesWebperf : par où commencer ? - SEOGoodVibes
Webperf : par où commencer ? - SEOGoodVibes
Madeline Pinthon
 
Guide pour réussir son intégration en Allier
Guide pour réussir son intégration en AllierGuide pour réussir son intégration en Allier
Guide pour réussir son intégration en Allier
Madeline Pinthon
 
Comment mesurer la vitesse des sites ? @ Web2day 2018 Nantes
Comment mesurer la vitesse des sites ? @ Web2day 2018 NantesComment mesurer la vitesse des sites ? @ Web2day 2018 Nantes
Comment mesurer la vitesse des sites ? @ Web2day 2018 Nantes
Madeline Pinthon
 
Seo local - seo-campus 2018
Seo local  - seo-campus 2018Seo local  - seo-campus 2018
Seo local - seo-campus 2018
Madeline Pinthon
 
Optimiser son seo avec google tag manager
Optimiser son seo avec google tag managerOptimiser son seo avec google tag manager
Optimiser son seo avec google tag manager
Madeline Pinthon
 
SMX 2016 seo avec excel et google spreadsheet
SMX 2016   seo avec excel et google spreadsheetSMX 2016   seo avec excel et google spreadsheet
SMX 2016 seo avec excel et google spreadsheet
Madeline Pinthon
 
Analyse de logs par l'exemple - seocampus 2017
Analyse de logs par l'exemple - seocampus 2017Analyse de logs par l'exemple - seocampus 2017
Analyse de logs par l'exemple - seocampus 2017
Madeline Pinthon
 
Scraper avec excel et google spreadsheet - google black day
Scraper avec excel et google spreadsheet - google black dayScraper avec excel et google spreadsheet - google black day
Scraper avec excel et google spreadsheet - google black day
Madeline Pinthon
 
Seocamp2016 : javascript et indexation, où en est-on ?
Seocamp2016 : javascript et indexation, où en est-on ?Seocamp2016 : javascript et indexation, où en est-on ?
Seocamp2016 : javascript et indexation, où en est-on ?
Madeline Pinthon
 

Plus de Madeline Pinthon (10)

Looker Studio - trucs et astuces pour améliorer ses dashboards
Looker Studio - trucs et astuces pour améliorer ses dashboardsLooker Studio - trucs et astuces pour améliorer ses dashboards
Looker Studio - trucs et astuces pour améliorer ses dashboards
 
Webperf : par où commencer ? - SEOGoodVibes
Webperf : par où commencer ? - SEOGoodVibesWebperf : par où commencer ? - SEOGoodVibes
Webperf : par où commencer ? - SEOGoodVibes
 
Guide pour réussir son intégration en Allier
Guide pour réussir son intégration en AllierGuide pour réussir son intégration en Allier
Guide pour réussir son intégration en Allier
 
Comment mesurer la vitesse des sites ? @ Web2day 2018 Nantes
Comment mesurer la vitesse des sites ? @ Web2day 2018 NantesComment mesurer la vitesse des sites ? @ Web2day 2018 Nantes
Comment mesurer la vitesse des sites ? @ Web2day 2018 Nantes
 
Seo local - seo-campus 2018
Seo local  - seo-campus 2018Seo local  - seo-campus 2018
Seo local - seo-campus 2018
 
Optimiser son seo avec google tag manager
Optimiser son seo avec google tag managerOptimiser son seo avec google tag manager
Optimiser son seo avec google tag manager
 
SMX 2016 seo avec excel et google spreadsheet
SMX 2016   seo avec excel et google spreadsheetSMX 2016   seo avec excel et google spreadsheet
SMX 2016 seo avec excel et google spreadsheet
 
Analyse de logs par l'exemple - seocampus 2017
Analyse de logs par l'exemple - seocampus 2017Analyse de logs par l'exemple - seocampus 2017
Analyse de logs par l'exemple - seocampus 2017
 
Scraper avec excel et google spreadsheet - google black day
Scraper avec excel et google spreadsheet - google black dayScraper avec excel et google spreadsheet - google black day
Scraper avec excel et google spreadsheet - google black day
 
Seocamp2016 : javascript et indexation, où en est-on ?
Seocamp2016 : javascript et indexation, où en est-on ?Seocamp2016 : javascript et indexation, où en est-on ?
Seocamp2016 : javascript et indexation, où en est-on ?
 

Dernier

Techno Revo et nations (1789-1848) ).pdf
Techno Revo et nations (1789-1848) ).pdfTechno Revo et nations (1789-1848) ).pdf
Techno Revo et nations (1789-1848) ).pdf
NadineHG
 
1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x
NadineHG
 
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdfMÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
lebaobabbleu
 
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGESGUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
DjibrilToure5
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
Txaruka
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
Editions La Dondaine
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
NadineHG
 
A1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdfA1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdf
lebaobabbleu
 
Compréhension orale La famille de Sophie (12).pdf
Compréhension orale  La famille de Sophie (12).pdfCompréhension orale  La famille de Sophie (12).pdf
Compréhension orale La famille de Sophie (12).pdf
lebaobabbleu
 

Dernier (9)

Techno Revo et nations (1789-1848) ).pdf
Techno Revo et nations (1789-1848) ).pdfTechno Revo et nations (1789-1848) ).pdf
Techno Revo et nations (1789-1848) ).pdf
 
1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x
 
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdfMÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
 
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGESGUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
 
A1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdfA1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdf
 
Compréhension orale La famille de Sophie (12).pdf
Compréhension orale  La famille de Sophie (12).pdfCompréhension orale  La famille de Sophie (12).pdf
Compréhension orale La famille de Sophie (12).pdf
 

Scrapez facilement et gratuitement

  • 1. Scrapez facilement et gratuitement Teknseo 2018 – Madeline Pinthon
  • 2. Pourquoi scraper des données ? - Suivi de positions : scraper les résultats de google - Recetter un site : scraper des éléments d’un site pour voir s’ils sont en place - Récupérer des mots clés : scraper le menu, le contenu, etc.
  • 3. Level 0 : des outils clés en main
  • 4. Skrapp Avantages Fait le boulot : trouver des emails sur linkedin Défauts Version gratuite assez limitée Inscription au service obligatoire
  • 5. Import.io, dexi, parsehub, scrapinghub Avantages Fait le boulot Facile d’utilisation (point and click) Défauts Version gratuite assez limitée Inscription au service obligatoire
  • 6. Import.io, dexi, parsehub, scrapinghub Avantages Fait le boulot Facile d’utilisation (point and click) Défauts Version gratuite assez limitée Inscription au service obligatoire
  • 7. La problématique Industriel Gratuit Facile (sans code) Il faut coder Petits volumes Il faut payer
  • 8. Les différents niveaux 1. Extraire les données d’une page 2. Extraire les données sur plusieurs pages 3. Industrialiser : traiter des gros volumes
  • 9. Level 1 : scraper des éléments d’une page
  • 10. Extraire les données d’une page Quelques outils : ▪ Scrape similar (scraper), un addon chrome: https://chrome.google.com/webstore/detail/mbigbapnjcgaffohmbkdlecacce pngjd ▪ Xpath helper : https://chrome.google.com/webstore/detail/hgimnogjllphhhkhlmebbmlgjoejd pjl ▪ Chrome dev tools
  • 12. Scraper (scrape similar) Avantages  Ultra facile d’utilisation  Possibilité de personnaliser les requêtes avec le xpath  Mémoriser les requetes Défauts  Page par page  Uniquement sur chrome
  • 13. DEMO SCRAPER Je veux obtenir la filmographie d’Albert Dupontel (acteur). https://www.imdb.com/name/nm0 243355/?ref_=ttfc_fc_cl_t1
  • 15. DEMO SCRAPER - Résultats
  • 16. DEMO SCRAPER - Résultats
  • 17. Comprendre le xpath Scraper donne : // div[2] / div / b / a Ce qui se traduit par : Les balises a, dans une balise b, dans une balise div, dans (à partir de) la 2e div
  • 18. Comprendre le xpath Scraper donne : // div[2] / div / b / a Ce qui se traduit par : Les balises a, dans une balise b, dans une balise div, dans (à partir de) la 2e div
  • 20. Le html Un arbre avec des noeuds div div bspan ph1 a div body
  • 23. // div[2] / div Le html div div bspan ph1 a div body
  • 24. // div[2] / div / b Le html div div bspan ph1 a div body
  • 25. // div[2] / div / b / a Le html div div bspan ph1 a div body
  • 26. Sélectionner les nœuds  Un nœud : un élément, un attribut, un commentaire, du texte,…. nodename Tous les noeuds avec le nom “nodename” / Sélectionne depuis le noeud racine // Sélectionne tous les noeuds dans le document depuis le noeud demandé, peu importe leur emplacement dans le document . Sélectionne le nœud courant .. Sélectionne le parent du noeud courant @ Sélectionne un attribut
  • 27. Exemples simples  /html/head/title  //title  //meta/@content  //a  //a/@href  //h1
  • 28. Les axes ancestor Sélectionne les ascendants (parent, grandparent, etc.) du noeud courant ancestor-or-self Sélectionne les ascendants et le noeud courant attribute Sélectionne tous les attributs du noeud courant child Sélectionne tous les enfants du noeud courant descendant Sélectionne tous les descendants (enfants, petits enfants,…) du noeud courant descendant-or-self Sélectionne les descendants et le noeud courant following Sélectionne tout ce qui est après la balise fermante du noeud courant following-sibling Sélectionne tous les frères/soeurs après le noeud parent Sélectionne les parents du noeud preceding Séletionne tous les noeuds qui apparaissent avant le noeud courrant, sauf les ascendants, les attributs et les namespaces. preceding-sibling Sélectionne tous les frères/soeurs avant le noeud self Selectionne le nœud courant
  • 29. Exemples  /descendant-or-self::div => //div  /descendant-or-self::div/child::div/child::b/child::a => // div / div / b / a
  • 30. Les prédicats /bookstore/book[1] Sélectionne le premier élément book qui est dans l’élément bookstore /bookstore/book[last()] Sélectionne le dernier élément book qui est dans l’élément bookstore /bookstore/book[last()-1] Sélectionne l’avant-dernier élément book qui est dans l’élément bookstore /bookstore/book[position()<3] Sélectionne les 2 premiers éléments book qui sont dans l’élément bookstore //title[@lang] Sélectionne tous les title qui ont un attribut lang //title[@lang='en'] Sélectionne tous les title qui ont un attribut lang dont la valeur est égale à "en" /bookstore/book[price>35.00] Sélectionne tous les éléments book dont l’attribute prix est strictement inférieur à 35 qui sont dans l’élément bookstore /bookstore/book[price>35.00]/title Sélectionne tous les éléments title qui sot dans les éléments book qui ont un attribute prix inférieur à 35, qui sont dans l’élément bookstore
  • 31. @ : les attributs //div[@id=‘toto’]  Tous les div avec un attribut id = toto //*[@itemprop]  Tous les éléments qui ont un attribut itemprop //a/@href  tous les attributs href des balises a //a[@rel=‘nofollow’]/@href  tous les attributs @href des éléments a ayant un attribut rel = nofollow
  • 32. Les opérateurs Operator Description Example | Demande 2 élements (ET) //book | //cd + Addition 6 + 4 - soustraction 6 - 4 * Multiplication 6 * 4 div Division 8 div 4 = Egal à price=9.80 != Différent de price!=9.80 < Inférieur à price<9.80 <= Inférieur ou égal à price<=9.80 > Supérieur à price>9.80 >= Supérieur ou égal à price>=9.80 or ou price=9.80 or price=9.70 and Et price>9.00 and price<9.90 mod modulo 5 mod 2
  • 33. Les fonctions concat Concatène les chaines starts-with Vérifie si la chaine commence par contains Vérifie si la chaine contient ends-with Vérifie si la chaine ermine par string-join Joindre des chaines de caractères last() Sélectionne le dernier position() Sélectionne la position count() Compte le nombre d’éléments not Qui est l’inverse de replace substitue match Vérifie si la chaine correspond à l’expression régulière
  • 34. Exemples  //*[@class='filmo-category-section']  //div[starts-with(@id,'actor-tt')]  //div[contains(@id,'actor-tt’)]  //a[not(@rel=‘nofollow’)]/@href
  • 35. Le xpath : en résumé // = tous les [ ] : prédicat, permet d’affiner la sélection @ : attribut + quelques fonctions (contains, count, position,…)
  • 38. Demo Xpath Helper Ctrl + maj = sélectionner un élement
  • 39. Xpath helper : tester les requêtes
  • 40. Sans plugin : les outils de dev
  • 41. Dans la console chrome $x("expression xpath") $x("//div[starts-with(@id,'actor-tt')]")
  • 42. Level 2 : scraper une liste de pages
  • 44. Web scraper Avantages :  Très facile d’utilisation  Multipages  Éléments dynamiques  Export csv  Un bon outil de fainéant  Sélecteurs css Défauts  Pas de xpath
  • 45. DEMO Web Scraper : google maps Je veux scraper les résultats de google maps
  • 46. DEMO Web Scraper : google maps Je sélectionne chaque brique de résultat (éléments, et multiple)
  • 47. DEMO Web Scraper : google maps Une par une, je sélectionne chaque information du bloc, qui m’intéresse. (Texte)
  • 48. DEMO Web Scraper : google maps Je lance le scrape
  • 49. DEMO Web Scraper : google maps
  • 50. DEMO Web Scraper : google maps
  • 51. DEMO Web Scraper : google maps J’utilise le meme scraper pour d’autres types de résultats
  • 52. DEMO WEB SCRAPER : suivre les liens Je veux scraper la filmographie d’albert dupontel + tout le casting des films dans lesquels il a joué https://www.imdb.com/name/nm0243355/?ref_=ttfc_fc_cl_t1
  • 53. DEMO WEB SCRAPER : suivre les liens
  • 54. DEMO WEB SCRAPER : suivre les liens  Sur chaque page film, récupérer différents éléments.
  • 55. DEMO WEB SCRAPER : suivre les liens
  • 57. imacro  Avantages • Multi navigateurs • Récursivité  Défauts • Le gratuit est plus limité • Incompatible avec la derniere version de FF
  • 58. Imacro pour scraper les PAA VERSION BUILD=1002 RECORDER=CR 'URL GOTO=https://www.google.fr/search?q=comment+faire+une+mayonnaise&oq=comment+faire+u ne+mayonnaise SET !LOOP 1 TAG POS={{!loop}} TYPE=DIV ATTR=CLASS:aCBg7&&TXT: WAIT SECONDS=2 TAG XPATH="//div[@decode-data-ved][{{!loop}}]/div[1]" EXTRACT=TXT TAG XPATH="//div[@decode-data-ved][{{!loop}}]/div[2]" EXTRACT=TXT
  • 60. Xidel Avantages :  Multiples sélecteurs  Compatible xpath 3.0  Peut s’intégrer dans des scripts  Simple et puissant Défauts  Pas très user friendly  Ligne de commande (pas de rendu JS)
  • 61. Exemple : extraire les urls à partir d’un index de sitemap  xidel https://www.washingtonpost.com/news-sitemap-index.xml -f « //loc » -e « //loc » > url.txt Extraire les titres des résultats de google  xidel http://www.google.de/search?q=test --follow "//a/extract(@href, 'url[?]q=([^&]+)&', 1)[. != '']" --extract //title --download '{$host}/'
  • 62. Level 3 : industrialisation
  • 63. Les outils Utiliser les crawlers existants : - Screaming frog - Botify (ne supporte pas le xpath dans les champs personnalisés - Mnogosearch - … Créer son propre crawler (en partant d’un framework existant)
  • 64. Scrapy Avantages Asynchrone Crawler : logique de crawl + nettoyage + stockage des données Compatible avec d’autres modules python (beautiful soup) Défauts : Plusieurs modules à installer Connaître le python
  • 66. Les composants principaux ▪ Projet : structure globale ▪ Spider : Correspond à la logique de crawl et d’extraction (penser en général un spider = un site web) ▪ Spidermiddleware : prépare/filtre les requêtes avant envoi au scheduler (referer, longueur de l’url maximum, depth) ▪ Scheduler : reçoit les urls récupérés, canonicalise, vérifie les urls déjà scrapés, programmes les prochains urls à scraper ▪ Downloader middleware : gestion des cookies, des redirections, des erreurs http ▪ Items : stockage temporaires des données scrapées (penser un item = une ligne d’un csv) ▪ Itemloader : Nettoyage des données scrapées (suppression des espaces, conversion des devises) ▪ Pipeline : stockage des données finales : JSON, JSONlines, XML, DB, amazon S3