2016-11-08 78 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