我需要使用美丽的汤来完成以下任务
示例HTML
<div id = "div1">
Text1
<div id="div2>
Text2
<div id="div3">
Text3
</div>
</div>
</div>
我需要对此进行搜索,以便在列表的单独实例中返回给我
Text1
Text2
Text3
我尝试做一个findAll('div'),但是它多次重复相同的Text,即它会返回
Text1 Text2 Text3
Text2 Text3
Text3
答案 0 :(得分:1)
嗯,问题是.text
还包括来自所有子节点的文本。您必须手动只获取那些 immediate 节点子节点的文本节点。此外,给定的文本节点内可能有多个文本节点,例如:
<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']