我是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>
答案 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']
。