xpath获取标签内的包括所有下级标签的所有文字内容
现有html源码如下:
<ul class="1"> <li>1</li> <li>12<a>bcd</a></li> <li>123</li> <li>1234</li> <ul class="2"> <li>2</li> <li>22<a>efg</a></li> <li>223</li> <li>2234</li>
想要获取
ul class="1"
下所有的文字内容,即
可通过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 class="2">
<li>2</li>
<li>22<a>bcd</a></li>
<li>223</li>
<li>2234</li>
b = etree.HTML(a)
c = b.xpath('string(//ul)')
print(c)
12bcd
结果如上(没有去掉空白字符),如果想要获取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 class="2">
<li>2</li>
<li>22<a>bcd</a></li>
<li>223</li>
<li>2234</li>
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)
直接选取ul
的第二个children
c = b.xpath('string(//ul[2])')
通过class
属性定位
c = b.xpath('string(//ul[@class="2"])')
先获取储存所有ul
的列表,再从列表中获取第二个ul
,.
表示当前节点
b.xpath('//ul')[1].xpath('string(.)')
xpath中text()和string()以及data()的区别