如何更简便地提取ElementTree中所有嵌套文本?
如何更简便地提取ElementTree中所有嵌套文本?
嘿,我太懂你这种不想写一堆繁琐循环的心情了!用xml.etree解析HTML的时候,.text属性确实够让人头疼——只能拿到元素第一级子节点的文本,嵌套在更深层的内容完全碰不到。
其实不用手动遍历所有子元素,ElementTree本身就有个很实用的方法能解决这个问题:itertext()。
这个方法会自动递归遍历目标元素及其所有子元素,把所有文本节点的内容都迭代出来。你只需要把这些文本片段拼接起来就行,代码超简洁:
from xml.etree import ElementTree as ET # 假设你已经定位到了目标元素target_elem full_text = ''.join(target_elem.itertext())
举个实际例子,如果你有这样的HTML结构:
<div class="content"> 欢迎来到 <span>我的博客</span> ,这里有很多实用的编程技巧! </div>
用itertext()就能一次性把“欢迎来到我的博客,这里有很多实用的编程技巧!”全部提取出来,完全不用自己写递归或者循环去处理每个子元素。
另外提一嘴,如果日常处理HTML的场景比较多,其实xml.etree对不规范HTML的兼容性一般,要是遇到复杂的页面结构,BeautifulSoup会更顺手,但如果就想坚持用xml.etree,itertext()绝对是最优雅的解决方案了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

