2016-04-19 10 views
1

雑誌の記事のメタデータ(タイトル、著者、要約など)をいくつかのWebスクレイピングしようとしています。私は移動する必要のあるページのリストを持っており、各ページに必要な情報があります(リストにある目次ページを除く)。私は、ページの各部分をリストにまとめた関数を作りました。私はそれぞれのページに行き、結果のデータフレームを完成させようとしています。ここで複数の要素からデータフレームを構築する

は、私が持っているものです:私はpager.test(article.links.test[1])を実行すると

article.links <- c("http://onlinelibrary.wiley.com/doi/10.1002/jee.20116/abstract", 
"http://onlinelibrary.wiley.com/doi/10.1002/jee.20120/abstract", 
"http://onlinelibrary.wiley.com/doi/10.1002/jee.20117/abstract" 
) 

pager <- function(page) { 
    new.row = vector("list", 4) 
    page <- read_html(page) 

    #DOI 
    new.row[1] <- page %>% 
    html_node("#doi") %>% 
    html_text() 

    #Title 
    new.row[2] <- page %>% 
    html_node(".mainTitle") %>% 
    html_text() 

    #Authors 
    new.row[3] <- page %>% 
    html_node("#authors") %>% 
    html_text() 

    #Abstract 
    new.row[4] <- page %>% 
    html_node("#abstract") %>% 
    html_text() 

    return(unlist(new.row)) 
} 

結果は、私は1つのエントリに期待するものです。私は、一連の結果でデータフレームを構築するために何をすべきかについてはあまりよく分かりません。私は一緒に行を入れてrbindとのforループを試してみましたが、私はすべての行をしようとすると、それが生成されているエントリに関するエラーがスローされます。

#This is what doesn't seem to work 
abstracts <- data.frame() 
for(key in 1:length(article.links.test)) { 
    abstracts <- rbind(abstracts2, pager.test(article.links.test[key])) 
} 

私は私のリスト内の各ページから要素をこすりするにはどうすればよいと結果をデータフレームとして結合しますか?

答えて

2

あなたはlapply、その後rbind

options(stringsAsFactors=F) 
library(rvest) 
article.links <- c("http://onlinelibrary.wiley.com/doi/10.1002/jee.20116/abstract",      
    "http://onlinelibrary.wiley.com/doi/10.1002/jee.20120/abstract", 
    "http://onlinelibrary.wiley.com/doi/10.1002/jee.20117/abstract" 
) 

pager <- function(page) { 
    doc <- read_html(url(page)) 
    data.frame(DOI=doc %>% html_node("#doi") %>% html_text(), 
     Title=doc %>% html_node(".mainTitle") %>% html_text(), 
     Authors=doc %>% html_node("#authors") %>% html_text(), 
     Abstract=doc %>% html_node("#abstract") %>% html_text()) 
} 

ans <- do.call(rbind, lapply(article.links, pager)) 
str(ans) 
を使用することができます
関連する問題