2017-12-29 49 views
1

rvestとselectorgadgetを使用して、複数のリンクからいくつかのテニスの統計情報をスクラップしようとしています。私が掻き集めるページはhttp://www.atpworldtour.com/en/scores/archive/stockholm/429/2017/resultsで、「http://www.atpworldtour.com/en/scores/2017/429/MS001/match-stats」のような29のリンクがあります。すべてのリンクは同じように見えますが、MS001-MS029から変更されています。以下のコードを使用して、最初の9つのリンクのみで目的の結果が得られます。私は問題を見るが、それを修正する方法を知らない。最初の9つのリンクは00の倍数を持ち、残りは1つの0を持ちます.10番目のリンクはMS010です。これにはどんな助けもありがたいです。ウェブで複数のリンクを掻き集めるr

library(xml) 
library(rvest) 
library(stringr) 

round <- 1:29 
urls <- paste0("http://www.atpworldtour.com/en/scores/2017/429/MS00", round, 
"/match-stats") 

aces <- function(url) { 
url %>% 
read_html() %>% 
html_nodes(".percent-on:nth-child(3) .match-stats-number-left span") %>% 
html_text() %>% 
as.numeric() 
} 

results <- sapply(urls, aces) 
results 
$`http://www.atpworldtour.com/en/scores/2017/429/MS001/match-stats` 
[1] 9 

$`http://www.atpworldtour.com/en/scores/2017/429/MS002/match-stats` 
[1] 8 

$`http://www.atpworldtour.com/en/scores/2017/429/MS003/match-stats` 
[1] 5 

$`http://www.atpworldtour.com/en/scores/2017/429/MS004/match-stats` 
[1] 4 

$`http://www.atpworldtour.com/en/scores/2017/429/MS005/match-stats` 
[1] 8 

$`http://www.atpworldtour.com/en/scores/2017/429/MS006/match-stats` 
[1] 9 

$`http://www.atpworldtour.com/en/scores/2017/429/MS007/match-stats` 
[1] 2 

$`http://www.atpworldtour.com/en/scores/2017/429/MS008/match-stats` 
[1] 9 

$`http://www.atpworldtour.com/en/scores/2017/429/MS009/match-stats` 
[1] 5 

$`http://www.atpworldtour.com/en/scores/2017/429/MS0010/match-stats` 
numeric(0) 

答えて

1

sprintf()関数を使用して、書式設定された文字列の先頭にゼロを生成できます。

ids <- 1:29 
urlList <- sapply(ids,function(x){  
sprintf("%s%03d%s","http://www.atpworldtour.com/en/scores/2017/429/MS", 
     x,"/match-stats") 
}) 
# print a few items 
urlList[c(1,9,10,29)] 

...と出力:

> urlList[c(1,9,10,29)] 
[1] "http://www.atpworldtour.com/en/scores/2017/429/MS001/match-stats" 
[2] "http://www.atpworldtour.com/en/scores/2017/429/MS009/match-stats" 
[3] "http://www.atpworldtour.com/en/scores/2017/429/MS010/match-stats" 
[4] "http://www.atpworldtour.com/en/scores/2017/429/MS029/match-stats" 
> 
+0

これはうまく動作しますが、よろしくお願いします。実際には3つのリンクMS016、MS020、MS027は存在しません。フォローアップして1:29の間に存在するリンクだけを掻き取る方法があるかどうか尋ねてもよいでしょうか? – mrsama

+0

ids < - c(1:15,17:19,21:26,28:29)を使用してURLを生成してください。 –

+0

@mrsama - 私が提供したソリューションを使用できたら、私の答えを受け入れてください。 –

関連する問題