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?
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.
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)
De nouvelles questions
html
HTML (HyperText Markup Language) est le langage de balisage pour créer des pages Web et d'autres informations à afficher dans un navigateur Web. Les questions concernant le HTML doivent inclure un exemple reproductible minimal et une idée de ce que vous essayez d'accomplir. Cette balise est rarement utilisée seule et est souvent associée à [CSS] et [javascript].