【发布时间】:2020-05-19 02:17:25
【问题描述】:
我们有一个像这样的df:
df <- data.frame(id= c(1,2,3,4,5),
urls= c(NA,NA,"https://www.bing.com",
"https://www.bing.com https://www.google.com",
"https://github.com/"),
stringsAsFactors = FALSE)
然后我们有一个读取真实url的函数,并获取每个页面的title标签。就这样-
get_title_tag <- function(url) {
if (is.na(ifelse(url == "", NA, url))) {
return(NA)
}
else if(identical(xml2::read_html(url), character(0))){
return(NA)
}
else{
page <- xml2::read_html(url)
path_to_title <- "/html/head/title"
conf_nodes <- rvest::html_nodes(page, xpath = path_to_title)
title <- rvest::html_text(conf_nodes)
#return(title)
return ("PAGE_TITLE")
}
}
问题是urls列第4位的元素包含两个连续的url,所以我们得到错误。我们在论坛中查看了几篇帖子,但没有一个像我们面临的问题。
我们的目标是得到这个输出:
> df
id urls
1 1 <NA>
2 2 <NA>
3 3 PAGE_TITLE
4 4 PAGE_TITLE PAGE_TITLE
5 5 PAGE_TITLE
我已经尝试过这种分离网址的方法,但扩展了我不想要的 df:
urls_only_vector <- df %>%
mutate(urls= strsplit(as.character(urls), " ")) %>%
unnest(urls) #%>% select("urls")
使用这种方法我可以一次读取一个网址,但由于它扩展了我的数据框,我想知道是否还有其他事情可以做?我可以得到提示吗?我会珍惜任何帮助。
【问题讨论】:
标签: r url data-manipulation data-cleaning