Récupérer des éléments dans une page web

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Kévin Dubois
Messages : 97
Enregistré le : 25 Mar 2019, 12:07

Récupérer des éléments dans une page web

Messagepar Kévin Dubois » 16 Déc 2020, 17:00

Bonjour,

Je possède un dataframe qui indique, en colonne, une url.

Code : Tout sélectionner

test = data.frame(id = 1, url = "https://www.georisques.gouv.fr/risques/installations/donnees/details/0030.12015")


En me servant de celle-ci, je voudrais récupérer un élément dans la page web. Plus précisément, je voudrais récupérer la valeur de l'état d'activité.
https://zupimages.net/viewer.php?id=20/51/t1fx.png

Grâce à mes recherches, j'ai pu trouver un code qui permet de sélectionner l'élément grâce à son "XPath".

Code : Tout sélectionner

library(rvest)

page = read_html("https://www.georisques.gouv.fr/risques/installations/donnees/details/0030.12015")
page %>% html_nodes(xpath = '//*[@id="detailAttributFiche"]/div/p') %>% html_text() %>% as.character()

character(0)


Comme on peut le voir, j'ai systématiquement un "character(0)" qui apparait, comme s'il n'arrivait pas à lire toute la page. Je soupçonne une partie JavaScript qui ne se lie pas correctement ...

Comment puis-je faire ?
Merci.

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Récupérer des éléments dans une page web

Messagepar Michaël Delorme » 17 Déc 2020, 10:40

Le document ne contient pas directement la balise que tu cherches.
Le texte cherché est dans une structure balisée à l'intérieur d'un script qui doit être interprété par du javascript pour l'intégrer au sein du DOM :-(
Bref la partie que tu cherches est invisible pour rvest qui parse le DOM brut.

Une solution serait de passer par une recherche de texte basique...

Sinon, il y a sûrement un appel à une API, mais je ne l'ai pas trouvé en regardant rapidement dans le code et elle ne semble pas être listée sur https://www.georisques.gouv.fr/doc-api#/

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Récupérer des éléments dans une page web

Messagepar Michaël Delorme » 17 Déc 2020, 11:00

Ah ! trouvé !

Code : Tout sélectionner

library(httr)
library(dplyr)

GET("https://www.georisques.gouv.fr/webappReport/ws/installations/etablissement/0030-12015") %>%
  content() %>%
  magrittr::extract2("etatActiviteInst")

Kévin Dubois
Messages : 97
Enregistré le : 25 Mar 2019, 12:07

Re: Récupérer des éléments dans une page web

Messagepar Kévin Dubois » 17 Déc 2020, 11:09

Wow ... un énorme merci !!

Quelle API correspond à la recherche ?

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Récupérer des éléments dans une page web

Messagepar Michaël Delorme » 17 Déc 2020, 11:18

Je ne l'ai pas trouvé dans les API publiques. J'ai regardé les requêtes réseaux du navigateur...

Kévin Dubois
Messages : 97
Enregistré le : 25 Mar 2019, 12:07

Re: Récupérer des éléments dans une page web

Messagepar Kévin Dubois » 17 Déc 2020, 11:22

Je vois, pourrais-tu m'indiquer comment tu as fais ? Histoire que je puisse être autonome une prochaine fois.
Merci.

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Récupérer des éléments dans une page web

Messagepar Michaël Delorme » 17 Déc 2020, 12:12

Avec Firefox : menu Outils > Développement web > Réseau
puis chercher ce qui peut ressembler à un appel à une API
Ici on voit une requête qui retourne du JSON, initiée par jQuery avec l'identifiant de l'établissement...

Kévin Dubois
Messages : 97
Enregistré le : 25 Mar 2019, 12:07

Re: Récupérer des éléments dans une page web

Messagepar Kévin Dubois » 17 Déc 2020, 12:18

Un grand merci


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité