Xpath string()提取多个子节点中的文本

Posted 雷子-LL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xpath string()提取多个子节点中的文本相关的知识,希望对你有一定的参考价值。

<div>
    <ul class="show">
        <li>275万购昌平邻铁三居 总价20万买一居</li>
        <li>00万内购五环三居 140万安家东三环</li>
        <li>北京首现零首付楼盘 53万购东5环50平</li>
        <li>京楼盘直降5000 中信府 公园楼王现房</li>
    </ul>
</div>

我想要把所有li标签中的文本提取出来,并且放到一个字符串中.
在网上查了下发现使用xpath的string()函数可以实现(string()和text()的区别请自行google)
先看下常见的方法:

>>> from lxml import etree
...
>>> result = html.xpath("//div/ul[@class=‘show‘]")[0]
>>> result.xpath(‘string(.)‘)
 ‘                 275万购昌平邻铁三居 总价20万买一居                 00万内购五
环三居 140万安家东三环                 北京首现零首付楼盘 53万购东5环50平
  京楼盘直降5000 中信府 公园楼王现房             ‘

这是我查到的多数人使用的方法,还有人使用了concat()函数,更麻烦就不提了.
但是上面的匹配明显感觉可以写到一条xpath里面的,为什么非要分开写!忍不住吐槽一下


xpath string()函数的调用写法:

>>> html.xpath("string(//div/ul[@class=‘show‘])")
‘                 275万购昌平邻铁三居 总价20万买一居                 00万内购五
环三居 140万安家东三环                 北京首现零首付楼盘 53万购东5环50平
  京楼盘直降5000 中信府 公园楼王现房             ‘

再吐槽下上面那种写法.在xpath语法里面,点(.)表示当前节点,当前节点不就是html.xpath("//div/ul[@class=‘show‘]")[0]取到的节点元素吗!!!

以上是关于Xpath string()提取多个子节点中的文本的主要内容,如果未能解决你的问题,请参考以下文章

爬虫进阶数据提取-lxml模块(万能操作)

XPath 搜索所有文本节点,而不是任何其他子节点的内部文本

使用 XPath 和正则表达式提取 HTML 注释中的文本

如果它是使用 XPath 在 Scrapy 中的其他节点的父节点,如何从子节点获取文本

Xpath轴与步长应用:取某节点下所有子孙节点里的文本内容

如何使用 XPath 忽略命名空间