有沒有人知道by_row
和rowwise
之間有什麼區別?我試圖抓取3個簡單的網站,而且我似乎無法得到任何一種工作方式,所以我不確定我是否僅僅使用了purr
/dplyr
錯誤。by_row vs rowwise iteration
數據:
structure(list(beer_brewerid = c("8481", "3228", "10325"), link =
c("https://www.ratebeer.com/beer/8481/", "https://www.ratebeer.com/beer/3228/", "https://www.ratebeer.com/beer/10325/"), scrapedname = c("", "", "")), .Names = c("beer_brewerid", "link", "scrapedname"), row.names = c(NA, 3L), class = "data.frame")
對於每一個URL(或行),我想用下面的函數來刮的網頁:
dplyr approach:
table %>%
rowwise() %>%
read_html() %>%
extract2(2) %>%
html_nodes("#_brand4 span") %>%
html_text()
發出呼嚕聲的方法:
#Apply function to each row
table %>%
by_row(..f = parserows(), collate = c("rows"), .to = "scrapedname")
#Takes in row
parserows = function(){
read_html() %>%
extract2(., 2) %>%
html_nodes("#_brand4 span") %>%
html_text()
}
在purr
的方法中,我不斷收到一個錯誤,其中x缺失而沒有默認值。該值不應該來自行號?否則,我會寫一個for循環,指定行號所在的索引。
使用這種magrittr管道,我不斷收到超時錯誤與我code.So:
如何避免超時錯誤使用的呼嚕聲/ dplyr超過迭代我DF所有的元素是什麼時候?如果是這樣,我應該看看使用
trycatch
還是某種錯誤處理機制來捕獲錯誤發生時的錯誤?rowwise/by_row真的是這個任務嗎?我認爲這些函數是爲了對一行中的每個元素進行迭代,這不正是我想要解決的問題。謝謝。
output = table$link %>% extract() %>% map(read_html) %>% html_nodes(row,"#_brand4 span") %>% html_text(row)
我把你的鏈接作爲一個載體,映射在他們:'my_dat $鏈接%>% 地圖(read_html)%>%...' –
唯一的問題是,當我有很多鏈接我要刮,我不斷收到超時錯誤。查看更新的代碼。 – petergensler
看看'purrr :: safely'和'purrr :: transpose'。 –