Как перебрать и взять все значения, используя красивый суп для очистки сайта? - PullRequest
1 голос
/ 16 января 2020

Вот часть моей HTML страницы, которую я анализирую в переменную с помощью Beautiful Soup. Мне нужно извлечь некоторые из текстовых значений и вставить их в таблицу позже. Мне нужно имя игрока, команда и очки.

Я могу получить имя первого игрока и второго, используя next_sibling, но не могу перебрать всю страницу.

<h3>NBA Player Points</h3>
<br>

0089, Thu Jan 16 03:00:00 CET 2020, DEN/CHA-Murray J. (DEN)
<ul>
<li>Player Points  [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.85, Over : 1.85, OU : 18.5]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Index Rating [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Assists [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Rebounds [Under : 1.0, Over : 1.0, OU : 0.0]</li>
</ul>

0761, Thu Jan 16 03:00:00 CET 2020, DEN/CHA-Rozier T. (CHA)
<ul>
<li>Player Points  [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.75, Over : 1.95, OU : 18.5]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Index Rating [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Assists [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Rebounds [Under : 1.0, Over : 1.0, OU : 0.0]</li>
</ul>

1491, Thu Jan 16 03:00:00 CET 2020, DEN/CHA-Grant J. (DEN)
<ul>
<li>Player Points  [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.85, Over : 1.85, OU : 13.5]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Index Rating [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Assists [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Rebounds [Under : 1.0, Over : 1.0, OU : 0.0]</li>
</ul>

Вот что я хотел бы получить от этого HTML:

Игрок: Мюррей Дж.

Команда: DEN

Очки игрока: 18,5

Игрок: Розьер Т.

Команда: CHA

Очки игрока: 18,5

Игрок: Грант J.

Команда: DEN

Очки игрока: 13,5

Есть идеи?

1 Ответ

1 голос
/ 16 января 2020

Не самый элегантный код, но он должен вас туда доставить. Основным инструментом для работы со строками является метод partition(), который разбивает строку на 3 подстроки вокруг разделителя. Из них затем удаляются ненужные символы с использованием методов strip() и replace().

from bs4 import BeautifulSoup as bs
players = """[your html above]"""

soup = bs(players,'lxml')
names = soup.select('ul')
for name in names:
    dat = name.previous.strip().partition('-')[2]
    print('Name:',dat.partition('. ')[0]+'.')
    print('Team:',dat.partition('. ')[2].replace('(','').replace(')',''))
    print('Player Points:',name.select('li')[2].text.partition(', OU : ')[2].replace(']',''))

Вывод:

Name: Murray J.
Team: DEN
Player Points: 18.5
Name: Rozier T.
Team: CHA
Player Points: 18.5
Name: Grant J.
Team: DEN
Player Points: 13.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...