Как найти блок, содержащий 2 тега в цикле? - PullRequest
0 голосов
/ 04 апреля 2019

Я собираюсь очистить содержимое следующего html и хочу захватить h2, затем каждый

до следующего h2, используя красивый суп.Возможно ли это?

<code><hr /><h2>California</h2>
<p><strong>Term 1:</strong> (Eastern division): Tuesday 29 January — 
Friday 
12 April</p>
<p><strong>Term 1:</strong> (Western division): Tuesday 5 February — 
Friday 
12 April</p>
<p><strong>Term 2</strong><strong>:</strong> Monday 29 April — Friday 5 
July</p>
<p><strong>Term 3:</strong> Monday 22 July — Friday 27 September</p>
<p><strong>Term 4:</strong> Monday 14 October — Friday 20 December</p>

<hr /><h2>New York</h2>
<p><strong>Term 1</strong>: Tuesday 29 January — Friday 12 April</p>
<p><strong>Term 2:</strong> Monday 29 April — Friday 5 July</p>
<p><strong>Term 3</strong>: Monday 22 July — Friday 27 September</p>
<p><strong>Term 4</strong>: Monday 14 October — Friday 13 December</p>
soup = BeautifulSoup (page.text, 'html.parser') для каждого_дива в sou.findAll (['h2', 'p']): myval = str (each_div.prettify ("ascii"))

Я хочу получить следующие результаты для каждого состояния

1 Ответ

0 голосов
/ 04 апреля 2019

Вот кое-что, что я думаю, вы должны быть в состоянии работать с. Список capture отслеживает элементы, которые вы хотите для каждого заголовка. Код использует find_next_siblings метод , чтобы получить всех братьев и сестер в дереве и выполнить итерацию Над ними. Когда он достигает другого тега h2, он ломается.

soup = BeautifulSoup(content, 'html.parser')    
for head in soup.find_all('h2'):
    capture = [head]
    for sibling in head.find_next_siblings():
        if sibling.name == 'h2':
            break
        capture += [sibling]

Я бы просто изменил способ хранения захваченных тегов.

Редактировать: Забыл упомянуть, что content - это HTML-строка, представленная в ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...