如何用rvest结合XPath实现网页爬虫缺失值填充NA?
解决用XPath实现rvest缺失值填充NA的问题
你遇到的核心问题是XPath路径的相对/绝对写法错误——你用了以/开头的绝对路径,这会从整个HTML文档的根节点开始查找,而不是从当前遍历的article节点下查找子元素,所以才会出现不符合预期的结果。
修正后的代码
library(rvest) library(purrr) xx <- read_html("https://channel9.msdn.com/Events/useR-international-R-User-conferences/useR-International-R-User-2017-Conference?sort=status&direction=desc&page=14") xx %>% html_nodes(xpath = "/html/body/main/section[2]/div/article") %>% map_df(~list( title = html_nodes(.x, xpath = "./header/h3/a") %>% html_text() %>% {if(length(.) == 0) NA else .}, length = html_nodes(.x, xpath = "./a/time") %>% html_text() %>% {if(length(.) == 0) NA else .} ))
关键说明
- 把XPath路径开头的
/改成./,表示从当前节点(也就是每个article元素)开始查找子元素,这和你原来用CSS选择器的上下文完全一致。你也可以省略./直接写header/h3/a,因为在html_nodes(.x, xpath = ...)的调用中,默认就是相对当前节点的上下文。 - 缺失值填充的逻辑和你原来用CSS的写法完全一致,保持
{if(length(.) == 0) NA else .}即可,确保当某个节点不存在时,返回NA而不是空值。
这样修改后,就能实现和原来CSS选择器版本完全相同的效果啦。
内容的提问来源于stack exchange,提问作者Tlatwork
相关产品推荐
相关产品推荐

