【发布时间】:2021-06-05 18:32:08
【问题描述】:
在函数中,我需要为在 thapge 上不是 (!) 的 xpath 项返回“NA”或更好的“0”。在大多数页面上,我从列表中刮取 xpath 项存在,但在某些页面上不存在。如果不存在,则返回向量变得不对称,不能进一步合并。
return_data <- function(url) {
page <- url %>% read_html
tibble(YealyRevenue = page %>%
html_nodes(xpath = '//div[contains(h4, "YealyRevenue")]') %>%
html_text(trim = TRUE) %>%
parse_number(),
Cashflow = page %>%
html_nodes(xpath = '//div[contains(h4, "Cashflow:")]') %>%
html_text(trim = TRUE) %>%
parse_number(),
Spendings = page %>%
html_nodes(xpath = '//*[@id="Spendings"]/a' ) %>%
html_text(trim = TRUE) %>%
parse_number(),
Return = page %>%
html_nodes(xpath = '//*[@id="Return"]/div[1]/div[2]/div/div[2]/div[2]/h1') %>%
html_text(trim = TRUE))
}
最后一项是我抓取的所有页面上并不总是存在的一项。
Return = page %>%
html_nodes(xpath = '//*[@id="Return"]/div[1]/div[2]/div/div[2]/div[2]/h1') %>%
html_text(trim = TRUE)
为此,我需要类似的东西
"如果没有找到这个xpath,请返回"0"
感谢任何线索!
【问题讨论】:
-
你可以用
tryCatch包裹来做这个 -
我不熟悉 tryCatch。你能解释一下吗?
-
在没有 xpath 时是否出现任何错误,或者它是否静默返回。
tryCatch通过捕获该错误来工作,然后我们为这些情况返回一个自定义值 -
是的,我的整个脚本停止了,因为函数中的数据通常被收集并与 cbind 合并到一个组合向量中。如果相应的 xpath 不在页面上,则向量具有不同的长度,因此无法组合。这就是为什么我需要一个“NA”或“0”返回以在所有 4 个刮掉的项目中具有相同的长度。
-
您可以尝试下面发布的解决方案。我还没有测试过,但我认为它可以工作
标签: r web-scraping xpath dplyr rvest