Je veux prendre un certain nombre de pages du site Web. J'essaye de le faire comme sur titorial .J'ai utilisé cette fonction:

get_last_page <- function(html){

  pages_data <- html %>% 
                  # The '.' indicates the class
                  html_nodes('.pagination-page') %>% 
                  # Extract the raw text as a list
                  html_text()                   

  # The second to last of the buttons is the one
  pages_data[(length(pages_data)-1)] %>%            
    # Take the raw string
    unname() %>%                                     
    # Convert to number
    as.numeric()                                     
}
first_page <- read_html(url)
(latest_page_number <- get_last_page(first_page))

pour site web

url <-'http://www.trustpilot.com/review/www.amazon.com'

ça marche très bien. Quand j'ai essayé de le faire avec

url <-'https://energybase.ru/en/oil-gas-field/index'

J'ai obtenu un entier (0).

je change

html_nodes('.pagination-page') 

à

html_nodes('.html_nodes('data-page')') 

Et a échoué. Comment puis-je changer mon code pour qu'il fonctionne correctement?

0
Владимир Кузовкин 3 nov. 2019 à 20:51

2 réponses

Je pense que vous devez vous y prendre un peu différemment ici.

Le energybase.ru URL n'est pas organisé de la même manière que le TrustPilot URL .

Pour nos besoins ici, nous sommes intéressés par le fait que la dernière page a son propre nœud .last. De là, il vous suffit d'extraire la valeur de l'attribut data-page et de l'incrémenter de 1.

library("rvest") 
library("magrittr")

url <- 'https://energybase.ru/en/oil-gas-field/index'

read_html(url) %>% html_nodes(".last") %>% html_children() %>% html_attr("data-page") %>% as.numeric()+1
# [1] 21

Edit: remarque, vous pouvez toujours intercepter la tuyauterie à html_children() (en y ajoutant un %>% html_attrs()) pour savoir quels attributs sont disponibles à votre disposition là-bas.

1
Dunois 3 nov. 2019 à 19:07

Vous pouvez utiliser le nœud rel = last attribute = value et extraire le nombre du href

library("rvest") 
library("magrittr")

pg <- read_html('https://energybase.ru/en/oil-gas-field/index')
number_of_pages <- str_match_all(pg %>% html_node("[rel=last]") %>% html_attr("href"),'page=(\\d+)')[[1]][,2] %>% as.numeric()

Ou, il existe un certain nombre de façons de le calculer étant donné qu'il y a plus de pages que la pagination visibile. Une façon consiste à obtenir le nombre total à partir du li approprié dans le menu déroulant et à diviser par les résultats par nombre de pages.

library(rvest)
library(magrittr)

pg <- read_html('https://energybase.ru/en/oil-gas-field/index')
total_sites <- strtoi(pg %>% html_node('#navbar-facilities > li:nth-child(13)') %>% html_attr('data-amount'), base = 0L)
# or use: total_sites <- pg %>% html_node('#navbar-facilities > li:nth-child(13)') %>% html_attr('data-amount') %>% as.numeric()
sites_per_page <- length(pg %>% html_nodes('.index-list-item'))
number_of_pages <- ceiling(total_sites/sites_per_page)
0
QHarr 3 nov. 2019 à 19:11