Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rvest缺少节点-->;NA_R_Parsing_Rvest - Fatal编程技术网

rvest缺少节点-->;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&nbsp;</div><div style="float:left;"><a href="/gp/pdp/profile/XXX"

我正在尝试使用R中的rvest搜索html文档中的节点。在下面的代码中,我想知道当缺少“s_BadgeTop*”时如何返回NULL或NA。这只是为了学术目的

<div style="margin-bottom:0.5em;"><div><div style="float:left;">Por&nbsp;</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&nbsp;</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&nbsp;</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:

  • 约翰(前1000名喜剧演员)
  • 玛丽娜
  • 坎迪斯(前500名科门塔利斯酒店)
  • 我尝试过以下代码:

    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名)。我已澄清上述问题。