读取 read_html 中的列表时 UseMethod("xml_find_all") 出现错误
rvest error in UseMethod("xml_find_all") while reading a list in read_html
我一直在通过 lappy 在一个包含多个页面的网页上使用下面的 rvest 进行抓取,但是我遇到了一个错误:
UseMethod("xml_find_all") 错误:
没有适用于 'xml_find_all' 的方法应用于 class“列表”
的对象
不确定如何解决:
url <-'https://www.bunnings.com.au/products/bathroom-plumbing/plumbing/pipe-fittings/push-fit-pipe-fittings?L0=products&L1=bathroom-plumbing&L2=plumbing&L3=pipe-fittings&L4=push-fit-pipe-fittings&pageSize=36&page=1'
get_last_page <- function(html){
pages_data <- html %>%
html_nodes('.MuiPaginationItem-sizeLarge') %>%
html_text()
pages_data[(length(pages_data)-1)] %>%
unname() %>%
as.numeric()
}
first_page <- read_html(url)
(latest_page_number <- get_last_page(first_page))
list_of_pages <- str_c(url, '?page=', 1:latest_page_number)
bun <- list_of_pages %>%
lapply(read_html)
data.frame(
paint = bun %>% html_nodes(".product-title") %>% html_text(),
price = bun %>% html_nodes(".price-medium-size p") %>% html_text()
)
您的 bun
对象是一个列表。这就是从 lapply
返回的内容。您不能将列表传递给 html_nodes
。您可能也想应用该列表。也许 sapply
在这种情况下效果更好
dd <- data.frame(
paint = sapply(bun, . %>% html_nodes(".product-title") %>% html_text()),
price = sapply(bun, . %>% html_nodes(".price-medium-size p") %>% html_text())
)
您可以将输出合并到一个数据帧中 map_df
-
library(rvest)
result <- list_of_pages %>%
purrr::map_dfr(~{
bun <- .x %>% read_html
data.frame(paint = bun %>% html_nodes(".product-title") %>% html_text(),
price = bun %>% html_nodes(".price-medium-size p") %>% html_text())
}, .id = 'id')
result
id
列显示数据来自哪个 link。
我一直在通过 lappy 在一个包含多个页面的网页上使用下面的 rvest 进行抓取,但是我遇到了一个错误: UseMethod("xml_find_all") 错误: 没有适用于 'xml_find_all' 的方法应用于 class“列表”
的对象不确定如何解决:
url <-'https://www.bunnings.com.au/products/bathroom-plumbing/plumbing/pipe-fittings/push-fit-pipe-fittings?L0=products&L1=bathroom-plumbing&L2=plumbing&L3=pipe-fittings&L4=push-fit-pipe-fittings&pageSize=36&page=1'
get_last_page <- function(html){
pages_data <- html %>%
html_nodes('.MuiPaginationItem-sizeLarge') %>%
html_text()
pages_data[(length(pages_data)-1)] %>%
unname() %>%
as.numeric()
}
first_page <- read_html(url)
(latest_page_number <- get_last_page(first_page))
list_of_pages <- str_c(url, '?page=', 1:latest_page_number)
bun <- list_of_pages %>%
lapply(read_html)
data.frame(
paint = bun %>% html_nodes(".product-title") %>% html_text(),
price = bun %>% html_nodes(".price-medium-size p") %>% html_text()
)
您的 bun
对象是一个列表。这就是从 lapply
返回的内容。您不能将列表传递给 html_nodes
。您可能也想应用该列表。也许 sapply
在这种情况下效果更好
dd <- data.frame(
paint = sapply(bun, . %>% html_nodes(".product-title") %>% html_text()),
price = sapply(bun, . %>% html_nodes(".price-medium-size p") %>% html_text())
)
您可以将输出合并到一个数据帧中 map_df
-
library(rvest)
result <- list_of_pages %>%
purrr::map_dfr(~{
bun <- .x %>% read_html
data.frame(paint = bun %>% html_nodes(".product-title") %>% html_text(),
price = bun %>% html_nodes(".price-medium-size p") %>% html_text())
}, .id = 'id')
result
id
列显示数据来自哪个 link。