R 中缺少 table 时如何跳过页面抓取
How to skip a page scrape when table is missing in R
我正在构建一个抓取一个球员的名字和他为数千名不同球员效力的年份。我已经构建了一个成功的函数来执行此操作,但不幸的是,在某些情况下 table 以及我需要的另一半数据(播放年数)不存在。对于这些实例,我想添加一种方法来告诉抓取绕过这些实例。这是代码:
(注意:对象"url_final"是活动网页URL列表,其中有很多)
library(rvest)
library(curl)
library(tidyverse)
library(httr)
df <- map_dfr(.x = url_final,
.f = function(x){Sys.sleep(.3); cat(1);
fyr <- read_html(curl(x, handle = curl::new_handle("useragent" = "Mozilla/5.0"))) %>%
html_table() %>%
.[[1]]
fyr <- fyr %>%
select(1) %>%
mutate(name = str_extract(string = x, pattern = "(?<=cbb/players/).*?(?=-\d\.html)"))
})
这是一个活动页面的示例,您可以在其中通过将 "url_final" 替换为 map_dfr 中的 .x 调用来重新创建抓取:
https://www.sports-reference.com/cbb/players/karl-aaker-1.html
这是其中一个实例的示例,其中没有 table,因此 returns 一个错误打破了抓取循环。
https://www.sports-reference.com/cbb/players/karl-aaker-1.html
添加忽略任何错误的 try-Catch 怎么样?
library(tidyverse)
library(rvest)
df <- map_dfr(.x = url_final,
.f = function(x){Sys.sleep(.3); cat(1);
tryCatch({
fyr <- read_html(curl::curl(x,
handle = curl::new_handle("useragent" = "Mozilla/5.0"))) %>%
html_table() %>% .[[1]]
fyr <- fyr %>%
select(1) %>%
mutate(name = str_extract(string = x,
pattern = "(?<=cbb/players/).*?(?=-\d\.html)"))
}, error = function(e) message('Skipping url', x))
})
我正在构建一个抓取一个球员的名字和他为数千名不同球员效力的年份。我已经构建了一个成功的函数来执行此操作,但不幸的是,在某些情况下 table 以及我需要的另一半数据(播放年数)不存在。对于这些实例,我想添加一种方法来告诉抓取绕过这些实例。这是代码:
(注意:对象"url_final"是活动网页URL列表,其中有很多)
library(rvest)
library(curl)
library(tidyverse)
library(httr)
df <- map_dfr(.x = url_final,
.f = function(x){Sys.sleep(.3); cat(1);
fyr <- read_html(curl(x, handle = curl::new_handle("useragent" = "Mozilla/5.0"))) %>%
html_table() %>%
.[[1]]
fyr <- fyr %>%
select(1) %>%
mutate(name = str_extract(string = x, pattern = "(?<=cbb/players/).*?(?=-\d\.html)"))
})
这是一个活动页面的示例,您可以在其中通过将 "url_final" 替换为 map_dfr 中的 .x 调用来重新创建抓取:
https://www.sports-reference.com/cbb/players/karl-aaker-1.html
这是其中一个实例的示例,其中没有 table,因此 returns 一个错误打破了抓取循环。
https://www.sports-reference.com/cbb/players/karl-aaker-1.html
添加忽略任何错误的 try-Catch 怎么样?
library(tidyverse)
library(rvest)
df <- map_dfr(.x = url_final,
.f = function(x){Sys.sleep(.3); cat(1);
tryCatch({
fyr <- read_html(curl::curl(x,
handle = curl::new_handle("useragent" = "Mozilla/5.0"))) %>%
html_table() %>% .[[1]]
fyr <- fyr %>%
select(1) %>%
mutate(name = str_extract(string = x,
pattern = "(?<=cbb/players/).*?(?=-\d\.html)"))
}, error = function(e) message('Skipping url', x))
})