我有这段代码应该在“几天”内遍历每个对象。但是,当我运行循环时,它只返回最后一天找到的日期。
days = seq(as.Date("2004-09-21"),as.Date("2004-09-25"),by = 1)
for (i in days){
link = paste0("https://alrai.com/search?date-from=", days[i])
readlink <- read_html(link)
link_maxpagenumbers_full <- readlink %>%
html_elements(".roboto-b") %>%
html_text2()
link_maxpagenumbers_cut <- str_extract_all(link_maxpagenumbers_full,'\\d{1,3}')
readlink <- read_html(link)
article_links <- readlink %>%
html_elements(".font-700") %>%
html_attr("href")
link_title <- readlink %>%
html_elements(".font-700") %>%
html_text2()
link_date <- readlink %>%
html_elements(".size-13")%>%
html_text2()
link_pagesummary <- readlink %>%
html_elements(".size-14") %>%
html_text2()
}
alrai <- data.frame(article_links, link_title, link_date, link_pagesummary)
我真的不确定为什么——我想这应该是每天返回一个链接,每天返回 article_links。
你的循环一直都在进行,但是你正在用最后一次迭代覆盖你的对象。
相反,您需要将每次迭代添加到输出对象(我在这里称之为
Out
),然后将您的 data.frame
代码放入循环中并使用 rbind()
附加输出:
Out<-NULL # initiate empty object
for (i in days){
link = paste0("https://alrai.com/search?date-from=", days[i])
readlink <- read_html(link)
link_maxpagenumbers_full <- readlink %>%
html_elements(".roboto-b") %>%
html_text2()
link_maxpagenumbers_cut <- str_extract_all(link_maxpagenumbers_full,'\\d{1,3}')
readlink <- read_html(link)
article_links <- readlink %>%
html_elements(".font-700") %>%
html_attr("href")
link_title <- readlink %>%
html_elements(".font-700") %>%
html_text2()
link_date <- readlink %>%
html_elements(".size-13")%>%
html_text2()
link_pagesummary <- readlink %>%
html_elements(".size-14") %>%
html_text2()
alrai <- data.frame(article_links, link_title, link_date, link_pagesummary) # create a data frame
Out<-rbind(Out,alrai) # add this iterations data to the output
}