有没有人知道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'。 –