【问题标题】:rvest error in UseMethod("xml_find_all") while reading a list in read_html读取 read_html 中的列表时 UseMethod("xml_find_all") 出现 rvest 错误
【发布时间】:2021-06-18 05:19:48
【问题描述】:

我一直在通过 lappy 在具有多个页面的网页上使用 rvest 进行抓取,但是我遇到了一个错误: UseMethod("xml_find_all") 中的错误: 'xml_find_all' 没有适用的方法应用于“list”类的对象

不完全确定如何解决它:

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()
  )

【问题讨论】:

    标签: r rvest


    【解决方案1】:

    您可以将输出与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 列显示数据来自哪个链接。

    【讨论】:

      【解决方案2】:

      您的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())
      )
      

      【讨论】:

      • 谢谢。是否有更好的编辑输出,因为项目在 A、C 和 D 列中,价格在 E、F 和 G 列中?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 2017-09-09
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多