如何用Python中的BeautifulSoup提取标签中的文本?

2024-05-06 20:49:04 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个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>

我想提取d2的内容,即不是由其他标记包装的,跳过a url。换句话说,我想得到这样的结果:

Text 2
Text 2 continue

有没有办法和美女组一起做?

我试过,但不正确:

soup = BeautifulSoup(html_doc, 'html.parser')
s = soup.find(id='d2').text
print(s)

Tags: 字符串textdividhttpurl内容my
2条回答

只有简单的列表理解才能获得NavigableString对象。

tag = soup.find(id='d2')
s = ''.join(e for e in tag if type(e) is bs4.element.NavigableString)

或者,可以使用decompose方法删除所有子节点,然后使用text获取所有剩余项。

tag = soup.find(id='d2')
for e in tag.find_all() : 
    e.decompose()
s = tag.text 

尝试使用.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

它将返回一个只有textlist

[u'\n        Text 2\n        ', u'\n        Text 2 continue\n    ']
[u'Text 2', u'Text 2 continue']

相关问题 更多 >