Webscraping FBRef for Individual Player Stats in R

edqdpe6u  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(92)

我试图webscrapfbref为个别球员的统计,但我遇到了一个问题,我无法解决。
假设我有一个只有2名球员的名单,马库斯·拉什福德和埃尔林·哈兰德。所以通常我会把每个玩家的名字转换成相关的URL,比如https://fbref.com/en/players/matchlogs/2022-2023/Marcus-Rashford-Match-Logs,然后把它刮下来。
然而,网址包含一些随机的东西,我不知道如何生成,即。https://fbref.com/en/players/a1d5bd30/matchlogs/2022-2023/Marcus-Rashford-Match-Logshttps://fbref.com/en/players/1f44ac21/matchlogs/2022-2023/Erling-Haaland-Match-Logs
问题是我不知道如何自动确定a1d5bd30和1f44ac21部分,因为它们看起来是随机的。
我从同一个网站上抓取了篮球统计数据,但是URL的一部分非常简单,因为它只是球员姓氏的第一个字母,例如https://www.basketball-reference.com/players/b/brownke03/gamelog/2023/
有没有人知道如何解决我的问题,请或有任何人刮此数据成功之前?
非常感谢

xu3bshqb

xu3bshqb1#

可以使用FBREF搜索。
单个匹配将返回一个带有重定向的响应,下面的例子从响应头中收集这些位置,而不实际遵循重定向(req_options(followlocation = FALSE)),如果你想修改URL,它将为你节省一些请求。如果搜索返回0或多个球员,则缺少Loaction头部将导致返回列表中的NULL
req_throttle(1)将请求速率设置为1/s。

library(httr2)
library(purrr)

# "Marcus" - page with multiple matches
# "Super Mario" - no match
players <- c("Marcus Rashford", "Erling Haaland", "Marcus", "Super Mario")

set_names(players) |>
  map(\(player) request("https://fbref.com/en/search/search.fcgi") |>
        req_url_query(search = player) |> 
        req_options(followlocation = FALSE) |>
        req_throttle(1) |>
        req_perform() |> 
        resp_header("Location")
      , .progress = TRUE)
#> ■■■■■■■■■■■■■■■■■■■■■■■ 75% | ETA: 1s
#> $`Marcus Rashford`
#> [1] "/en/players/a1d5bd30/Marcus-Rashford"
#> 
#> $`Erling Haaland`
#> [1] "/en/players/1f44ac21/Erling-Braut-Haland"
#> 
#> $Marcus
#> NULL
#> 
#> $`Super Mario`
#> NULL

字符串
创建于2023-07-27带有reprex v2.0.2

相关问题