我有一个简单的Map
函数,可从博客站点抓取文本文件。获取所有文本文件并将其下载到我的工作目录中的刮板非常容易。我的目标是:使用ifelse()
或纯if
语句仅根据特定日期来抓取文件。
例如,如果在1/31/19上发布了四个文件,而我当时指的是ifelse
,则该函数将返回这四个文件。代码:
library(tidyverse)
library(rvest)
# URL set up
url <- "https://www.example-blog/posts.aspx"
page <- html_session(url, config(ssl_verifypeer = FALSE))
# Picking elements
links <- page %>%
html_nodes("td") %>%
html_nodes("a") %>%
html_attr("href")
# Getting date elements
dates <- page %>%
html_nodes("node.dates") %>%
html_text()
dates <- parse_date_time(dates, "%m/%d/%Y", tz = "EST",
locale = Sys.getlocale("LC_TIME"))
# Function
out <- Map(function(ln) {
fun1 <- html_session(URLencode(
paste0("https://www.example-blog", ln)),
config(ssl_verifypeer = FALSE))
write <- writeBin(fun1$response$content)
ifelse(dates == '2019-01-31', write, "He's dead, Jim")
}, links)
我尝试了多种方法来获取if语句,还可以移动writeBin
。 (通常,writeBin
不会被矢量化-我这样做是为了在我的ifelse
中轻松查看)。错误:
Error in ans[test & ok] <- rep(yes, length.out = length(ans))[test & ok] :
replacement has length zero
如果我省去了if
代码,那么一切都很好,当我只需要指定日期的文本文件时,它只会返回许多文本文件。
答案 0 :(得分:1)
根据描述,似乎要检查每个“链接”的相应“日期”,然后应用if/else
。如果是这样,那么我们可以在Map
Map(function(ln, y) {
fun1 <- html_session(URLencode(
paste0("https://www.example-blog", ln)),
config(ssl_verifypeer = FALSE))
write <- writeBin(fun1$response$content)
if(y == '2019-01-31') {
write
} else "He's dead, Jim"
},
links, dates)