2016-07-28 5 views
1

多くのWebサイトをループしていくつかの要素を抽出し、結果をRの表に格納するforループを作成しようとしています。 forループを開始する方法、またはすべての結果を1つの変数にコピーして後でエクスポートする方法があります。ループURLとストア情報R

library("dplyr") 
library("rvest") 
library("leaflet") 
library("ggmap") 


url <- c(html("http://www.webiste_name.com/") 

agent <- html_nodes(url,"h1 span") 
fnames<-html_nodes(url, "#offNumber_mainLocContent span") 
address <- html_nodes(url,"#locStreetContent_mainLocContent") 

scrape<-t(c(html_text(agent),html_text(fnames),html_text(address))) 


View(scrape) 

答えて

0

私はlapplyとします。

のコードは次のようになります。

library("rvest") 
library("dplyr") 

#a vector of urls you want to scrape 
URLs <- c("http://...1", "http://...2", ....) 

df <- lapply(URLs, function(u){ 

     html.obj <- read_html(u) 
     agent <- html_nodes(html.obj,"h1 span") %>% html_text 
     fnames<-html_nodes(html.obj, "#offNumber_mainLocContent span") %>% html_text 
     address <- html_nodes(html.obj,"#locStreetContent_mainLocContent") %>% html_text 

    data.frame(Agent=agent, Fnames=fnames, Address=address) 
}) 

df <- do.all(rbind, df) 

View(df) 
+0

素晴らしい仕事を!各スクレイプからのデータが別々の行に格納されるように調整するにはどうすればよいですか?今すぐお互いに隣接してそれらを保管する – CHopp

+0

私はあなたの質問を理解しているか分からない。 'lapply'のdata.frame内には、生成されたすべての行に対応するURLを持つために、次の' data.frame(Agent = agent、Fnames = fnames、Address = address、URL = u)を持つことができます。 –

+0

私はそれを理解しましたしかし、別の質問では、サイトを検索しようとすると、このようなエラーが発生するのはなぜですか? "エラー: 'www.website.com'は現在の作業ディレクトリに存在しません。 – CHopp

2

あなたの質問が完全に再現性がないことを考えると、ここでは3つのURL(レッドソックス、ブルージェイズとヤンキース)をループおもちゃの例だ:

library(rvest) 

# teams 
teams <- c("BOS", "TOR", "NYY") 

# init 
df <- NULL 

# loop 
for(i in teams){ 
    # find url 
    url <- paste0("http://www.baseball-reference.com/teams/", i, "/") 
    page <- read_html(url) 
    # grab table 
    table <- page %>% 
     html_nodes(css = "#franchise_years") %>% 
     html_table() %>% 
     as.data.frame() 
    # bind to dataframe 
    df <- rbind(df, table) 
} 

# view captured data 
View(df) 

それがでiを置き換えるために、ループが動作しますpaste0各チームと順番に

関連する問題