1
<div1 class="tag1">
  <div2 class="tag2">
    <div3 class="tag3">no</div3>
    yes
  </div2>
</div1>

我想解析 div1 并得到它的文本(如果它有一个并且我想保留{name_class: tag1 (or None), text: None}),我重申:{name_class: tag2 , text: yes}, {name_class: tag3 , text: no}

我解决此问题的代码:

from pyquery import PyQuery as pq

a = '<div><div>no</div>yes</div>'
tryy = pq(a)[0]

tmp = [{"text" : tryy.text, "class" : pq(tryy).attr('class')}]
tmp + parse_rec(a)

type(tryy) = lxml.etree._Element' 但问题是:lxml.etree._Element.text不要在 div2 中保留“是”

我试过了,但它不适用于 bs4 只从这个元素中提取文本,而不是它的子元素

欢迎任何图书馆的所有解决方案

4

1 回答 1

1

根据文档,文本“yes”将被视为元素div3的尾部。使用您的示例 XML,以下代码:

from lxml import etree

root = etree.parse("sample.xml")

for element in root.getiterator():
    print(f"{element.text.strip()}, {element.attrib['class']}, {element.tail.strip() if element.tail else ''}")

输出:

, tag1, 
, tag2, 
no, tag3, yes
于 2021-02-10T04:59:33.207 回答