BeautifulSoup выскабливает альтернативные дивы - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь очистить файл, который я написал, в качестве учебного эксперимента. Это выглядит так:

<div class="container">
    <div class="date">1st</div>
    <div class="events">
        <div class="meeting">
            <span class="name">Bob</span>
        </div>
    </div>
    <div class="date">2nd</div>
    <div class="event">
        <div class="meeting">
            <span class="name">Emma</span>
            <span class="name">Frank</span>
            <span class="name">Charlie</span>
        </div>
    </div>
    <div class="date">3rd</div>
    <div class="event">
        <div class="meeting">
            <span class="name">Lisa</span>
            <span class="name">Tony</span>
        </div>
    </div>
</div>

Я бы хотел удалить данные, чтобы они возвращали диапазон с соответствующей датой. Так, например:

data = [['1st', 'bob'], ['2nd', 'Emma', 'Frank' 'Charlie'], ['3rd', 'Lisa', 'Tony']]

Проблема, с которой я сталкиваюсь, заключается в том, что Div * date и event находятся на одном уровне, когда я пролистываю с помощью следующего:

for data in schedule_soup.find_all('div', 'container'):
    for date in data.find_all('div', 'date'):
        print(date)
    for name in data.find_all('span', 'name'):
        print(name)

Я понял:

<div class="date">1st</div>
<div class="date">2nd</div>
<div class="date">3rd</div>
<span class="name">Bob</span>
<span class="name">Emma</span>
<span class="name">Frank</span>
<span class="name">Charlie</span>
<span class="name">Lisa</span>
<span class="name">Tony</span>

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете использовать функцию почтового индекса:

final_list=[]
dates = soup.find_all('div', 'date')
meetings = soup.find_all('div', 'meeting')
for date1, meeting in zip(dates, meetings):
    temp_list=[]
    temp_list.append(date1.text)
    [temp_list.append(x.text) for x in meeting.find_all('span')]
    final_list.append(temp_list)
print (final_list)
0 голосов
/ 18 сентября 2018

Попробуйте использовать приведенный ниже код, у меня это сработало

final_list=[]
dates = soup.find_all('div', 'date')
for c in range(len(dates)):
    temp_list=[]
    temp_list.append(dates[c].text)
    meeting = soup.find_all('div', 'meeting')
    meeting = BeautifulSoup(str(meeting[c]),'html.parser')
    for name in meeting.find_all('span','name'):
        temp_list.append(name.text)
    final_list.append(temp_list)
print(final_list)

выход

[['1st', 'Bob'], ['2nd', 'Emma', 'Frank', 'Charlie'], ['3rd', 'Lisa', 'Tony']]

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