简短的问题:我想从一系列页面中抓取一系列 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中实现这一目标?
您可以尝试使用 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