Я предложил 2 решения.Первое не самое элегантное решение.Но быстро, прямо у меня в голове, вы можете разделить это снова и объединить все после «Учителя»
Вариант 1:
html = '''
!doctype html>
<html lang="en">
<body>
<div class="sidebar-box">
<h3><i class="fa fa-users"></i> Management Team</h3>
Chairman, Director
</div>
<div class="sidebar-box">
<h3><i class="fa fa-male"></i> Teacher</h3>
John Doe
</div>
<div class="sidebar-box">
<h3><i class="fa fa-mortar-board"></i> Awards </h3>
National Top Quality Educational Development
</div>
<div class="sidebar-box">
<h3><i class="fa fa-building"></i> School Type</h3>
Secondary
</div>
</body>
</html>'''
from bs4 import BeautifulSoup
soup4 = BeautifulSoup(html, "html.parser")
# Get School Head Teacher
school_head_teacher = soup4.find_all('div', {'class':'sidebar-box'})
school_head_teacher = school_head_teacher[1].text.strip()
school_head_teacher = school_head_teacher.split()[1:]
school_head_teacher = ' '.join(school_head_teacher)
print(school_head_teacher)
Вывод:
print(school_head_teacher)
John Doe
Вариант 2:
Я думаю, что этот вариант немного лучше.Вы найдете тег с Teacher
.Тогда вы получите родительский тег.Затем, так как вы хотите вторую часть, вы используете .next_sibling
и лишаете ее.
soup4(text=re.compile('Teacher'))[0].parent.next_sibling.strip()
У меня это было в цикле for, там есть несколько учителей.Но вы можете заменить верхний код вместо for
loop
from bs4 import BeautifulSoup
import re
soup4 = BeautifulSoup(html, "html.parser")
# Get School Head Teacher
for elem in soup4(text=re.compile('Teacher')):
print (elem.parent.next_sibling.strip())