好吧,你的问题是.text
它还包括来自所有子节点的文本。您必须仅手动获取作为节点的直接子节点的那些文本节点。此外,一个给定的文本节点中可能有多个文本节点,例如:
<div>
Hello
<div>
foobar
</div>
world!
</div>
你希望它们如何连接?这是一个用空格连接它们的函数:
def extract_text(node):
return ' '.join(t.strip() for t in node(text=True, recursive=False))
以我的例子:
In [27]: t = """
<div>
Hello
<div>
foobar
</div>
world!
</div>"""
In [28]: soup = BeautifulSoup(t)
In [29]: map(extract_text, soup('div'))
Out[29]: [u'Hello world!', u'foobar']
你的例子:
In [32]: t = """
<div id = "div1">
Text1
<div id="div2">
Text2
<div id="div3">
Text3
</div>
</div>
</div>"""
In [33]: soup = BeautifulSoup(t)
In [34]: map(extract_text, soup('div'))
Out[34]: [u'Text1 ', u'Text2 ', u'Text3']