使用BeautifulSoup CSS Selector获取文本

时间:2016-06-17 04:18:56

标签: python python-2.7 css-selectors beautifulsoup html-parsing

示例HTML

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

我可以用以下内容获取数字:

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

如何使用BeautifulSoup和ABC函数获取文本select

在这种情况下呢?

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

1 个答案:

答案 0 :(得分:7)

在第一种情况下,获取previous sibling

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

在第二种情况下,获取next sibling

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

请注意,我假设您有numbers作为id值并且标记为div而不是span。因此,我调整了CSS选择器。

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

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

请注意选择器中的更改 - 我们要求匹配numbers id或numbers类。

尽管如此,我觉得这种通用的解决方案不太可靠,因为对于初学者来说,我不知道你的真实投入是什么。