使用rvest在网络抓取时组合数据框架

时间:2017-07-26 18:35:01

标签: r web-scraping rvest

我有以下代码

 library('rvest')
 library('tidyverse')
 test_url <- c('http://www.citact.org/senator-brent-waltz-r-greenwood-
 district-36',
               'http://www.citact.org/senator-ron-grooms-r-new-albany-
 district-46',
               'http://www.citact.org/representative-mike-speedy-r-
 indianapolis-district-90')
 test <- lapply(test_url, function(i){
   web <- read_html(i)
   grades <- html_nodes(web, 'td')
   test_grades <- data.frame(one = (as.data.frame(html_text(grades), two = 
 'idk')))

    first <- as.data.frame(test_grades[2:11, ])
    second <- as.data.frame(test_grades[13:22, ])

    names(test_grades) <- names(test_grades)
   testing <- data.frame(c(first, second))
 })

 test_names <- lapply(test_url, function(i){
   web <- read_html(i)
   info <- html_nodes(web, 'h3')
    text_info <- html_text(info)

   names_test_df <- data_frame(member = text_info)
   names_test_df <- separate(names_test_df, col = member, c('Useless', 
  'Info'), sep = ': ')
    names_test_df <- separate(names_test_df, col = Info, c('names', 
 'District'), sep = ',')
   names_test_df <- separate(names_test_df, col = names, c('Position', 
  'First', 'Last', 'Party')
                        , sep = ' ')
   names_test_df <- separate(names_test_df, col = Party, c('Party','District 
 Name'), sep = '-')
 })

 y <- do.call(cbind.fill, c(list(do.call(rbind, test)), do.call(rbind, 
 test_names)))

这在所有信息都被收集并且没有错误的意义上有效,但问题在于我的最终数据框,我称之为y。当我创建y时,数据帧测试和数据帧test_names不匹配。例如,测试中的某些成绩和年份与test_names中的正确候选项不匹配。有没有办法确保这些正确对应?我尝试在循环之前组合数据帧,但是我没有成功。可能有更好的方法,这只是我最初的计划。

1 个答案:

答案 0 :(得分:1)

尽量避免重塑和绑定并在每一行中执行do.call,这会使您的代码难以阅读,因此也很难找到错误。我继续前进并决定让它更简单一些。

mi.Invoke(null, parms)