Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Scrapez facilement et gratuitement

teknseo 2018

  • Identifiez-vous pour voir les commentaires

  • Soyez le premier à aimer ceci

Scrapez facilement et gratuitement

  1. 1. Scrapez facilement et gratuitement Teknseo 2018 – Madeline Pinthon
  2. 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. 3. Level 0 : des outils clés en main
  4. 4. Skrapp Avantages Fait le boulot : trouver des emails sur linkedin Défauts Version gratuite assez limitée Inscription au service obligatoire
  5. 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. 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. 7. La problématique Industriel Gratuit Facile (sans code) Il faut coder Petits volumes Il faut payer
  8. 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. 9. Level 1 : scraper des éléments d’une page
  10. 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
  11. 11. Scraper (scrap similar)
  12. 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. 13. DEMO SCRAPER Je veux obtenir la filmographie d’Albert Dupontel (acteur). https://www.imdb.com/name/nm0 243355/?ref_=ttfc_fc_cl_t1
  14. 14. DEMO SCRAPER
  15. 15. DEMO SCRAPER - Résultats
  16. 16. DEMO SCRAPER - Résultats
  17. 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. 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
  19. 19. Le html
  20. 20. Le html Un arbre avec des noeuds div div bspan ph1 a div body
  21. 21. // div Le html div div bspan ph1 a div body
  22. 22. // div[2] Le html div div bspan ph1 a div body
  23. 23. // div[2] / div Le html div div bspan ph1 a div body
  24. 24. // div[2] / div / b Le html div div bspan ph1 a div body
  25. 25. // div[2] / div / b / a Le html div div bspan ph1 a div body
  26. 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. 27. Exemples simples  /html/head/title  //title  //meta/@content  //a  //a/@href  //h1
  28. 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. 29. Exemples  /descendant-or-self::div => //div  /descendant-or-self::div/child::div/child::b/child::a => // div / div / b / a
  30. 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. 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. 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. 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. 34. Exemples  //*[@class='filmo-category-section']  //div[starts-with(@id,'actor-tt')]  //div[contains(@id,'actor-tt’)]  //a[not(@rel=‘nofollow’)]/@href
  35. 35. Le xpath : en résumé // = tous les [ ] : prédicat, permet d’affiner la sélection @ : attribut + quelques fonctions (contains, count, position,…)
  36. 36. Antisèche http://scraping.pro/res/xpath- cheat/xpath_css_dom_ref.pdf
  37. 37. Tester avec xpath helper
  38. 38. Demo Xpath Helper Ctrl + maj = sélectionner un élement
  39. 39. Xpath helper : tester les requêtes
  40. 40. Sans plugin : les outils de dev
  41. 41. Dans la console chrome $x("expression xpath") $x("//div[starts-with(@id,'actor-tt')]")
  42. 42. Level 2 : scraper une liste de pages
  43. 43. Web scraper
  44. 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. 45. DEMO Web Scraper : google maps Je veux scraper les résultats de google maps
  46. 46. DEMO Web Scraper : google maps Je sélectionne chaque brique de résultat (éléments, et multiple)
  47. 47. DEMO Web Scraper : google maps Une par une, je sélectionne chaque information du bloc, qui m’intéresse. (Texte)
  48. 48. DEMO Web Scraper : google maps Je lance le scrape
  49. 49. DEMO Web Scraper : google maps
  50. 50. DEMO Web Scraper : google maps
  51. 51. DEMO Web Scraper : google maps J’utilise le meme scraper pour d’autres types de résultats
  52. 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. 53. DEMO WEB SCRAPER : suivre les liens
  54. 54. DEMO WEB SCRAPER : suivre les liens  Sur chaque page film, récupérer différents éléments.
  55. 55. DEMO WEB SCRAPER : suivre les liens
  56. 56. imacro https://chrome.google.com/webstore/detail/imacros-for- chrome/cplklnmnlbnpmjogncfgfijoopmnlemp?hl=fr
  57. 57. imacro  Avantages • Multi navigateurs • Récursivité  Défauts • Le gratuit est plus limité • Incompatible avec la derniere version de FF
  58. 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
  59. 59. Xidel  http://www.videlibri.de/xidel.html#home
  60. 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. 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. 62. Level 3 : industrialisation
  63. 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. 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
  65. 65. Fonctionnement de Scrapy
  66. 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
  67. 67. Ya plus qu’à… @razbithume

×