2017-07-19 31 views
0

私は、複数のシートからデータを検索するためのWebスクレイピングプログラムを開発中です。以下のコードは私が働いているものの例です。私はこれについて最初のシートだけを得ることができます。私の構文でどこが間違っているかを誰かが指摘できるなら、大きな助けになるでしょう。以下はRを使用して複数のリンクを掻くR

jump <- seq(1, 10, by = 1) 

site <- paste0("https://stackoverflow.com/search?page=",jump,"&tab=Relevance&q=%5bazure%5d%20free%20tier") 


dflist <- lapply(site, function(i) { 
    webpage <- read_html(i) 
    draft_table <- html_nodes(webpage,'.excerpt') 
    draft <- html_text(draft_table) 
}) 



finaldf <- do.call(cbind, dflist) 

finaldf_10<-data.frame(finaldf) 

View(finaldf_10) 

私は 127ページを持っているデータをこすりする必要がある場所からのリンクです。

[https://stackoverflow.com/search?q=%5Bazure%5D+free+tier][1]

私は最初のページだけではなく、ページの残りの部分からデータを取得することができています上記のコードを1として。構文エラーもありません。私が間違っている場所を見つけるのを手伝ってください。

+0

は、あなたの代わりに '' do.callのdo.call(rbind、dflistを) 'を使用する必要はありません。 (cbind、dflist) '?さらに、何が起こっているのかの説明を(あなたに合わせて)含め、エラーメッセージや誤った出力を含めることは常に良いことです。 – Jaap

+1

同様の問題の例:https://stackoverflow.com/questions/40525661/how-to-scrape-mutiple-tables-indexing-both-yearpage – Jaap

+0

@Jaapの問題はdflistループにあります – Tanuvi

答えて

1

一部のウェブサイトでは、一括スクレイピングを防止するセキュリティが設定されています。私はSOがその一つだと思います。それ以上のこと:https://github.com/JonasCz/How-To-Prevent-Scraping/blob/master/README.md

実際、少し通話を遅らせると、これは機能します。私は5秒で試しましたSys.sleep。私はあなたがそれを減らすことができると思うが、これは動作しない可能性があります(私は1秒で試しましたSys.sleep、それは動作しませんでした)。ここで

は、作業コードです:

library(rvest) 
library(purrr) 

dflist <- map(.x = 1:10, .f = function(x) { 
    Sys.sleep(5) 
    url <- paste0("https://stackoverflow.com/search?page=",x,"&q=%5bazure%5d%20free%20tier") 
    read_html(url) %>% 
    html_nodes('.excerpt') %>% 
    html_text() %>% 
    as.data.frame() 
}) %>% do.call(rbind, .) 

ベスト、

コリン・

+0

これは大きな助けになります。ありがとうございました。これは私が探していたものです。 – Tanuvi

+0

常に喜んで:) –

関連する問題