如何在Python中使用BeautifulSoup提取标记内的文本?

Fom*_*aut 3 python beautifulsoup

假设我有一个像这样的html字符串:

<html>
    <div id="d1">
        Text 1
    </div>
    <div id="d2">
        Text 2
        <a href="http://my.url/">a url</a>
        Text 2 continue
    </div>
    <div id="d3">
        Text 3
    </div>
</html>
Run Code Online (Sandbox Code Playgroud)

我想提取的内容d2是不被其他标签包裹,跳过a url.换句话说,我想得到这样的结果:

Text 2
Text 2 continue
Run Code Online (Sandbox Code Playgroud)

有没有办法用BeautifulSoup做到这一点?

我试过这个,但这不正确:

soup = BeautifulSoup(html_doc, 'html.parser')
s = soup.find(id='d2').text
print(s)
Run Code Online (Sandbox Code Playgroud)

Tin*_*y.D 6

试试.find_all(text=True, recursive=False):

from bs4 import BeautifulSoup
div_test="""
<html>
    <div id="d1">
        Text 1
    </div>
    <div id="d2">
        Text 2
        <a href="http://my.url/">a url</a>
        Text 2 continue
    </div>
    <div id="d3">
        Text 3
    </div>
</html>
"""
soup = BeautifulSoup(div_test, 'lxml')
s = soup.find(id='d2').find_all(text=True, recursive=False)
print(s)
print([e.strip() for e in s]) #remove space
Run Code Online (Sandbox Code Playgroud)

list只返回一个text:

[u'\n        Text 2\n        ', u'\n        Text 2 continue\n    ']
[u'Text 2', u'Text 2 continue']
Run Code Online (Sandbox Code Playgroud)