簡體   English   中英

R 網絡抓取,不確定如何進行

[英]R webscraping, unsure how to proceed

對於一個附帶項目,我正在嘗試收集與夢幻足球相關的 NFL 球員的統計數據。 我找到了一個 URL 有我想要的數據: https://www.cbssports.com/fantasy/football/stats/QB/2020/ytd/stats/ppr/

我試圖在 R 中刮掉它,但沒有運氣。 我已經嘗試了很多東西,我得到的最接近的是:

Test1 <- read_html("https://www.cbssports.com/fantasy/football/stats/QB/2020/season/projections/ppr/") %>% html_nodes('.TableBase-bodyTr')

到目前為止,我得到了代碼,結果如下:

Test1
{xml_nodeset (69)}
 [1] <tr class="TableBase-bodyTr">\n<td class="TableBase-bodyTd \n                \n                \n                \n                ">\n                    <span class="CellPlayerName--sho ...
 [2] <tr class="TableBase-bodyTr">\n<td class="TableBase-bodyTd \n                \n                \n                \n                ">\n                    <span class="CellPlayerName--sho ...
 [3] <tr class="TableBase-bodyTr">\n<td class="TableBase-bodyTd \n                \n                \n                \n                ">\n                    <span class="CellPlayerName--sho ...
 [4] <tr class="TableBase-bodyTr">\n<td class="TableBase-bodyTd \n                \n                \n                \n                ">\n                    <span class="CellPlayerName--sho ...

我嘗試將其輸入 html_text() 並得到以下結果:

[65] "\n                    \n                        \n                        \n            \n                                                                                                    \n            J. Eason\n    \n                                        \n                                    \n                        QB\n                    \n                    \n                                    \n                        IND\n                    \n                                \n                \n                \n                            \n        \n        \n            

這只是純粹的混亂,其中嵌入了相關信息。 我還嘗試在其上使用 html_table() ,但出現錯誤。

現在,如果我在“Test1”上使用 View function,我可以鑽取多層數據並找到我正在尋找的內容,但我想弄清楚的是如何直接獲取該數據。

我不太確定 go 從這里到哪里。 如果有人能給我一些指點,我將不勝感激。 我對 HTML 的熟悉程度非常低,我正在嘗試閱讀更多相關信息並理解,但從我通過檢查頁面能夠收集到的數據是存儲在 class“TableBase-bodyTr”中,這就是為什么我指向那里的節點。

表格格式有些奇怪,導致html_table()出錯。 不太確定如何糾正。

這是刮取行內容然后創建 dataframe 的替代方法。

library(rvest)
page <- read_html("https://www.cbssports.com/fantasy/football/stats/QB/2020/season/projections/ppr/") 

#find the rows of the table
rows<-page%>% html_nodes('tr')

#the first 2 rows are the header information skipping those
#get the playname (both short and long verision)
playername <- rows[-c(1, 2)] %>% html_nodes('td span span a') %>% html_text() %>% trimws() 
playername <- matrix(playername, ncol=2, byrow=TRUE)

#get the team and position
position <- rows[-c(1, 2)] %>% html_nodes('span.CellPlayerName-position') %>% html_text() %>% trimws() 
team <- rows[-c(1, 2)] %>% html_nodes('span.CellPlayerName-team') %>% html_text() %>% trimws() 

#get the stats from the table
cols <- rows[-c(1, 2)] %>% html_nodes('td') %>% html_text() %>% trimws() 
stats <-matrix(cols, ncol=16, byrow=TRUE)

#make the final answer
answer <- data.frame(playername, position, team, stats[, -1])
#still need to rename the columns
statnames<-c("Name_s", "Name_l", "position", "team",  'GP', 'ATT', 'CMP', 'YDS', 'YDS/G', "TD", 'INT', 'RATE', 'ATT', 'YDS', 'AVG', 'TD', 'FL', 'FPTS', "FPPG")
names(answer) <- statnames

這將使您達到 95%,我沒有嘗試從 web 頁面自動檢索列名。 手動復制、粘貼和分配列名更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM