是否可以在某些文本字符串之后抓取一系列节点?

cca*_*ara 2 xpath r rvest

简短的问题:我想从一系列页面中抓取一系列 html_nodes。当这些元素位于没有任何类或 id 的列表中时,问题就出现了。我也不能使用 XPATH,因为所需元素的位置从一页到另一页不同,这取决于以前的信息。

详细资料:

html 代码(片段)如下所示:

<div class='heading'>Available at</div>
<ul class='list-unstyled'>
<li>
<img alt="The%20beach%20lab%20%28mobile%29" class="avatar tiny" src="...>
<a href="/labs/thebeachlab">The Beach Lab x Middle East</a>
</li>
<li>
<img alt="Default lab avatar" class="avatar tiny" src="...>
<a href="/labs/fabedcarolina">Fab Ed Carolina</a>
</li>
...

</ul>
Run Code Online (Sandbox Code Playgroud)

由于没有嵌套的类或 id,我唯一的选择是使用 Xpath,如下所示:

fablabs = url %>%
    html_nodes(xpath = '/html/body/div[2]/div[2]/div[2]/ul[3]/li/a') %>%
    html_text()
Run Code Online (Sandbox Code Playgroud)

不幸的是,虽然这适用于该页面,但不适用于其他页面,因为此列表的位置会根据其先前的内容在页面之间发生变化。

我唯一知道的是我想刮掉字符串下方的东西Available at。有没有办法在R中实现这一目标?

har*_*r07 6

您可以尝试使用 XPathfollowing-sibling轴,例如:

//div[.="Available at"]/following-sibling::ul/li/a
Run Code Online (Sandbox Code Playgroud)

简要说明 :

  • //div[.="Available at"]: 定位div内部文本等于 'Available at' 的元素

  • /following-sibling::ul:然后找到所有ul跟随兄弟姐妹的元素div

  • li/a: 然后从这些ul元素中,返回a父元素所在的孙子元素li

  • 非常感谢您的解决方案和解释!像魅力一样工作。 (2认同)