1

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

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>
4

1 回答 1

0

HTML 的格式很糟糕,所以我很难弄清楚一个格式良好的实例在解析为节点树时会是什么样子。

像下面这样的东西可能会起作用。它假定在​​ 中<p>声明的所有元素<pre>都是它的子元素(即使在 HTML 中没有关闭)。

它查找的text()是 没有孩子的 的<p>孩子,并且是具有以下兄弟姐妹<p>的后代,他的第一个具有值为“#TOP”的href。<pre><a>

//body/pre[following-sibling::a[position()=1 and @href='#TOP']]//p[not(p)]/text()
于 2013-09-30T00:07:32.757 回答