rvest缺少节点-->;NA
我正在尝试使用R中的rvest搜索html文档中的节点。在下面的代码中,我想知道当缺少“s_BadgeTop*”时如何返回NULL或NA。这只是为了学术目的rvest缺少节点-->;NA,r,parsing,rvest,R,Parsing,Rvest,我正在尝试使用R中的rvest搜索html文档中的节点。在下面的代码中,我想知道当缺少“s_BadgeTop*”时如何返回NULL或NA。这只是为了学术目的 <div style="margin-bottom:0.5em;"><div><div style="float:left;">Por </div><div style="float:left;"><a href="/gp/pdp/profile/XXX"
<div style="margin-bottom:0.5em;"><div><div style="float:left;">Por </div><div style="float:left;"><a href="/gp/pdp/profile/XXX" ><span style = "font-weight: bold;">JOHN</span></a> (UK) - <a href="/gp/cdp/member-reviews/XXX">Ver todas las opiniones</a><br /><span class="cmtySprite s_BadgeTop1000 " ><span>(TOP 1000 COMENTARISTAS)</span></span></div></div></div>
<div style="margin-bottom:0.5em;"><div><div style="float:left;">Por </div><div style="float:left;"><a href="/gp/pdp/profile/YYY" ><span style = "font-weight: bold;">MARY</span></a> (USA) - <a href="/gp/cdp/member-reviews/YYY">Ver todas las opiniones</a><br /></div></div></div>
<div style="margin-bottom:0.5em;"><div><div style="float:left;">Por </div><div style="float:left;"><a href="/gp/pdp/profile/ZZZ" ><span style = "font-weight: bold;">CANDICE</span></a> (UK) - <a href="/gp/cdp/member-reviews/ZZZ">Ver todas las opiniones</a><br /><span class="cmtySprite s_BadgeTop500 " ><span>(TOP 500 COMENTARISTAS)</span></span></div></div></div>
Por(英国)-
(前1000名城市旅游者)
波尔(美国)-
波尔(英国)(前500名科门塔里斯塔)
我需要一个具有此结构的data.frame:
name <- pg %>%
html_nodes(xpath='//a[contains(@href,"/gp/pdp/profile/")]') %>%
html_text
status <- pg %>%
html_nodes(xpath='//span[contains(@class,"cmtySprite s_BadgeTop")]') %>%
html_text
status[is.na(status)] <- "NA"
name%
html_节点(xpath='//a[包含(@href,“/gp/pdp/profile/”)%>%
html_文本
状态%
html_节点(xpath='//span[contains(@class,“cmtySprite s_BadgeTop”)]')%>%
html_文本
status[is.na(status)]您可以迭代三个条目中的每一个条目,从中提取名称(可能是徽章),并最终合并所有结果
例如:
# For rbindlist
library(data.table)
# Function to parse a particular 'div' and extract name and (potentially) badge
parse_node <- function(node) {
name <- node %>%
html_node('a[href^="/gp/pdp/profile"]') %>%
html_text
badge <- node %>%
html_nodes('span[class*="s_BadgeTop"] span') %>%
html_text
list(name=name[1],badge=badge[1])
}
# extract nodes, parse and merge
pg %>%
html_nodes('div[style^="margin-bottom"] div div[style^=float]:nth-child(2)') %>%
lapply(parse_node) %>%
rbindlist
rbindlist的#
库(数据表)
#函数解析特定的“div”并提取名称和(可能)徽章
解析节点%
html_文本
徽章%
html_节点('span[class*=“s_BadgeTop”]span')%>%
html_文本
列表(名称=名称[1],徽章=徽章[1])
}
#提取节点、解析和合并
pg%>%
html_节点('div[style^=“margin-bottom”]div-div[style^=float]:第n个子节点(2)%>%
lappy(解析节点)%>%
rbindlist
很难重现您的问题。如果没有cmtySprite s_-BadgeTop
类,状态会发生什么变化?您是否尝试过tryCatch
功能?如果没有“cmtySprite s_BadgeTop”,则CANDICE的值将分配给MARY。在其他情况下,我已经使用“cssApplyInNodeSet”解决了问题,但不知道如何将rvest和css结合起来。在你的问题中,哪里有CANDICE
或MARY
?恐怕没有人能帮助你,除非你提供详细的信息和可复制的例子/在HMTL代码中,我包含了重新布线者的名字。一方面,我显示姓名(即约翰、玛丽、坎迪斯),另一方面显示状态(前1000名或前500名)。我已澄清上述问题。