Получить текст с помощью селектора CSS BeautifulSoup

Пример 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> 

В первом случае получите предыдущего брата :

 soup.select_one('#name > span.numbers').previous_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 класс.

Хотя, я чувствую, что это универсальное решение не будет достаточно надежным, потому что для начала я не знаю, какими могут быть ваши реальные входы.