首页 > 解决方案 > 如何使用beautifulsoup从div包围的span中提取文本

问题描述

我有一个html片段如下:

<div class="single_baby_name_description">
    <label>Meaning :</label> <span class="28816-meaning">the meaning of this name is universal whole.</span> </br>
    <label>Gender :</label> <span class="28816-gender">Girl</span> </br>
    <label>Religion :</label> <span class="28816-religion">Christianity</span> </br>
    <label>Origin :</label> <span class="28816-origin">German,French,Swedish</span> </br>
</div>

我尝试使用 div 从所有跨度中提取文本

soup = BeautifulSoup(html,'html.parser')
spans=soup.select('div.single_baby_name_description>span') 

但是 spans[0].text 仅从第一个 tag 中获取文本。并且 spans[1].text 发生 IndexError: list index out of range。

任何帮助将不胜感激。

标签: htmlbeautifulsoup

解决方案


我发现只有“lxml”才能完成这项工作。由于某种原因,'html.parser' 不会。

这将起作用:

soup = BeautifulSoup(html, 'lxml')
spans = soup.select('div.single_baby_name_description span')
spans = [span.text for span in spans]
print(spans)

输出:

['the meaning of this name is universal whole.', 'Girl', 'Christianity', 'German,French,Swedish']

推荐阅读