Я использую BeautifulSoup 4 с python для анализа HTML-кода. Вот код:
from bs4 import BeautifulSoup as bs
html_doc = '<p class="line-spacing-double" align="center">IN <i>THE </i><b>DISTRICT</b> COURT OF {county} COUNTY\nSTATE OF OKLAHOMA</p>'
soup = bs(html_doc, 'html.parser')
para = soup.p
for child in soup.p.children:
print (child)
Результат:
IN
<i>THE </i>
<b>DISTRICT</b>
COURT OF {county} COUNTY
STATE OF OKLAHOMA
Это все имеет смысл. Я пытаюсь перебрать результаты, и если я найду <i>
или <b>
, сделаю с ними что-то другое. Когда я пробую следующее, это не работает:
for child in soup.p.children:
if child.findChildren('i'):
print('italics found')
Ошибка в том, что первый возвращенный дочерний элемент является строкой, и я пытаюсь найти в нем дочерний тег, а BS4 уже знает, что дочерних элементов нет.
Поэтому я изменил код, чтобы проверить, является ли дочерний элемент строкой, и, если это так, не пытаться предпринять какие-либо действия с ним, просто распечатать его.
for child in soup.p.children:
if isinstance(child, str):
print(child)
elif child.findAll('i'):
for tag in child.findAll('i'):
print(tag)
Результат этого последнего кода:
IN
COURT OF {county} COUNTY
STATE OF OKLAHOMA
Когда я перебираю результаты, мне нужно иметь возможность проверять теги в результате, но я не могу понять, как это сделать. Я думал, что это должно быть просто, но я в тупике.
EDIT:
В ответ на jacalvo:
Если я бегу
for child in soup.p.children:
if child.find('i'):
print(child)
По-прежнему не удается распечатать 2-ю и 3-ю строки из кода HTML
Edit:
for child in soup.p.children:
if isinstance(child, str):
print(child)
else:
print(child.findChildren('i', recursive=False))
Это привело к:
IN
[]
[]
COURT OF {county} COUNTY
STATE OF OKLAHOMA