网页抓取r

时间:2017-12-29 22:49:44

标签: r web-scraping

我正在尝试使用rvest和selectorgadget从多个链接中搜索一些网球统计数据。第一页抓取的是http://www.atpworldtour.com/en/scores/archive/stockholm/429/2017/results,有29个链接看起来像这样:“http://www.atpworldtour.com/en/scores/2017/429/ MS001 / match-stats”。所有链接看起来都相同,但从 MS001-MS029 更改。使用下面的代码,我只得到前9个链接所需的结果。我看到了问题,但不知道如何纠正它。前9个链接为双00,其余为单个0.第10个链接应为MS010。任何帮助都非常赞赏。

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 个答案:

答案 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"
>