You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

lab03-webscraping_correction.Rmd 3.1KB

4 jaren geleden
4 jaren geleden
4 jaren geleden
4 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. ---
  2. title: "Web scraping"
  3. author: "Maxime Wack"
  4. date: "17/11/2020"
  5. output:
  6. xaringan::moon_reader:
  7. css: ['default','css/my_style.css']
  8. lib_dir: libs
  9. seal: false
  10. nature:
  11. ratio: '4:3'
  12. countIncrementalSlides: false
  13. self-contained: true
  14. beforeInit: "addons/macros.js"
  15. highlightLines: true
  16. ---
  17. ```{r setup, include=FALSE}
  18. knitr::opts_chunk$set(echo = TRUE, fig.asp= .5)
  19. library(tidyverse)
  20. library(DT)
  21. library(knitr)
  22. library(httr)
  23. library(rvest)
  24. options(DT.options = list(paging = F,
  25. info = F,
  26. searching = F))
  27. ```
  28. class: center, middle, title
  29. # UE Visualisation
  30. ### 2020-2021
  31. ## Dr. Maxime Wack
  32. ### AHU Informatique médicale
  33. #### Hôpital Européen Georges Pompidou, </br> Université de Paris
  34. ---
  35. # Web scraping
  36. ### Utilisation de `httr` et `rvest`
  37. ## httr
  38. Permet de faire des requêtes réseau
  39. → interroger et télécharger directement depuis R
  40. ## rvest
  41. Extraction de données depuis des pages HTML
  42. ---
  43. # httr
  44. ```{r init, echo = F, message = F, error = F}
  45. library(tidyverse)
  46. library(httr)
  47. library(rvest)
  48. ```
  49. Télécharger une page wikipedia
  50. ```{r dl wikipedia}
  51. GET("https://en.wikipedia.org/wiki/Comparison_of_operating_systems") -> wiki
  52. ```
  53. ```{r dl wikipedia do, echo = F}
  54. wiki
  55. ```
  56. ---
  57. # Parsing HTML
  58. ```{r html}
  59. wiki %>%
  60. read_html -> wiki_html
  61. ```
  62. ```{r html do, echo = F}
  63. wiki_html
  64. ```
  65. ---
  66. # Sélecteurs CSS
  67. [W3Schools](https://www.w3schools.com/cssref/css_selectors.asp)
  68. ### Selecteurs permettant d'identifier un **nœud** précis dans le **DOM** (Document Object Model) d'une page HTML
  69. ### Permet de sélectionner par identifiant, classe, position dans la hiérarchie, position entre élements d'un même niveau, ou relativement entre élements
  70. ### Utiliser l'**inspecteur** des outils de développement du navigateur pour identifier les éléments à capturer
  71. ---
  72. # Sélecteurs CSS
  73. ```{r tables}
  74. wiki_html %>%
  75. html_nodes(".wikitable")
  76. ```
  77. ```{r table}
  78. wiki_html %>%
  79. html_node("div + .wikitable")
  80. ```
  81. ---
  82. # Extraction d'une table
  83. ```{r scrape}
  84. wiki_html %>%
  85. html_node("div + .wikitable") %>%
  86. html_table -> wikitable
  87. ```
  88. ```{r scrape do, echo = F}
  89. datatable(wikitable)
  90. ```
  91. ---
  92. # Exercices
  93. ### Transformer cette table en forme normale
  94. ### Extraire la table avec les informations techniques
  95. ### Identifier les OS libres fonctionnant avec un microkernel
  96. ```{r wiki table}
  97. # On identifie toutes les tables "wikitable"
  98. GET("https://en.wikipedia.org/wiki/Comparison_of_operating_systems") %>%
  99. read_html %>%
  100. html_nodes(".wikitable") -> wikitables
  101. # On extrait et parse les deux premières tables
  102. wikitables[[1]] %>% html_table -> table1
  103. wikitables[[2]] %>% html_table -> table2
  104. # On joint les tables, sélectionne les variables pertinentes et met en œuvre les filtres correspondant à l'énoncé
  105. inner_join(table1, table2) %>%
  106. select(Name, Creator, Cost = `Cost, availability`, License = `Preferred license[g 1]`, Kernel = `Kernel type`) %>%
  107. filter(Kernel %>% str_detect("[Mm]icrokernel"),
  108. License %in% c("AGPL", "BSD", "GNU GPL, GNU LGPL", "MIT", "MIT, GNU GPL, GNU LGPL, LPL"))
  109. ```