如何从HTML中提取文本(在某些字符串之后)

时间:2016-11-08 20:24:02

标签: python html xpath

我有以下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>

我想提取始终在str1之后发生的abc。我可以使用XPATH链接:

来完成此操作
xpath('.//b[@class = "text-primary text-dark"]')[0].text 

但是解决方案取决于它是这个特定类的第一次出现,它不止一次出现并且总是以相同的顺序出现。我想知道是否有办法搜索HTML abc并提取后续文字?

2 个答案:

答案 0 :(得分:1)

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

  1. 查找包含abc文本的任何(*代表任何标记)元素并选择任何子项。
    //*[contains(text(), 'abc')]/*

  2. 查找包含abc文字的任何(*代表任何标记)元素并选择他的b子项。
    //*[contains(text(), 'abc')]/b

  3. 查找包含文字li的元素的abc元素,并从里面选择b元素(在li内),使用//自{{ 1}}不是b的第一个孩子 li

  4. 如果你知道//li[.//[contains(text(), 'abc')]]//b然后从那里开始,看看返回了什么元素,如果需要导航到父/祖先/孩子。

    有关xpath的更多信息,请参阅w3schools xpath selectors

答案 1 :(得分:0)

以下xpath应该提供您要搜索的文本

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

假设您要查找的str1应始终位于属性为class=text-primary text-dark

的元素下

还假设您想要获得第一次这样的事件(忽略其他text-primary text-dark) - 这就是为什么[1]

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