@Safronov_Alexei

Как использую BS4 извлечь текст внутри тега, который находится внтури найденного тега?

Привет Хабр!
<LTTextBoxHorizontal y0="677.457" y1="698.418" x0="47.208" x1="86.76" width="39.552" height="20.962" bbox="[47.208, 677.457, 86.76, 698.418]" index="3">
<LTTextLineHorizontal y0="688.668" y1="698.418" x0="53.168" x1="86.76" width="33.592" height="9.75" bbox="[53.168, 688.668, 86.76, 698.418]" word_margin="0.1">Patient </LTTextLineHorizontal>
<LTTextLineHorizontal y0="677.457" y1="687.207" x0="47.208" x1="86.76" width="39.552" height="9.75" bbox="[47.208, 677.457, 86.76, 687.207]" word_margin="0.1">Jonson </LTTextLineHorizontal>
</LTTextBoxHorizontal>


У меня есть примерно такой XML, в котором я хочу отследить тег LTTextBoxHorizontal, в котором будет Тег со строкой Patient, а так же вывести вывести текст остальных тегов LTTextLineHorizontal внутри тега LTTextBoxHorizontal

Пользуюсь bs4, подскажите как сделать?
  • Вопрос задан
  • 781 просмотр
Пригласить эксперта
Ответы на вопрос 2
SoreMix
@SoreMix Куратор тега Python
yellow
Точно так же как и с обычным html, почитайте документацию

soup = BeautifulSoup(xml, 'xml')
box = soup.find('LTTextBoxHorizontal')
for line in box.find_all('LTTextLineHorizontal'):
  print(line.text)
Ответ написан
@devdb
html = '''<LTTextBoxHorizontal y0="677.457" y1="698.418" x0="47.208" x1="86.76" width="39.552" height="20.962" bbox="[47.208, 677.457, 86.76, 698.418]" index="3">
<LTTextLineHorizontal y0="688.668" y1="698.418" x0="53.168" x1="86.76" width="33.592" height="9.75" bbox="[53.168, 688.668, 86.76, 698.418]" word_margin="0.1">Patient </LTTextLineHorizontal>
<LTTextLineHorizontal y0="677.457" y1="687.207" x0="47.208" x1="86.76" width="39.552" height="9.75" bbox="[47.208, 677.457, 86.76, 687.207]" word_margin="0.1">Jonson </LTTextLineHorizontal>
</LTTextBoxHorizontal>'''

import bs4
text = bs4.BeautifulSoup( html, 'html.parser' ).get_text()


>> print( text )

Patient
Jonson

>> text
'\nPatient \nJonson \n'


Вариант с Regexp, более быстрый и менее ресурсоёмкий:
import re
text = re.sub( r'<[^>]+>', '', html)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы