使用BeautifulSoup CSS选择器获取文本

色拉

HTML范例

<h2 id="name">
    ABC
    <span class="numbers">123</span>
    <span class="lower">abc</span>
</h2>

我可以用以下方式获取数字:

soup.select('#name > span.numbers')[0].text

如何ABC使用BeautifulSoup和select功能获取文本

在这种情况下呢?

<div id="name">
    <div id="numbers">123</div> 
    ABC
</div>
ec

在第一种情况下,获取上一个同级

soup.select_one('#name > span.numbers').previous_sibling

在第二种情况下,获取下一个同级

soup.select_one('#name > #numbers').next_sibling

请注意,我假设您故意在这里使用numbersas作为id值,而标记则divspan因此,我已经调整了CSS选择器。


要涵盖这两种情况,可以转到标签的父级,并以非递归模式查找非空文本节点:

parent = soup.select_one('#name > .numbers,#numbers').parent
print(parent.find(text=lambda text: text and text.strip(), recursive=False).strip())

注意选择器中的更改-我们要求匹配numbersid或numbersclass。

但是,我觉得这种通用解决方案不太可靠,因为对于初学者来说,我不知道您的实际投入是多少。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章