从多个html读取节点并将结果存储为向量

时间:2018-05-18 10:18:36

标签: r for-loop web-scraping

我有一份本地保存的html文件列表。我想从每个html中提取多个节点并将结果保存在向量中。之后,我想将它们组合在一个数据框中。现在,我有一个代码用于1个节点,它可以工作(见下文),但是如果我将它应用于~20个变量,它似乎很长且效率很低。此外,保存到矢量(XXX_name)真的很奇怪,它从最后一次观察开始,然后继续第一次,第二次,......你有什么建议来简化代码/使其更有效率吗?

# Extracts name variable and stores in a vector 
XXX_name <- c()
for (i in 1:216) { 
  XXX_name <- c(XXX_name, name)
  mydata <- read_html(files[i], encoding = "latin-1") 
  reads_name <- html_nodes(mydata, 'h1') 
  name <- html_text(reads_name) 
  #print(i) 
  #print(name) 
}

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以将工作放在一个函数中,然后使用map

将该函数应用于每个变量

首先,创建函数:

read_names <- function(var, node) {

  mydata <- read_html(files[var], encoding = "latin-1") 
  reads_name <- html_nodes(mydata, node) 
  name <- html_text(reads_name) 
}

然后我们创建一个包含所有可能的输入组合的df,并将该函数应用于该

library(tidyverse)

inputs <- crossing(var = 1:216, node = vector_of_nodes) 

output <- map2(inputs$var, inputs$node, read_names)