简短的问题:我想从一系列网页中抓取一系列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>
由于没有嵌套类和ids,我唯一的选择就是使用Xpath:
fablabs = url %>%
html_nodes(xpath = '/html/body/div[2]/div[2]/div[2]/ul[3]/li/a') %>%
html_text()
不幸的是,虽然这适用于此页面,但在其他页面中无法使用,因为此列表的位置会因页面之间的内容而异,具体取决于之前的内容。
我唯一知道的是我想要刮掉字符串Available at
下面的东西。有没有办法在R中实现这个目标?
答案 0 :(得分:4)
您可以尝试使用XPath following-sibling
轴,例如:
//div[.="Available at"]/following-sibling::ul/li/a
简要说明:
//div[.="Available at"]
:找到内部文字等于'可用于'的div
元素
/following-sibling::ul
:然后查找ul
div
元素
li/a
:然后从这些ul
元素返回孙子a
,其中父级为li