首页 > 解决方案 > 如何跳过特定标签中的文本?

问题描述

我想按特定类从 div 中提取文本。在这个 div 中,我有特定类的文本和额外的 span 标签,这是我不想要的。那么,如何从 div 中获取文本并忽略 span 中的文本?

一棵树看起来像:

<div class="desc"><h3 class="text-15 margin-bottom-10">Some desc:</h3>Some 
title <br/>
- text <br/>
- text<br/>
<br/>
text <br/>
<br/>
<br/>
text <br/>
@ <br/>
<br/>
text <span class="some_class">TEXT WHICH I DONT WANT</span> <br/>
<br/>
text <br/>
text <br/>
text </div>

所以现在我得到了:

desc = source.find('div', class_="desc").text 

并获得带跨度的全文。我尝试使用 decompose(), text=True, recursive=False 但不起作用。任何人都知道如何解决它?

标签: pythonweb-scrapingbeautifulsoup

解决方案


.extract()应该做的伎俩:

html = '''<div class="desc"><h3 class="text-15 margin-bottom-10">Some desc:</h3>Some 
title <br/>
- text <br/>
- text<br/>
<br/>
text <br/>
<br/>
<br/>
text <br/>
@ <br/>
<br/>
text <span class="some_class">TEXT WHICH I DONT WANT</span> <br/>
<br/>
text <br/>
text <br/>
text </div>'''

import bs4

soup = bs4.BeautifulSoup(html, 'html.parser')

soup.find('span').extract()
desc = soup.find('div', class_="desc").text 

输出:

print (desc)
Some desc:Some 
title 
- text 
- text

text 


text 
@ 

text  

text 
text 
text 

推荐阅读