我想从网站上获取一些页面。我尝试像在tutorial上那样做。我使用了此功能:
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))
对于网站
url <-'http://www.trustpilot.com/review/www.amazon.com'
它工作正常。当我尝试使用
url <-'https://energybase.ru/en/oil-gas-field/index'
我得到了整数(0)。
我改变
html_nodes('.pagination-page')
到
html_nodes('.html_nodes('data-page')')
失败了。 如何更改代码以使其正常工作?
答案 0 :(得分:3)
我认为您在这里必须对此有所不同。
energybase.ru URL的组织方式与TrustPilot URL完全不同。
出于此处的目的,我们对最后一页具有其自己的节点.last
的事实感兴趣。从那里,您只需要提取data-page
属性的值并将其增加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
编辑:请注意,您总是可以在html_children()
处截取管道(通过向其添加%>% html_attrs()
)来查找在那里可以使用的属性。
答案 1 :(得分:1)
您可以使用rel = last attribute = value节点并从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()
或者,鉴于页面数量多于可见的分页数量,您可以通过多种方法进行计算。一种方法是从下拉列表中的适当li中获取总计数,然后除以每页计数的结果。
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)