Получить несколько элементов с супом - PullRequest
1 голос
/ 11 октября 2019

У меня есть следующий HTML-код, я пытаюсь получить «клиентов» для каждой конкретной «даты», но я получаю только первый следующий элемент:

<div class="info">
    <div class="left-wrap"><span class="date">DATE-1</span></div>
</div>

<div class="clients-list">
        <div>
            <span class="client" >client1</span>
            <span class="client" >client2</span>
            <span class="client" >client3</span>
        </div>
    </div>

<div class="clients-list">
        <div>
            <span class="client" >client4</span>
            <span class="client" >client5</span>
            <span class="client" >client6</span>
        </div>
    </div>

<div class="info">
    <div class="left-wrap"><span class="date" >DATE-2</span></div>
</div>
<div class="clients-list">
        <div>
            <span class="client" >client7</span>
            <span class="client" >client8</span>
        </div>
</div>
<div class="clients-list">
        <div>
            <span class="client" >client9</span>
            <span class="client" >client10</span>
        </div>
</div>
<div class="clients-list">
        <div>
            <span class="client" >client11</span>
            <span class="client" >client12</span>
        </div>
</div>

Я использую следующеекод:

soup=BeautifulSoup(html,'html.parser')
dates=soup.find_all(class_='date')
for date in dates:
  print(date.text)
  for item in date.find_next(class_='clients-list').find_all(class_='client'):
       print(item.text)

Вывод get:

DATE-1
client1
client2
client3
DATE-2
client7
client8

Я попытался с find_next_all, но получил тот же вывод.

1 Ответ

1 голос
/ 11 октября 2019

Немного сложно, но вы получите вывод. Использование find_next_siblings ()

from bs4 import BeautifulSoup
html='''<div class="info">
    <div class="left-wrap"><span class="date">DATE-1</span></div>
</div>

<div class="clients-list">
        <div>
            <span class="client" >client1</span>
            <span class="client" >client2</span>
            <span class="client" >client3</span>
        </div>
    </div>

<div class="clients-list">
        <div>
            <span class="client" >client4</span>
            <span class="client" >client5</span>
            <span class="client" >client6</span>
        </div>
    </div>

<div class="info">
    <div class="left-wrap"><span class="date" >DATE-2</span></div>
</div>
<div class="clients-list">
        <div>
            <span class="client" >client7</span>
            <span class="client" >client8</span>
        </div>
</div>
<div class="clients-list">
        <div>
            <span class="client" >client9</span>
            <span class="client" >client10</span>
        </div>
</div>
<div class="clients-list">
        <div>
            <span class="client" >client11</span>
            <span class="client" >client12</span>
        </div>
</div>'''

soup=BeautifulSoup(html,'html.parser')
dates=soup.find_all(class_='date')
for date in dates:
  print(date.text)
  for item in date.parent.parent.find_next_siblings(class_='clients-list'):

      if item.find_previous_sibling(class_='info').find_next(class_='date').text==date.text:
          for client in item.find_all(class_='client'):
              print(client.text)

Вывод :

DATE-1
client1
client2
client3
client4
client5
client6
DATE-2
client7
client8
client9
client10
client11
client12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...