Lors que vous voulez récupérer certaines données sur internet, vous pouvez faire le traditionnel copier-coller. Mais comme les textes ou les données numériques se retrouvent souvent dans le désordre, et vous devez alors faire du temps pour nettoyer. De plus, il peut y avoir une quantité importante de page à copier-coller. Pour faciliter cette étape de contruction de base de données venant d’un site internet, des techniques de web-scraping exitent pour automatiser la tâche.
R dispose de nombreux packages pour lire et analyser du code html, voici un guide pour les débutants.
Avant de commencer le scraping, il faut avoir quelques notions de base concernant la structure d’un site web. Pour cela, vous pouvez utiliser l’inspecteur d’un navigateur, par exemple Chrome :
Vous pourrez essayer directement sur le site suivant, avec l’idée de récupérer les liens qui permettent d’accéder aux pages des différentes villes :
L’idée de base du scraping, c’est donc :
Avec R, les packages pour la lecture des url, le téléchargement et l’analyse du code source existent déjà :
Les tutoriels peuvent se trouver très facilement sur internet, rvest,xml, et xml 2.
Un exemple simple peut être de récupérer la liste des données villes sur le site de McDonald’s.
Liste des villes
Si vous allez sur le site de McDonald’s France, vous pouvez voir qu’il y a une liste des villes, on peut d’abord récupérer cette liste.
## [1] "ain-01" "aisne-02"
## [3] "allier-03" "alpes-de-haute-provence-04"
## [5] "hautes-alpes-05" "alpes-maritimes-06"
## [7] "ardeche-07" "ardennes-08"
## [9] "ariege-09" "aube-10"
## [11] "aude-11" "aveyron-12"
## [13] "bouches-du-rhone-13" "calvados-14"
## [15] "cantal-15" "charente-16"
## [17] "charente-maritime-17" "cher-18"
## [19] "correze-19" "cote-d-or-21"
## [21] "cotes-d-armor-22" "creuse-23"
## [23] "dordogne-24" "doubs-25"
## [25] "drome-26" "eure-27"
## [27] "eure-et-loir-28" "finistere-29"
## [29] "gard-30" "haute-garonne-31"
## [31] "gers-32" "gironde-33"
## [33] "herault-34" "ille-et-vilaine-35"
## [35] "indre-36" "indre-et-loire-37"
## [37] "isere-38" "jura-39"
## [39] "landes-40" "loir-et-cher-41"
## [41] "loire-42" "haute-loire-43"
## [43] "loire-atlantique-44" "loiret-45"
## [45] "lot-46" "lot-et-garonne-47"
## [47] "lozere-48" "maine-et-loire-49"
## [49] "manche-50" "marne-51"
## [51] "haute-marne-52" "mayenne-53"
## [53] "meurthe-et-moselle-54" "meuse-55"
## [55] "morbihan-56" "moselle-57"
## [57] "nievre-58" "nord-59"
## [59] "oise-60" "orne-61"
## [61] "pas-de-calais-62" "puy-de-dome-63"
## [63] "pyrenees-atlantiques-64" "hautes-pyrenees-65"
## [65] "pyrenees-orientales-66" "bas-rhin-67"
## [67] "haut-rhin-68" "rhone-69"
## [69] "haute-saone-70" "saone-et-loire-71"
## [71] "sarthe-72" "savoie-73"
## [73] "haute-savoie-74" "paris-75"
## [75] "seine-maritime-76" "seine-et-marne-77"
## [77] "yvelines-78" "deux-sevres-79"
## [79] "somme-80" "tarn-81"
## [81] "tarn-et-garonne-82" "var-83"
## [83] "vaucluse-84" "vendee-85"
## [85] "vienne-86" "haute-vienne-87"
## [87] "vosges-88" "yonne-89"
## [89] "territoire-de-belfort-90" "essonne-91"
## [91] "hauts-de-seine-92" "seine-st-denis-93"
## [93] "val-de-marne-94" "val-d-oise-95"
## [95] "marseille_13" "lyon_69"
## [97] "paris_75"
Boucle pour les adresses
Ensuite, il faut aller dans chaque ville et récupérer les adresses.
On peut enfin visualiser les adresses de tous les McDonald’s en France et faire d’autres analyses sur ces adresses
L’exemple ici est le site infoclimat
## [[1]]
## Heure Temps Température Biométéo Pluie Humidité Pt. de rosée
## 1 00h30 NA 6.3 °C 4.6 80% 3.1 °C
## 2 00h00 NA 6.2 °C 4.9 0 mm/1h 80% 3 °C
## 3 23h30 NA 6.0 °C 4.7 78% 2.5 °C
## 4 23h00 NA 5.9 °C 4.6 0 mm/1h 76% 2 °C
## 5 22h30 NA 6.2 °C 4.1 72% 1.5 °C
## 6 22h00 NA 6.5 °C 4.8 0 mm/1h 67% 0.8 °C
## 7 21h30 NA 6.4 °C 5.2 67% 0.8 °C
## 8 21h00 NA 6.3 °C 4.2 0 mm/1h 69% 1.1 °C
## 9 20h30 NA 6.4 °C 4.3 70% 1.3 °C
## 10 20h00 NA 6.5 °C 5.3 0 mm/1h 73% 2 °C
## 11 19h30 NA 6.4 °C 3.7 74% 2.1 °C
## 12 19h00 NA 6.1 °C 3.7 0.2 mm/1h 76% 2.1 °C
## 13 18h30 NA 5.9 °C 3.1 78% 2.4 °C
## 14 18h00 NA 5.4 °C 2.3 0 mm/1h 80% 2.3 °C
## 15 17h30 NA 5.0 °C 2.0 1.2mm/h 83% 2.4 °C
## 16 17h00 NA 3.2 °C 1.5 2.8 mm/1h 89% 1.5 °C
## 17 16h30 NA 3.2 °C -1.7 37mm/h 84% 0.7 °C
## 18 16h00 NA 9.8 °C 7.6 0 mm/1h 54% 0.9 °C
## 19 15h30 NA 10.2 °C NA 51% 0.5 °C
## 20 15h00 NA 10.7 °C NA 0 mm/1h 52% 1.2 °C
## 21 14h30 NA 10.3 °C NA 54% 1.4 °C
## 22 14h00 NA 10.2 °C NA 0 mm/1h 53% 1.1 °C
## 23 13h30 NA 10.6 °C NA 52% 1.1 °C
## 24 13h00 NA 10.4 °C NA 0 mm/1h 55% 1.8 °C
## 25 12h30 NA 9.8 °C 7.8 55% 1.2 °C
## 26 12h00 NA 9.2 °C 7.1 0.2 mm/1h 61% 2 °C
## 27 11h30 NA 8.6 °C 5.8 65% 2.4 °C
## 28 11h00 NA 8.5 °C 6.3 0 mm/1h 66% 2.5 °C
## 29 10h30 NA 8.3 °C 6.3 66% 2.3 °C
## 30 10h00 NA 7.9 °C 6.1 0 mm/1h 66% 2 °C
## 31 09h30 NA 7.8 °C 5.4 67% 2 °C
## 32 09h00 NA 8.0 °C 6.2 0.2 mm/1h 75% 3.8 °C
## 33 08h30 NA 8.1 °C 6.1 73% 3.5 °C
## 34 08h00 NA 8.7 °C 7.1 0 mm/1h 73% 4.1 °C
## 35 07h30 NA 9.2 °C 7.4 76% 5.2 °C
## 36 07h00 NA 9.4 °C 7.9 0 mm/1h 75% 5.2 °C
## 37 06h30 NA 9.4 °C 8.2 76% 5.4 °C
## 38 06h00 NA 9.7 °C 8.6 0 mm/1h 77% 5.9 °C
## 39 05h30 NA 9.9 °C 8.8 81% 6.8 °C
## 40 05h00 NA 10.2 °C NA 0.2 mm/1h 85% 7.8 °C
## 41 04h30 NA 10.4 °C NA 86% 8.2 °C
## 42 04h00 NA 10.4 °C NA 0 mm/1h 88% 8.5 °C
## 43 03h30 NA 10.6 °C NA 89% 8.8 °C
## 44 03h00 NA 10.7 °C NA 0 mm/1h 88% 8.8 °C
## 45 02h30 NA 10.6 °C NA 88% 8.7 °C
## 46 02h00 NA 10.6 °C NA 0.2 mm/1h 88% 8.7 °C
## 47 01h30 NA 10.6 °C NA 88% 8.7 °C
## 48 01h00 NA 10.9 °C NA 0 mm/1h 87% 8.8 °C
## Vent moyen (raf.) Pression
## 1 8 km/h 1004.2hPa
## 2 6 km/h 1004.1hPa
## 3 6 km/h 1004.3hPa
## 4 6 km/h 1004.5hPa
## 5 10 km/h 1004.6hPa
## 6 8 km/h 1004.6hPa
## 7 6 km/h 1004.5hPa
## 8 10 km/h 1004.7hPa
## 9 10 km/h 1004.9hPa
## 10 6 km/h 1004.8hPa
## 11 13 km/h 1004.8hPa
## 12 11 km/h 1004.2hPa
## 13 13 km/h 1004.1hPa
## 14 15 km/h 1003.8hPa
## 15 13 km/h 1003.4hPa
## 16 6 km/h 1003.5hPa
## 17 24 km/h 1004.5hPa
## 18 15 km/h 1002.5hPa
## 19 15 km/h 1002.8hPa
## 20 11 km/h 1003.0hPa
## 21 11 km/h 1003.3hPa
## 22 11 km/h 1004.0hPa
## 23 15 km/h 1004.7hPa
## 24 13 km/h 1005.6hPa
## 25 13 km/h 1005.7hPa
## 26 13 km/h 1006.3hPa
## 27 18 km/h 1006.5hPa
## 28 13 km/h 1006.7hPa
## 29 11 km/h 1006.8hPa
## 30 10 km/h 1006.9hPa
## 31 13 km/h 1006.8hPa
## 32 10 km/h 1007.4hPa
## 33 11 km/h 1007.1hPa
## 34 10 km/h 1007.2hPa
## 35 11 km/h 1007.3hPa
## 36 10 km/h 1007.1hPa
## 37 8 km/h 1007.2hPa
## 38 8 km/h 1007.5hPa
## 39 8 km/h 1007.7hPa
## 40 10 km/h 1008.1hPa
## 41 10 km/h 1007.9hPa
## 42 6 km/h 1008.2hPa
## 43 6 km/h 1008.7hPa=
## 44 6 km/h 1009.1hPa=
## 45 6 km/h 1009.8hPa=
## 46 8 km/h 1010.3hPa=
## 47 8 km/h 1010.7hPa=
## 48 8 km/h 1011.0hPa=
Une solution rapide est de télécharger manuellement la page web, et ensuite vous faites la même chose en parsant le fichier html en local. Mais cette solution ne fonctionne pas si vous avez un grand nombre de fichiers à télécharger.
Pour le site de Sephora par exemple, lorsque vous lisez http://www.sephora.fr/Parfum/Parfum-Femme/C309/2, vous aurez toujours les résultats de la première page.
La solution de secours était donc : en mettant le nombre de produits par page au maximum (300), j’avais seulement 3 pages à télécharger.
Exemples
Les données que vous cherchez à récupérer parfois se trouvent dans un fichier distinct, bien organisées. Ainsi, il n’est pas nécessaire de crawling le code html pour récupérer les éléments un par un, mais il est possible de lire directement dans ce fichier.
Les exemples de sites sont les suivants:
Selenium permet de simuler un navigateur. Ainsi, tout ce que vous voyez avec l’inspecteur de code source pourra être récupéré. Par exemple sur le site de Sephora :
Sans Selenium, lorsque vous lisez la page 2, vous tombez toujours sur la page 1; avec Selenium, ce que vous êtes bien sur page 2 !
Plus plus d’informations, vous pouvez lire la vignette sur le package RSelenium
Grâce à ces techniques de web-scraping, il est possible de récupérer facilement les données sur des sites internet. Bien sûr, si vous voulez industrialiser ce processus, ou si vous avez des objectifs commerciaux, il est nécessaire de discuter avec les sites.
Copyright © 2016 Blog de Kezhan Shi