我想從以下 URL 中抓取播放器資料表:
https://www.transfermarkt.de/mamadou-doucoure/profil/spieler/340480
這是我編碼的內容:
x <- read_html(url) %>%
html_node(xpath = '//div[@]') %>%
html_table(fill = TRUE) %>%
as.data.frame() %>%
set_names(.,letters[1:ncol(.)])
據我了解,播放器資料不屬于表格,我不知道如何編輯代碼。另外,我想在資料框中輸出。
uj5u.com熱心網友回復:
Dataframe 可以有多種形式,按原樣在 dataframe 中放置玩家表可能不是最實用的方法,盡管這里有幾個例子。有些部分有點棘手,正確解決這些問題取決于背景關系和目標(例如,目前最終以單一折疊值結束的多個國籍)
library(rvest)
library(dplyr, warn.conflicts = F)
library(tidyr)
library(stringr)
url <- "https://www.transfermarkt.de/mamadou-doucoure/profil/spieler/340480"
html <- read_html(url)
# most basic aproach to extract just what's in the table player name:
df_01 <- tibble(
feature = html_elements(html, "div.info-table > span.info-table__content--regular") %>% html_text() %>% str_squish(),
text = html_elements(html, "div.info-table > span.info-table__content--bold") %>% html_text() %>% str_squish()
) %>%
# player name is not included in div.info-table, add it separately
add_row(.before = 1,
feature = "Player:",
text = html_elements(html, "header > div.data-header__headline-container > h1") %>% html_text() %>% str_squish())
df_01
#> # A tibble: 15 × 2
#> feature text
#> <chr> <chr>
#> 1 Player: "#4 Mamadou Doucouré"
#> 2 Geburtsdatum: "21.05.1998"
#> 3 Geburtsort: "Dakar"
#> 4 Alter: "24"
#> 5 Gr??e: "1,83 m"
#> 6 Nationalit?t: "Frankreich Senegal"
#> 7 Position: "Abwehr - Innenverteidiger"
#> 8 Fu?: "links"
#> 9 Spielerberater: "Sport Avenir Management International"
#> 10 Aktueller Verein: "Borussia M?nchengladbach"
#> 11 Im Team seit: "01.07.2016"
#> 12 Vertrag bis: "30.06.2024"
#> 13 Letzte Verl?ngerung: "14.02.2020"
#> 14 2. Verein: "Borussia M?nchengladbach II (#3)"
#> 15 Social Media: ""
為了包含 URL,我們像以前一樣處理第一個資訊表列,但通過映射處理第二個- 并非所有條目都有 URL,我們不想以不同長度的未對齊列結束:
df_02 <- tibble(
feature = html_elements(html, "div.info-table > span.info-table__content--regular") %>% html_text() %>% str_squish(),
) %>% bind_cols(
purrr::map_df(
html_elements(html, "div.info-table > span.info-table__content--bold"),
~ list(
html_text(.x) %>% stringr::str_squish() %>% na_if(""),
html_element(.x, "a") %>% html_attr("href")
) %>% setNames(c("text", "url"))
)
) %>% add_row(.before = 1,
feature = "Player:",
text = html_elements(html, "header > div.data-header__headline-container > h1") %>% html_text() %>% stringr::str_squish())
df_02
#> # A tibble: 15 × 3
#> feature text url
#> <chr> <chr> <chr>
#> 1 Player: #4 Mamadou Doucouré <NA>
#> 2 Geburtsdatum: 21.05.1998 /aktuell/waspassi…
#> 3 Geburtsort: Dakar <NA>
#> 4 Alter: 24 <NA>
#> 5 Gr??e: 1,83 m <NA>
#> 6 Nationalit?t: Frankreich Senegal <NA>
#> 7 Position: Abwehr - Innenverteidiger <NA>
#> 8 Fu?: links <NA>
#> 9 Spielerberater: Sport Avenir Management International /sport-avenir-man…
#> 10 Aktueller Verein: Borussia M?nchengladbach /borussia-monchen…
#> 11 Im Team seit: 01.07.2016 <NA>
#> 12 Vertrag bis: 30.06.2024 <NA>
#> 13 Letzte Verl?ngerung: 14.02.2020 <NA>
#> 14 2. Verein: Borussia M?nchengladbach II (#3) /borussia-monchen…
#> 15 Social Media: <NA> http://www.instag…
為了擁有一個可能會吸引更多玩家的整潔資料框,缺失的文本值將被 URL 替換,并洗掉單獨的 URL 列:
df_03 <- df_02 %>%
mutate(feature = janitor::make_clean_names(feature),
`text` = coalesce(`text`,url)) %>%
select(-url) %>%
pivot_wider(names_from = feature, values_from = text) %>%
extract(player, into = c("number", "player"), "^#(\\d ) (.*)")
glimpse(df_03)
#> Rows: 1
#> Columns: 16
#> $ number <chr> "4"
#> $ player <chr> "Mamadou Doucouré"
#> $ geburtsdatum <chr> "21.05.1998"
#> $ geburtsort <chr> "Dakar"
#> $ alter <chr> "24"
#> $ grosse <chr> "1,83 m"
#> $ nationalitat <chr> "Frankreich Senegal"
#> $ position <chr> "Abwehr - Innenverteidiger"
#> $ fuss <chr> "links"
#> $ spielerberater <chr> "Sport Avenir Management International"
#> $ aktueller_verein <chr> "Borussia M?nchengladbach"
#> $ im_team_seit <chr> "01.07.2016"
#> $ vertrag_bis <chr> "30.06.2024"
#> $ letzte_verlangerung <chr> "14.02.2020"
#> $ x2_verein <chr> "Borussia M?nchengladbach II (#3)"
#> $ social_media <chr> "http://www.instagram.com/mams_dcr/"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535484.html
標籤:r班级网页抓取归还
