Вопрос по find, siblings, python, beautifulsoup, scrape – Найти следующих братьев и сестер, пока не определится с помощью Beautifulsoup

7

Веб-страница выглядит примерно так:

<h2>section1</h2>
<p>article</p>
<p>article</p>
<p>article</p>

<h2>section2</h2>
<p>article</p>
<p>article</p>
<p>article</p>

Как найти каждый раздел со статьями в них? То есть, найдя h2, найдите nextsiblings

 до следующего h2.

Если веб-страница была похожа на: (как правило, так)

<div>
<h2>section1</h2>
<p>article</p>
<p>article</p>
<p>article</p>
</div>

<div>
<h2>section2</h2>
<p>article</p>
<p>article</p>
<p>article</p>
</div>

Я могу написать коды, такие как:

for section in soup.findAll('div'):
...
    for post in section.findAll('p')

Но что мне делать с первой веб-страницей, если я хочу получить такой же результат?

это страница википедии? agenis

Ваш Ответ

1   ответ
8

Я думаю, что вы можете сделать что-то вроде этого:

for section in soup.findAll('h2'):
    nextNode = section
    while True:
        nextNode = nextNode.nextSibling
        try:
            tag_name = nextNode.name
        except AttributeError:
            tag_name = ""
        if tag_name == "p":
            print nextNode.string
        else:
            print "*****"
            break

Дано:

<h2>section1</h2>
<p>article1</p>
<p>article2</p>
<p>article3</p>

<h2>section2</h2>
<p>article4</p>
<p>article5</p>
<p>article6</p>

Выход:

article1
article2
article3
*****
article4
article5
article6
*****
@ user1550725 Пожалуйста, проверьте решение еще раз. Я думаю, что это решение разделяет статьи в соответствии с их разделом.
Спасибо. Это действительно отдельные разделы, но кажется, что статьи не относятся к определенному разделу. Я хотел бы получить что-то такое же, что и первый пример, который я привел. user1550725
@ user1550725 "soup.findAll (" h2 ")" даст вам все разделы, которые не совпадают со статьями. Хотя & quot; section.nextSibling & quot; даст вам следующий узел, который вы проверите, является ли это статьей (с тегом & lt; p & gt;) или разделом. Я предположил, что структура будет такой же, как вы указали (имеется в виду только & lt; h2 & gt; и & lt; p & gt;). Вы получаете разделы и статьи, это ваше дело, относиться к ним одинаково или по отдельности. Я надеюсь, что это проясняет ваше замешательство.
Я на самом деле использую Caliber, чтобы создать рецепт для веб-страницы, которую я хочу скачать. Это включает в себя определение раздела и статей в разделе (после чего они превращаются в электронную книгу). Решение, которое вы дали, похоже, рассматривает название раздела и статьи как одно и то же. user1550725

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