Xpath查询以在不同的html标记之间获取文本

时间:2013-09-27 11:13:14

标签: html r xpath

我正在使用R屏幕刮擦。我抓住了一个页面,我已经设法找到页面上某个位置找到的所有链接(使用name属性的锚标签中的锚标签):

links <- xpathSApply(doc, "//a[@name]//a/@href")

现在我抓住了从Curl链接获取的文件,我想要刮掉一定数量的文本。文本似乎始终位于<p>标记之间(尽管文本中有其他<p>标记,但在以下文字之前结束

</pre><hr>Back to: <a href="#TOP">

我决定抓住<p><a href="#TOP">之间的所有文字,我似乎无法确定xpath查询。到目前为止我有:

text <- xpathSApply(doc, '"/ //text()[preceding:://a/@href="#TOP"] and following::*//p')

有人能指出我正确的方向吗? stackoverflow上有相当多的xpath答案,但它们并不总能解释为了我自己的使用而难以编辑它们的答案。

示例HTML:

<span ID="MSGHDR-CONTENT-TYPE-H-PRE">Content-type:</b></span> <span ID="MSGHDR-CONTENT-        TYPE-PRE">text/plain; charset=us-ascii</span>
</span><p> 

lots and lots of text here that I want


</pre><hr>Back to: <a href="#TOP">Top of message</a> &#124; <a href="/cgi-bin/wa?A1=ind9709&L=cybcom&D=0">Previous page</a> &#124; <a href="/cgi-bin/wa?A0=cybcom&D=0">Main CYBCOM page</a><p>

1 个答案:

答案 0 :(得分:0)

HTML格式很糟糕,因此我很难弄清楚在解析成节点树时格式正确的实例会是什么样子。

以下内容可能有效。它假定在​​<p>内声明的所有<pre>元素都是它的子元素(即使HTML中没有关闭)。

它会查找text()的{​​{1}}孩子<p>没有孩子<p>,并且是<pre>的后代,其中包含以下内容兄弟姐妹第一个<a>的href值为“#TOP”。

//body/pre[following-sibling::a[position()=1 and @href='#TOP']]//p[not(p)]/text()