R中缺少表时如何跳过页面抓取

问题描述 投票:0回答:1

我正在建立一个刮板,以拉出一名球员的名字以及他为数千名不同球员效力的年限。我已经建立了一个否则会成功的函数来执行此操作,但是不幸的是,在某些情况下,包含我需要的另一半数据(播放年份)的表不存在。对于这些实例,我想添加一种方法来告诉抓取对象绕过这些实例。这是代码:

((注:对象“ 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

这里是没有表的实例之一,因此返回一个错误,破坏了剪贴簿的循环。

https://www.sports-reference.com/cbb/players/karl-aaker-1.html
r web-scraping purrr rvest
1个回答
0
投票

如何添加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(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) {})
            })
© www.soinside.com 2019 - 2024. All rights reserved.