3

我需要用美丽的汤来完成以下

示例 HTML

<div id = "div1">
 Text1
 <div id="div2>
   Text2
   <div id="div3">
    Text3
   </div>
 </div>
</div>

我需要对此进行搜索以在列表的单独实例中返回给我

Text1
Text2
Text3

我尝试做一个 findAll('div'),但它多次重复相同的文本,即它会返回

Text1 Text2 Text3
Text2 Text3
Text3
4

1 回答 1

2

好吧,你的问题是.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']
于 2013-06-10T18:58:18.483 回答