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

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

现有html源码如下:

  • 1
  • 12bcd
  • 123
  • 1234
  • 2
  • 22efg
  • 223
  • 2234

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

1
12 bcd
123
1234

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

from lxml import etree

a = """
  • 1
  • 12bcd
  • 123
  • 1234
  • 2
  • 22bcd
  • 223
  • 2234
""" b = etree.HTML(a) c = b.xpath('string(//ul)') print(c)
        1
        12bcd
        123
        1234

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

from lxml import etree

a = """
  • 1
  • 12bcd
  • 123
  • 1234
  • 2
  • 22bcd
  • 223
  • 2234
""" 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获取标签内的包括所有下级标签的所有文字内容)