R:使用 xpath 过滤节点
R: Filtering nodes with xpath
我正在尝试用 R 解析一个 html 文档。我想获取一个节点,但在该节点中有一些我不需要的信息。
例如:
<div class="content">
<h3>Titel</h3>
<p>content</p>
<p>content</p>
<ul>
<li>List</li>
<li>List</li>
</ul>
</div>
我想要所有内容和列表。我不需要标题。所以通常我会用这个代码抓住它:
grabIt <- xml_text(xml_find_all(html, xpath="//div[@class='content']//text()
[not(ancestor-or-self::div[@class='content']//h3)]"))
这通常工作正常。但是这里的“[not(ancestor-or-self”-Line 过滤掉了所有内容。我认为这是因为我正在过滤掉我试图抓取的节点内的某些内容。代码在那些实例中正常工作,其中标题或者我不需要的任何其他信息都在这样的单独节点中:
<div class="content">
<div class="Titel">Title</div> #difference
<p>content</p>
<p>content</p>
<ul>
<li>List</li>
<li>List</li>
</ul>
</div>
我的另一个想法是:
grabIt <- xml_text(xml_find_all(html, xpath="//div[@class='content']//p//text()"))
但问题是,我无法同时抓取段落和列表。
试试这个 xpath:
//div[@class='content']/*[not(name()='h3')][name()='p']/text() | //div[@class='content']/*[not(name()='h3')]/*[name()='li']/text()
它给出:
'content'
'content'
'List'
'List'
我正在尝试用 R 解析一个 html 文档。我想获取一个节点,但在该节点中有一些我不需要的信息。
例如:
<div class="content">
<h3>Titel</h3>
<p>content</p>
<p>content</p>
<ul>
<li>List</li>
<li>List</li>
</ul>
</div>
我想要所有内容和列表。我不需要标题。所以通常我会用这个代码抓住它:
grabIt <- xml_text(xml_find_all(html, xpath="//div[@class='content']//text()
[not(ancestor-or-self::div[@class='content']//h3)]"))
这通常工作正常。但是这里的“[not(ancestor-or-self”-Line 过滤掉了所有内容。我认为这是因为我正在过滤掉我试图抓取的节点内的某些内容。代码在那些实例中正常工作,其中标题或者我不需要的任何其他信息都在这样的单独节点中:
<div class="content">
<div class="Titel">Title</div> #difference
<p>content</p>
<p>content</p>
<ul>
<li>List</li>
<li>List</li>
</ul>
</div>
我的另一个想法是:
grabIt <- xml_text(xml_find_all(html, xpath="//div[@class='content']//p//text()"))
但问题是,我无法同时抓取段落和列表。
试试这个 xpath:
//div[@class='content']/*[not(name()='h3')][name()='p']/text() | //div[@class='content']/*[not(name()='h3')]/*[name()='li']/text()
它给出:
'content'
'content'
'List'
'List'