我試圖從他們在 cricinfo 網站上的個人資料中抓取板球運動員的基本球員資訊。此處給出了玩家個人資料頁面的示例:https : //www.espncricinfo.com/player/shaun-marsh-6683
最后,我想在 R 中撰寫一個函式來提取概述選項卡頂部的資訊(全名、出生、年齡等),并想將資訊放入 R 中的資料框中。然后我有另一個函式這將允許我為多個感興趣的玩家執行此操作。
然而,有兩個主要問題:第一是并非所有玩家在他們的概覽頁面上都有相同的資訊類別。因此,我需要為每個玩家匯入類別標題(例如全名、出生、年齡等)及其對應的值。我使用 R 中的 rvest 使用以下代碼完成了此操作:
player_info <- content %>%
html_nodes(".player_overview-grid") %>%
html_nodes(".player-card-description.gray-900") %>%
html_text()
player_cats <- content %>%
html_nodes(".player_overview-grid") %>%
html_nodes(".player-card-heading") %>%
html_text()
newplayer <- data.frame(player_cats, player_info)
這為大多數玩家提供了理想的結果,但是遇到了一個我不知道如何解決的問題。有些玩家在給定的標題中有兩個值;例如,在上面給出的鏈接中,玩家有兩個關系(兄弟和父親),因此這意味著player_cats和player_info向量具有不同的長度。
請有人幫我解決這個問題。我想我需要以某種方式將類別及其值作為對提取,而不是單獨提取,如果這有意義的話。如果有多個條目,我很樂意只提取類別中的第一個值,或者在 R 的最終資料框中多次包含類別標題。兩者都可以。
對不起,如果這是一個簡單的問題,我對此很陌生。非常感謝
編輯:
假設我將該功能應用于該播放器的頁面https://www.espncricinfo.com/player/wes-agar-959833,則輸出如所需,因為每個類別只有一個條目。也就是說,它為我提供了以下資料框: 如下圖 1 所示,該播放器的資訊類別及其值的資料框
但是,當我嘗試將該功能應用于列出的原始組態檔時出現問題:https : //www.espncricinfo.com/player/shaun-marsh-6683。我收到錯誤訊息,因為有 9 個類別,但有 10 個條目,因此無法使用rbind. 看到圖片2,3,4。我需要找到一種方法來抓取每個值屬于哪個類別,以便我可以在 R 中的資料框中復制類別標題。我希望看到一個包含 10 行的資料框,在第一列中重復“關系”或一個 df 有 9 行,有一次“關系”,RH 列中的第一個值“GR Marsh”。
uj5u.com熱心網友回復:
一種解決方法是對每個類別使用html_text2和xpath:
library(rvest)
library(dply)
url = "https://www.espncricinfo.com/player/shaun-marsh-6683"
#create an empty dataframe to store results
df = vector()
for(i in 1:9){
#creating xpath for each of the nine category
nod = paste0('//*[@id="main-container"]/div[1]/div/div[2]/div/div[2]/div[2]/div[1]/div/div[1]/div[', i, ']')
df1 = url %>%
read_html() %>%
html_nodes(xpath =nod) %>%
html_text2()
#now we split the result into columns
df1= do.call(rbind, str_split(df1, "\n"))
df = rbind.data.frame(df, df1)
}
V1 V2 V3
1 Full Name Shaun Edward Marsh
2 Born July 09, 1983, Narrogin, Western Australia
3 Age 38y 147d
4 Nicknames Sos
5 Batting Style Left hand bat
6 Bowling Style Slow left arm orthodox
7 Playing Role Top order batter
8 Height 1.84 m
9 relations GR Marsh (father),MR Marsh (brother)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377796.html
上一篇:用變數搜索漂亮的湯html
下一篇:CSS導航欄樣式
