从R中的xml_Nodes中选择段落

时间:2016-01-15 13:28:19

标签: html r xpath

我是html抓取和R的新手,所以对我来说这是一个棘手的问题。我有一个像下面指定的html结构(只有正文部分)。我必须分开各个部分,每个部分都有x个段落。我想要的是将section1中的所有段落挑选到一个对象,将第2节中的所有段落挑选到一个对象中。

我目前的代码如下:

docx <- read_html("Page.html") 
sections = html_nodes(docx, xpath="//div [@class='sections']/*") 

这给了我一个xml_nodes对象,List of 2,里面有段落。我的问题是我不能将xpathApply用于节点集,因为它会抛出错误。但我想挑出所有这样的段落:

subsparagraphs1 = html_nodes(sections[[1]], xpath="//p "),

然后它会从WHOLE html页面中选出所有段落,而不是第一部分。

我试图更具体:

subsections = html_nodes(sections[[1]], xpath="./div/div/p")

然后它什么都没有,或者这个:

subsections = html_nodes(sections[[1]], xpath="/p [@class = 'pwrapper']") 

这也没有任何结果。任何人都可以帮我解决这个问题吗?

最好,米娅

这是我想要的html结构Text1,text 2和text 3保存在一个对象中,4,5和6保存在一个对象中。

   <div class = "content">
        <div class = "title"> ... </div>
        <div class = "sections"> 
            <div> ... >/div
                <div class = "sectionHeader">
                <div> 
                    <p class = "pwrapper"> Text 1 </p>
                    <p class = "pwrapper"> Text 2 </p>
                    <p class = "pwrapper"> Text 3 </p> 
               </div>
                <div> ... </div>
                <div> ... </div>
            <div> ... >/div
                <div class = "sectionHeader">
                <div>  
                    <p class = "pwrapper"> Text 4 </p>
                    <p class = "pwrapper"> Text 5 </p>
                    <p class = "pwrapper"> Text 6 </p>
                </div>
                <div> ... </div>
                <div> ... </div>
        </div>
    </div>

1 个答案:

答案 0 :(得分:0)

即使您的输入XML包含语法错误,我也会假设 sectionHeader元素是兄弟姐妹(它们位于同一父级(sections下)的同一级别

在这种情况下,您的XPath将是:

  • //div[@class = 'sections']//div[@class='sectionHeader'][1]//p[@class = 'pwrapper']/text()
  • //div[@class = 'sections']//div[@class='sectionHeader'][2]//p[@class = 'pwrapper']/text()

所有变化都是索引进入//div[@class='sectionHeader']序列(1和2 - XPath从1开始,而不是0)。

如果输入XML的结构与我观察/假设的结构不同,请告诉我。

P.S。:您可以通过删除第一个路径部分来简化 XPath://div[@class = 'sections']