Используя item.name
, вы можете увидеть имя тега.
Проблема в том, что между тегами есть элементы NavigableString
, которые также рассматриваются как элементы одного уровня, и они дают None
.
Вам придется пропустить эти элементы, или вы можете получить всех братьев и сестер и использовать цикл for
, чтобы найти первый <w:t>
и выйти из цикла с break
from bs4 import BeautifulSoup as BS
text = '''<div>
<w:rpr></w:rpr>
<w:t>A</w:t>
</div>'''
soup = BS(text, 'html.parser')
all_wrpr = soup.find_all('w:rpr')
for wrpr in all_wrpr:
next_tag = wrpr.next_sibling
print('name:', next_tag.name) # None
next_tag = wrpr.next_sibling.next_sibling
#next_tag = next_tag.next_sibling
print('name:', next_tag.name) # w:t
print('text:', next_tag.text) # A
#name: None
#name: w:t
#text: A
print('---')
all_siblings = wrpr.next_siblings
for item in all_siblings:
if item.name == 'w:t':
print('name:', item.name) # w:t
print('text:', item.text) # A
break # exit after first <w:t>
#name: w:t
#text: A
РЕДАКТИРОВАТЬ: Если вы тестируете код с форматированием HTML немного отличается
text = '''<div>
<w:rpr></w:rpr><w:t>A</w:t>
</div>'''
, то между тегами не будет NavigableString
, и первый метод завершится неудачно, но второй метод все равно будет работать.