2016-11-08 46 views
0

我有以下HTML:如何提取从HTML文本(某些字符串后)

<li class="group-ib medium-gap line-120 vertical-offset-10"> 
    <i class="fa fa-angle-right font-bold font-95 text-primary text-dark"> 
     ::before 
    </i> 
    <span> 
     abc: 
     <b class="text-primary text-dark">st1</b> 
    </span> 
</li> 

我想提取str1abc后总是会发生的。我能够通过使用XPATH链接做到这一点:

xpath('.//b[@class = "text-primary text-dark"]')[0].text 

但解决方案取决于它是这个特殊的类,它不止一次地出现,而不是总是在同一顺序的第一次亮相。我想知道是否有一种方法来搜索HTMLabc并拉动后续文本?

+1

我想知道你是如何在你的问题中获得xpath的'str1'?你得到的是元素'i',其中'str1'在元素'span'' – SomeDude

+0

草率复制粘贴,编辑。 –

+0

只有当元素在列表中时使用[0]才会有所作为,因为它们处于不同的层次上,这无关紧要,对于不同的级别,您需要使用选择器来标识唯一父元素并从那里继续。 – lauda

回答

1

也许找到包含abc的元素,如果需要导航到子/父,获取文本。选择的
例子:

  1. 找到任何(*为任何标记),其中包含abc文本并选择任何子元素。
    //*[contains(text(), 'abc')]/*

  2. 找到任何(*为任何标签)元素包含abc文本和选择他b孩子。
    //*[contains(text(), 'abc')]/b

  3. 查找具有包含文本abc元素li元素,并从里面选择b元(内里),使用//因为b不是li第一个孩子。
    //li[.//[contains(text(), 'abc')]]//b

如果你知道abc然后从那里开始,看到返回什么元素,如果需要导航到父/祖先/孩子。

对于更多的XPath,请参阅w3schools xpath selectors

0

以下XPath应该给您正在搜索的文本

//*[contains(text(),'abc')]/*[@class='text-primary text-dark'][1]/text()

假设str1你正在寻找的应该永远是下元素与属性class=text-primary text-dark

还假设你想得到第一个这样的事件(忽略其他text-primary text-dark s) - 这就是为什么[1]

此xpath确保搜索这些类的节点在搜索它们之前有文本abc