美文网首页
xpath获取标签内的包括所有下级标签的所有文字内容

xpath获取标签内的包括所有下级标签的所有文字内容

作者: oldestcrab | 来源:发表于2019-03-29 13:11 被阅读0次

    xpath获取标签内的包括所有下级标签的所有文字内容

    现有html源码如下:

    <div>
        <ul class="1">
            <li>1</li>
            <li>12<a>bcd</a></li>
            <li>123</li>
            <li>1234</li>
        </ul>
        <ul class="2">
            <li>2</li>
            <li>22<a>efg</a></li>
            <li>223</li>
            <li>2234</li>
        </ul>
    </div>
    

    想要获取ul class="1"下所有的文字内容,即

    1
    12 bcd
    123
    1234
    

    可通过xpath的string()函数实现

    from lxml import etree
    
    a = """<div>
        <ul class="1">
            <li>1</li>
            <li>12<a>bcd</a></li>
            <li>123</li>
            <li>1234</li>
        </ul>
        <ul class="2">
            <li>2</li>
            <li>22<a>bcd</a></li>
            <li>223</li>
            <li>2234</li>
        </ul>
    </div>
        """
    b = etree.HTML(a)
    c = b.xpath('string(//ul)')
    print(c)
    
            1
            12bcd
            123
            1234
    

    结果如上(没有去掉空白字符),如果想要获取ul class="2"下所有的文字内容,可通过如下3种方式:

    from lxml import etree
    
    a = """<div>
        <ul class="1">
            <li>1</li>
            <li>12<a>bcd</a></li>
            <li>123</li>
            <li>1234</li>
        </ul>
        <ul class="2">
            <li>2</li>
            <li>22<a>bcd</a></li>
            <li>223</li>
            <li>2234</li>
        </ul>
    </div>
        """
    b = etree.HTML(a)
    # c = b.xpath('string(//ul[2])')
    # c = b.xpath('string(//ul[@class="2"])')
    c = b.xpath('//ul')[1].xpath('string(.)')
    print(c)
    
    1. 直接选取ul的第二个children
    c = b.xpath('string(//ul[2])')
    
    1. 通过class属性定位
    c = b.xpath('string(//ul[@class="2"])')
    
    1. 先获取储存所有ul的列表,再从列表中获取第二个ul,.表示当前节点
    b.xpath('//ul')[1].xpath('string(.)')
    
    xpath中text()和string()以及data()的区别

    XPath中的text()和string()区别

    名称 定义 用法
    text() node test 仅仅返回所指元素的文本内容
    string() 函数 返回所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串
    data() 函数(可保留数据类型) 和string()函数通用,不建议经常使用,会影响XPath的性能

    相关文章

      网友评论

          本文标题:xpath获取标签内的包括所有下级标签的所有文字内容

          本文链接:https://www.haomeiwen.com/subject/prrlbqtx.html