【问题标题】:Using R to scrape nested XML data使用 R 抓取嵌套的 XML 数据
【发布时间】:2013-01-08 13:43:16
【问题描述】:

您好,我对 R 很陌生,我正在尝试从网站上抓取一些数据。问题是数据存储不一致。

有时我会看到:

<div class = "text">   The text I want   </div>

还有其他时候我看到:

<div class = "text"><div class = "text">   The text I want   </div></div>

到目前为止,我使用的是 XML 包和以下 R 代码:

doc = htmlTreeParse(url, useInternalNodes = T)
text = xpathSApply(doc, "//*/div[@class='text']", xmlValue) 

问题在于,当遇到第二个示例时,此代码将计算“我想要的文本”两次,因为它两次找到 &lt;div class&gt; 属性。我只想数一次,因为它只出现一次。

任何指针都非常感谢!

【问题讨论】:

    标签: xml r xpath web-scraping


    【解决方案1】:
    xtext <- "<div class = \"text\">   The text I want   </div>
    </div><div class = \"text\"><div class = \"text\">   The text I want   </div></div>"
    doc <- htmlParse(xtext)
    xpathSApply(doc,"//*/div[@class='text']/text()")
    
    #[[1]]
    #   The text I want    
    
    #[[2]]
    #   The text I want    
    

    【讨论】:

      【解决方案2】:

      如果你只想统计出现次数,那么你应该能够找到所有节点

      all_text <- xpathSApply(doc, "//*/div[@class='text']", xmlValue)
      

      和加倍的节点

      doubled_text <- xpathSApply(doc, "//*/div[@class='text']/div[@class='text']", xmlValue)
      

      然后从另一个中减去一个的长度以获得真实的反射。

      【讨论】:

      • 您好,我实际上不想计算出现次数(为混淆道歉) - 我想在网页上找到的任何地方返回“我想要的文本”。但我不想在嵌套的 &lt;div class&gt; 语句中找到重复事件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多