【问题标题】:Using unlist inside a function call在函数调用中使用 unlist
【发布时间】:2022-01-16 19:59:12
【问题描述】:

我正在尝试基于跨多个 URL 的网络抓取创建数据集。

对于这个例子,我试图抓取名为h2.title 的节点,它是li.portal_list_item 的子节点。即,我希望创建 one 向量,其中包含节点的所有值(每个 URL 上为 500)。

我希望在循环或函数中执行此操作。

URL 的一个子集是,

test_urls <- c("https://projekter.aau.dk/projekter/da/studentthesis/search.html?showAdvanced=true&advanced=true&pageSize=500&page=1",
               "https://projekter.aau.dk/projekter/da/studentthesis/search.html?showAdvanced=true&advanced=true&pageSize=500&page=2")

现在,我可以抓取节点并获得一个列表列表 - 500 个列表中的 2 个。但是,我想将 unlist 这个函数放入一个 1000 个长向量 inside 函数,所以我还可以使用该函数来创建数据集,因为我需要跨多个节点进行抓取 - 如果我可以简单地获得一个向量,我可以将它分配给数据集的一列。

library(rvest)
library(dplyr)

dfList <- lapply(test_urls, function(i) {
  webpage <- read_html(i)
  listitems <- html_nodes(webpage, "li.portal_list_item")
  .GlobalEnv$titles <- listitems %>% html_nodes("h2.title") %>% html_text()
})

如果我尝试在我的函数中使用unlist,它根本不起作用,我凭直觉理解 - 但是,我似乎找不到解决方案。

任何帮助都非常非常感谢!

【问题讨论】:

    标签: r loops screen-scraping rvest


    【解决方案1】:

    我们可以使用collapse

    dfList <- lapply(test_urls, function(i) {
      webpage <- read_html(i)
      listitems <- html_nodes(webpage, "li.portal_list_item")
      titles <- listitems %>% html_nodes("h2.title") %>% html_text()
      titles = paste(titles,collapse="\n")
      return(titles)
    })
    

    我们现在有一个包含两个元素的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      相关资源
      最近更新 更多