2016-09-28 12 views
1

70ページのhtmlデータをスクラップするにはどうすればよいですか?私はこれを見ていたquestionしかし、私は一般的な方法のセクションの機能に立ち往生しています。 jso1226 @Web複数のページを直列でスクラップR

#attempt 

library(purrr) 

url_base <-"https://secure.capitalbikeshare.com/profile/trips/QNURCMF2Q6" 

map_df(1:70, function(i) { 

cat(".") 

pg <- read_html(sprintf(url_base, i)) 

data.frame(startd=html_text(html_nodes(pg, ".ed-table__col_trip-start-date")), 
endd=html_text(html_nodes(pg,".ed-table__col_trip-end-date")), 
duration=html_text(html_nodes(pg, ".ed-table__col_trip-duration")) 
) 
}) -> table 



#attempt 2 (with just one data column) 

url_base <-"https://secure.capitalbikeshare.com/profile/trips/QNURCMF2Q6" 


map_df(1:70, function(i) { 

page %>% html_nodes(".ed-table__item_odd") %>% html_text() 

}) -> table 
+0

あなたのURLには、現在のページ番号を表すパラメータがあるはずです。そして、それを 'url_base'で貼り付けて実際のURLを生成する必要があります。あなたは同じURLに70回アクセスしようとしているようです –

答えて

0

、私はあなたのように私はあなたが何をしたいのかを例に非常に類似したタスクを提供しています参照の回答で何が起こっていたかわかりません。

ウェブページに移動して情報を収集し、データフレームを追加してから次のページに移動します。

私はStackOverflowのためにここに掲載の私の答えを追跡するために作成し、このコードを使用します

login<-"https://stackoverflow.com/users/login?ssrc=head&returnurl=http%3a%2f%2fstackoverflow.com%2f" 

library(rvest) 
pgsession<-html_session(login) 
pgform<-html_form(pgsession)[[2]] 
filled_form<-set_values(pgform, email="*****", password="*****") 
submit_form(pgsession, filled_form) 

#pre allocate the final results dataframe. 
results<-data.frame() 

for (i in 1:5) 
{ 
    url<-"http://stackoverflow.com/users/**********?tab=answers&sort=activity&page=" 
    url<-paste0(url, i) 
    page<-jump_to(pgsession, url) 

    #collect question votes and question title 
    summary<-html_nodes(page, "div .answer-summary") 
    question<-matrix(html_text(html_nodes(summary, "div"), trim=TRUE), ncol=2, byrow = TRUE) 

    #find date answered, hyperlink and whether it was accepted 
    dateans<-html_node(summary, "span") %>% html_attr("title") 
    hyperlink<-html_node(summary, "div a") %>% html_attr("href") 
    accepted<-html_node(summary, "div") %>% html_attr("class") 

    #create temp results then bind to final results 
    rtemp<-cbind(question, dateans, accepted, hyperlink) 
    results<-rbind(results, rtemp) 
} 

#Dataframe Clean-up 
names(results)<-c("Votes", "Answer", "Date", "Accepted", "HyperLink") 
results$Votes<-as.integer(as.character(results$Votes)) 
results$Accepted<-ifelse(results$Accepted=="answer-votes default", 0, 1) 

この場合、ループは唯一の5ページに限定されているが、これは、アプリケーションに合わせて変更する必要があります。私はユーザー固有の値を******に置き換えました。うまくいけば、これはあなたのためのいくつかのガイダンスを提供します。

関連する問題